AWS Athena неправильно интерпретирует столбец временных меток

#pandas #amazon-web-services #aws-lambda #amazon-athena

#pandas #amazon-веб-сервисы #aws-лямбда #amazon-athena

Вопрос:

Я обрабатываю файлы CSV, выводю файлы parquet с использованием Pandas в функции AWS Lambda, сохраняю данные в корзину S3 для запроса с помощью Athena. Формат необработанных входных данных для лямбда-функции — CSV, с меткой времени unix в UTC, которая выглядит как:

 Timestamp,DeviceName,DeviceUUID,SignalName,SignalValueRaw,SignalValueScaled,SignalType,Valid
1605074410110,F2016B1E.CAP.0 - 41840982B40192,323da038-bb49-4f3a-a045-925194364e5b,X.ALM.FLG,0,0,INTEGER,true
  

Я анализирую временную метку следующим образом:

 df['Timestamp'] = pd.to_datetime(df['Timestamp'], unit='ms')
df.head()

    Timestamp               DeviceName                      DeviceUUID                          SignalName  SignalValueRaw  SignalValueScaled   SignalType  SubstationId    StationBankId   FeederId    year    month   day hour    DeviceNameClean DeviceType
0   2020-11-11 06:00:10.110 F2016B2W.MLR.0 - 41841005000073 3c4839b1-ab99-4164-b415-4653948360ef    CVR_X_ENGAGED_A 0   0   BOOLEAN Kenton  FR2016B2    F2016B2W    2020    11  11  6   MLR.0 - 41841005000073  MLR
  

Я обрабатываю данные дальше в лямбда-функции, а затем вывожу файл parquet.
Затем я запускаю поисковик клея для файлов parquet, которые выводит этот скрипт, и в S3 могу запрашивать данные нормально:

 2020-11-14T05:00:43.609Z,02703ee8-b08a-4c49-9581-706f905aa192,FR22607.REG.0,REG,REG.0,ROSS,FR22607,,0,0,0,0,0,0,0,0,,0.0,,,,0.0,,,,1.0,,
  

Поисковый модуль склеивания правильно идентифицирует столбец как временную метку:

 CREATE EXTERNAL TABLE `cvr_event_log`(
  `timestamp` timestamp, 
  `deviceuuid` string, 
  `devicename` string, 
  `devicetype` string, 
...
  

Но когда я затем запрашиваю таблицу в Athena, я получаю это для даты:

 "timestamp","deviceuuid","devicename","devicetype",
" 52840-11-19 16:56:55.000","0ca4ed37-930d-4778-b3a8-f49d9b498364","FR22606.REG.0","REG",
  

Что так смутило Athena в отношении временных меток?

Ответ №1:

Для TIMESTAMP работы столбца в Athena вам необходимо использовать определенный формат, который, к сожалению, не является ISO 8601. Это выглядит так: "2020-11-14 20:33:42".

Вы можете использовать from_iso8601_timestamp(ts) для анализа временных меток ISO 8601 в запросах.

К сожалению, поисковые системы Glue довольно часто неверно интерпретируют данные и создают таблицы, которые не работают должным образом с Athena.

Комментарии:

1. Итак, мне нужно сделать мой столбец текстовым столбцом и проанализировать его, используя from_iso8601_timestamp(ts)?