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