在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?