簡體   English   中英

AWS Athena 錯誤解釋時間戳列

[英]AWS Athena mis-interpreting timestamp column

我正在處理 CSV 個文件,在 AWS Lambda function 中使用 Pandas 輸出鑲木地板文件,將數據保存到 S3 存儲桶以使用 Athena 進行查詢。 Lambda function 的 RAW 輸入格式為 CSV,UTC 時間戳為 unix,如下所示:

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

我在 Lambda function 和 output 一個鑲木地板文件中進一步處理數據。 然后,我針對此腳本輸出的鑲木地板文件運行 Glue 爬蟲,在 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 中使用TIMESTAMP列,您需要使用特定格式,不幸的是,它不是 ISO 8601。它看起來像這樣:“2020-11-14 20:33:42”。

您可以使用from_iso8601_timestamp(ts)來解析查詢中的 ISO 8601 時間戳。

可悲的是,膠水爬蟲經常誤解事物並創建不能與 Athena 正常工作的表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM