#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)?