python - AWS Athena 误读日期格式
问题描述
我正在尝试将 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 中的日期格式以排除微秒,但这似乎不起作用。
解决方案
我假设您正在 S3 中的镶木地板文件上构建 Athena 表。这意味着您可能正在使用该to_parquet()
方法将数据帧导出到镶木地板文件。
如果您使用的是 pyarrow 引擎,您可以传递一个coerce_timestamps
kwarg 来to_parquet()
将日期时间的精度从 ns 降低到 ms(或其他不与 Athena/presto.conf 冲突的单位)。
所以你的 to_parquet 方法应该是这样的
df.to_parquet(parquet_path, engine='pyarrow', coerce_timestamps='ms')
此解决方案不适用于其他镶木地板引擎,例如fastparquet
.
另外,我非常感谢@tipanverella 在这里的回答
推荐阅读
- python - 使用 selenium python 自动化 SoundCloud
- objective-c - 尝试在 macOS 上将 RSA 私钥添加到 Keychain 失败并显示 -25303 errSecNoSuchAttr
- webots - 将对象固定在 webbot 中的位置
- amazon-web-services - 当 ECR 映像引用代码时,AWS CDK 更新 lambda 函数代码
- python - Python:即使导入了文件,也无法使用另一个文件中的变量
- vb.net - 如何通过按下按钮将组合框设置为特定项目 (Visual Basic)
- html - 如何在小屏幕尺寸上包裹网格元素?
- tableau-api - 带有条件给出错误的表格计算字段
- pine-script - 使用 pine 将指标转换为筛选器
- java - 我们可以使用 equals() 方法来比较对象中的所有内容吗?