在Athena中,我正在将一些嵌套的JSON文件读入表中 . 实际包含嵌套JSON的字段在原始数据中的不同文件中具有不一致的字段数 .
有时数据看起来像这样:
{
"id": "9f1e07b4",
"date": "05/20/2018 02:30:53.110 AM",
"data": {
"a": "asd",
"b": "adf",
"body": {
"sid": {
"uif": "yes",
"sidd": "no",
"state": "idle"
}
},
"category": "scene"
}
}
其他时候数据看起来像这样:
{
"id": "9f1e07b4",
"date": "05/20/2018 02:30:45.436 AM",
"data": {
"a": "event",
"b": "state",
"body": {
"persona": {
"one": {
"movement": "idle"
}
}
},
"category": "scene"
}
}
其他时候,“body”字段包含“sid”结构和“persona”结构 .
正如您所看到的,“body”中给出的字段并不总是一致的 . 我尝试在CREATE EXTERNAL TABLE查询中添加所有可能的字段及其结构 . 但是,当我在Athena中“预览表格”时,包含“正文”字段的“数据”列仍然不会填充并保持空白 .
在CREATE TABLE DDL中,有没有办法表明我想用空值填充每个文件的嵌套JSON中不存在的所有列?
此外,给查询中的字段的“名称”不必与原始JSON中的键值相对应 . 似乎雅典娜只是简单地阅读结构,而不是别的 . 有没有办法直接指示哪个JSON键对应哪个Athena字段名称?因此,如果某个文件的“正文”中缺少某些字段,Athena可以知道哪个字段丢失并将其填入为null?