【问题标题】:Amazon athena can't read S3 JSON Object files and Athena select query returns empty result sets for JSON key columnsAmazon athena 无法读取 S3 JSON 对象文件,并且 Athena 选择查询返回 JSON 键列的空结果集
【发布时间】:2019-03-11 22:53:00
【问题描述】:

我在 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 工作正常并仅返回正确的结果 count

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

但是每当我在 SQL 选择语句下面查询以获取 来自 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 上发布此问题之前,我会查看这些链接

Can't read json file via Amazon Athena

AWS Athena json_extract query from string field returns empty values

任何 cmets 或建议将不胜感激。

【问题讨论】:

    标签: json amazon-web-services amazon-athena presto


    【解决方案1】:

    JSON 必须在一行中,如 this page of the AWS Athena documentation 中所述。您可以在不同的行中有多个 JSON 对象,但每个完整的对象只能跨越一行。

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

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

    【讨论】:

    • 我的对象只跨越一行,但没有帮助。如果我查询“select * from xxx”如果显示如下消息:| 1 |富 | {"int_field":"1","str_field":"hello"} |,如果我制作 json_extract 它只显示数字。我需要制作 json,因为如果进行简单选择,所有数字都在引号中
    • @Sergius 另外,值之间不能有空格。摆脱所有的空间。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2020-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        • 2018-12-09
        • 2020-09-19
        相关资源
        最近更新 更多