如何停止将完整 JSON 对象加载到 AWS Athena 中的单个字段中

问题描述 投票:0回答:1

我正在尝试将 JSON 数据从 S3 加载到 Athena 中的表中。

我的 JSON 数据如下所示;

[{"a":"a_value", "b":"b_value", "my_data":{"c":"c_value", "d":1, "e":2}},
{"a":"a_value", "b":"b_value", "my_data":{"c":"c_value", "d":2, "e":3}},
{"a":"a_value", "b":"b_value", "my_data":{"c":"c_value", "d":3, "e":4}},
{"a":"a_value", "b":"b_value", "my_data":{"c":"c_value", "d":4, "e":5}},
{"a":"a_value", "b":"b_value", "my_data":{"c":"c_value", "d":5, "e":6}}]

我创建表的语句如下所示;

CREATE EXTERNAL TABLE IF NOT EXISTS `my_db`.`my_table`(
    `a` string,
    `b` string,
    `my_data` STRUCT< 
        `c`: STRING,
        `d`: INT, 
        `e`: INT>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'ignore.malformed.json' = 'FALSE',
  'dots.in.keys' = 'FALSE',
  'case.insensitive' = 'TRUE',
  'mapping' = 'TRUE'
)
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://myjsondata/'
TBLPROPERTIES ('classification' = 'json');

我明白了;

  • 三列,a,b,my_data
  • 一排。
  • a 列包含 {"a":"a_value", "b":"b_value", "my_data":{"c":"c_value", "d":1, "e":2}
  • b 列包含 {"a":"a_value", "b":"b_value", "my_data":{"c":"c_value", "d":2, "e":3}
  • 列 my_data 包含 {"c":null, "d":null, "e":null}

我真正想要的是

a b c d e
a_值 b_值 c_值 1 2
a_值 b_值 c_值 2 3
a_值 b_值 c_值 3 4
a_值 b_值 c_值 4 5
a_值 b_值 c_值 5 6

有人可以帮我看看我哪里出错了吗?

json amazon-web-services struct amazon-athena create-table
1个回答
0
投票

这是类似的问题

在AWS Athena中提取数组中的json

如果您的数据格式是这种格式,那么您不必像 URL

中那样编写复杂的查询
{ "id" : 50, "name":"John" }
{ "id" : 51, "name":"Jane" }
{ "id" : 53, "name":"Jill" }

点击此链接了解有关数据格式的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.