【问题标题】:AWS Athena mis-reading date formatsAWS Athena 误读日期格式
【发布时间】:2020-01-13 11:07:03
【问题描述】:

我正在尝试将 pandas 数据帧上传到 S3 存储桶,然后使用 Athena 进行查询。 我已按以下格式上传日期时间:

pd.to_datetime(df["myDateTime"], format='%Y-%m-%d %H:%M:%S')
2019-08-07 08:04:43.942000+00:00

df.dtypes
myDateTime datetime64[ns, UTC]

当我尝试在 Athena 中查询结果时,我得到了这样的结果:

+51568-02-09 14:52:22.000
CREATE EXTERNAL TABLE IF NOT EXISTS default.dashboardtable(
  `myDateTime` timestamp,

我尝试在 Pandas 中更改日期格式以排除微秒,但这似乎不起作用。

【问题讨论】:

  • 你确定是同一条记录吗?输入输出?
  • 是的,是同一条记录
  • @davo777 您的问题似乎类似于 stackoverflow.com/questions/56430840/… 。我猜你正在使用 Parquet,对吗?
  • 我解决它的方法是将我的日期时间列转换回字符串,删除此位“000+00:00”,并在 Athena 中将格式更改为时间戳

标签: python pandas amazon-web-services datetime amazon-athena


【解决方案1】:

我假设您正在 S3 中的 parquet 文件上构建 Athena 表。这意味着您可能正在使用 to_parquet() 方法将数据帧导出到 parquet 文件。

如果您使用的是 pyarrow 引擎,您可以将 coerce_timestamps kwarg 传递给 to_parquet(),这会将日期时间的精度从 ns 降低到 ms(或其他不与 Athena/ 冲突的单位)很快。

所以你的 to_parquet 方法应该是这样的

df.to_parquet(parquet_path, engine='pyarrow', coerce_timestamps='ms')

此解决方案不适用于 fastparquet 等其他镶木地板引擎。

另外,我非常感谢@tipanverella's answer here

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。我最终将结果整数除以 1000 并在查询时使用 from_unixtime 函数。

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 2020-06-22
      • 2019-08-30
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2018-02-23
      • 2016-08-17
      • 2021-01-08
      相关资源
      最近更新 更多