Я запрашиваю данные в AWS Athena из файлов JSON, хранящихся в S3. Я загрузил все файлы JSON в Athena с помощью AWS Glue, и пока он работает отлично. Однако форматирование метки времени изменилось в файлах JSON с
2018-03-23 15:00:30.998
к
2018-08-29T07:59:50.568Z
Таким образом, в таблице появляются такие записи
2018-08-29T07:59:42.803Z
2018-08-29T07:59:42.802Z
2018-08-29T07:59:32.500Z
2018-03-23 15:03:43.232
2018-03-23 15:03:44.697
2018-03-23 15:04:11.951
Это приводит к ошибкам синтаксического анализа, когда я пытаюсь выполнить запросы к полной БД.
Как разместить это в AWS Glue (или Athena), чтобы не разделять данные при запросе? Я пробовал изучать специальные классификаторы, но не знаю, как их использовать в данном конкретном случае.
Заранее спасибо.
Кажется, это тоже работает. Но вместо этого я фактически объединил данные.
К сожалению, вам нужно унифицировать данные. Если вы решите использовать формат «2018-08-29T07: 59: 50.568Z», вы можете прочитать такие данные с помощью библиотеки org.apache.hive.hcatalog.data.JsonSerDe со следующим свойством serde: 'timestamp.formats' = ' гггг-ММ-дд \ 'Т \' ЧЧ: мм: сс.СССЗ '
Я не совсем уверен, что вы имеете в виду под «единством данных»?
Как вы упомянули, у вас есть столбец меток времени с двумя форматами (2018-08-29T07: 59: 42.803Z и 2018-03-23 15: 03: 44.697). Вы должны унифицировать данные и использовать только один формат.
Можете ли вы сопоставить свои значения временных меток как
varchar
? Затем вы сможете явно проанализировать их в SQL (или определить VIEW, который это делает), используя оператор CASE, проверяя, в каком формате находится конкретное значение.