首页 > 解决方案 > 在 Athena 中读取不一致的嵌套 JSON

问题描述

在 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 可以知道缺少哪个字段并将其填充为空?

标签: jsonhivenestedddlamazon-athena

解决方案


推荐阅读