繁体   English   中英

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

[英]Amazon athena can't read S3 JSON Object files and Athena select query returns empty result sets for JSON key columns

我在 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/';

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

{ "devId": "00abcdef1122334401", "type": "lora", "status": "huihuhukiyg" }

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

SELECT count(*) as total_s3_objects FROM "athena_db"."s3_json_objects"

但是每当我在 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"

在此处输入图片说明

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

无法通过 Amazon Athena 读取 json 文件

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

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

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

示例(这可能都在一个 S3 对象中):

{"devId": "a1", "type": "b1", "status": "c1"}
{"devId": "a2", "type": "b2", "status": "c2"}

Glue 可以读取多行 json 对象,因为它的引擎盖下有火花引擎。 一种解决方法是,如果您无法轻松地在线制作这些 json 对象,请使用胶水将这些 json 对象转换为镶木地板。

使用 jsonlines 将 JSON 转换为 jsonlines,然后 Athena 将能够获取所有行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM