Чтение непоследовательного вложенного JSON в Афине - PullRequest
0 голосов
/ 22 мая 2018

В Афине я читаю некоторые вложенные файлы 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", так и структуру "персона".

Как видите, поля, указанные в "теле", не всегда согласованы.Я попытался добавить все возможные поля и их структуры в мой запрос CREATE EXTERNAL TABLE.Однако столбец «data», который содержит поле «body», по-прежнему не заполняется и остается пустым, когда я «таблица предварительного просмотра» в Афинах.

В CREATE TABLE DDL есть способ указать, что IХотите заполнить все столбцы, которые отсутствуют в JSON каждого файла, нулевыми значениями?

Кроме того, «имена», данные полям в запросе, не должны соответствовать значениям ключа в необработанном JSON.Кажется, Афина просто читает структуру и ничего больше.Есть ли способ указать, какой ключ JSON соответствует какому имени поля Athena напрямую?Так что, если в «теле» одного файла отсутствуют некоторые поля, Афина может узнать, какое из них отсутствует, и заполнить его как ноль?

...