【发布时间】:2021-07-10 08:21:57
【问题描述】:
美好的一天!
问题是:有谁知道如何在不只包含 JSON 的 S3 存储桶上使用 Athena 查询 JSON 数据?
我一直在尝试在具有此类对象的存储桶中创建 Athena 搜索
S3Bucket
├── AFolder
│ ├── ExternalServiceID-1
│ │ ├── file-that-is-JSON
│ │ └── file-that-is-zip
│ ├── ExternalServiceID-2
│ │ ├── file-that-is-JSON
│ │ └── file-that-is-zip
│ └── ...
我想要做的 Athena 搜索是在一个试图投射 files-that-is-JSON 的一些简单属性的表上。
该表是这样创建的(更多属性,但它们都是相同的结构),请注意最后的语句,该语句由文档说明应该做什么来忽略非 json 数据:
CREATE EXTERNAL TABLE IF NOT EXISTS mytable(
person struct <
firstname: string,
lastname: string,
>
)
ROW FORMAT serde 'org.openx.data.jsonserde.JsonSerDe'
with serdeproperties ( 'ignore.malformed.json'='true' )
但是,当使用任何 WHERE 子句运行查询时,我会收到错误 HIVE_BAD_DATA: Error parsing field value for field 1: Data is not JSONObject but java.lang.String with value H,这表明未正确创建表。此类查询的一个示例是:
SELECT *
FROM "workspace"."mytable"
WHERE person.firstname.value='Max'
AND person.lastName.value='Mustermann' limit 10;
如果我不使用我在创建表时描述的结构,那么我没有错误,但我自然失去了使用特定值查询的能力。
【问题讨论】:
标签: json amazon-web-services amazon-s3 amazon-athena