Какова правильная схема Glue для обработки меток времени в именах ключей JSON? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть коллекция файлов JSON, которые я пытаюсь запросить с помощью AWS Athena / Glue.Одна запись на файл.Для начала я просмотрел файлы с помощью гусеничного сканера.Авто-схемы Glue такие же, как у меня, за исключением того, что у меня есть структуры для timeline вместо map<string, string>, которые у меня есть в настоящее время.

Данные timeline мне не очень полезны, они простонужно не пропустить мои запросы.Если возможно, я бы хотел избежать написания задания ETL (как описано в этом вопрос / ответ ) для удаления / сглаживания / изменения данных timeline, но если я должен, я должен.

Данные в JSON-файлах:

{
  "id": "0093f8ee-406d-49a6-96c0-0ae43eb6a94e",
  "handlerId": "323d11be7e5f720224b9935a6476ebfd",
  "handlerUrn": "urn::::stack:AWS:EC2:Patching",
  "contextUrn": "urn::test:aab:aws:533:us-east-1:ec2:instance/i-07",
  "urn": "urn::test:aab:process:0093f8ee-406d-49a6-96c0-0ae43eb6a94e",
  "timeline": {
    "2019-05-17T16:55:06.715Z": "NEW",
    "2019-05-17T16:55:06.862Z": "READY",
    "2019-05-17T16:55:07.186Z": "WAITING",
    "2019-05-17T16:55:07.895Z": "RUNNING",
    "2019-05-17T17:03:09.775Z": "TERMINATED"
  },
  "state": "TERMINATED",
  "timestamp": "2019-05-17T17:03:09.775Z"
}

Это схема, которая у меня есть прямо сейчас.

CREATE EXTERNAL TABLE IF NOT EXISTS processes00.processesmap
 (id string,
  handlerId string,
  handlerUrn string,
  contextUrn string,
  urn string,
  timeline map<string, string>,
  state string,
  `timestamp` timestamp
  )
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION 's3://Processes/0/0/';

Я попытался обернуть уродливое имя ключа временной метки в строку вmaps<string, string> но я не знаю, насколько это эффективно.

Простой ответ: «Не используйте метки времени в качестве имен ключей», и я хотел бы изменить это.

...