Amazon athena 无法读取 S3 JSON 对象文件,并且 Athena 选择查询返回 JSON 键列的空结果集

Sam*_*Dev 6 json amazon-web-services presto amazon-athena

我在 Athena 中创建了一个具有以下结构的表

CREATE EXTERNAL TABLE s3_json_objects (
    devId string,
    type string,
    status string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 'ignore.malformed.json' = 'true')
LOCATION 's3://mybucket/folder1/data/athena_test/';
Run Code Online (Sandbox Code Playgroud)

S3 存储桶对象包含这样的 JSON 结构

{
    "devId": "00abcdef1122334401",
    "type": "lora",
    "status": "huihuhukiyg"
}
Run Code Online (Sandbox Code Playgroud)

然而,下面的 SQL 正常工作并返回正确的结果,仅用于计数

SELECT count(*) as total_s3_objects FROM "athena_db"."s3_json_objects"
Run Code Online (Sandbox Code Playgroud)

但是每当我在 SQL select 语句下查询以从 S3 中获取 JSON 值时,它都会返回带有列空值的结果集

SELECT devid FROM "athena_db"."s3_json_objects"
SELECT json_extract(devid , '$.devid') as Id FROM "athena_db"."s3_json_objects"
SELECT * FROM "athena_db"."s3_json_objects"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

此外,我在 StackOverflow 和AWS Athena doc上发布此问题之前查看了这些链接

无法通过 Amazon Athena 读取 json 文件

来自字符串字段的 AWS Athena json_extract 查询返回空值

任何意见或建议将不胜感激。

Tom*_*Tom 3

JSON 必须位于一行中,如AWS Athena 文档的本页所述。您可以在不同的行上放置多个 JSON 对象,但每个完整的对象只能跨越一行。

示例(这可能全部位于一个 S3 对象中):

{"devId": "a1", "type": "b1", "status": "c1"}
{"devId": "a2", "type": "b2", "status": "c2"}
Run Code Online (Sandbox Code Playgroud)