我有一些时间戳在数据库中是9999-12-31
的,并试图转换为拼花。不知何故,这些时间戳在拼图文件中都以1816-03-29 05:56:08.066
的形式结束。
以下是重现该问题的一些代码。
file_path = "tt.parquet"
schema = pa.schema([pa.field("tt", pa.timestamp("ms"))])
table = pa.Table.from_arrays([pa.array([datetime(9999, 12, 31),], pa.timestamp('ms'))], ["tt"])
writer = pq.ParquetWriter(file_path, schema)
writer.write_table(table)
writer.close()
我没有尝试用pandas读取数据,但我尝试过用pandas检查,但最终出现了pyarrow.lib.ArrowInvalid: Casting from timestamp[ms] to timestamp[ns] would result in out of bounds timestamp:
错误。
我正在将拼图文件加载到Snowflake中,并返回错误的时间戳。我也尝试过使用拼图工具进行检查,但这似乎不适用于时间戳。
parquet/pyarrow不支持大的时间戳吗?如何存储正确的时间戳?
发布于 2021-10-05 17:05:14
显然,时间戳'9999-12-31‘不是用作真正的时间戳,而是用作无效值的标志。
如果在流水线的末尾,Snowflake看到的是'1816-03-29 05:56:08.066',那么您可以将它们保持原样-或者将它们重新转换为您希望它们在Snowflake中具有的任何值。至少它是一致的。
但是,如果您坚持希望Python能够正确处理9999种情况,那么可以看看这个用use_deprecated_int96_timestamps=True
解决的问题
发布于 2021-10-06 16:04:14
对我来说,这是因为我需要在拼花writer上设置use_deprecated_int96_timestamps=False
默认情况下它说它是假的,但是我把它的风格设置为“spark”,所以我认为它覆盖了它。
感谢你的帮助
https://stackoverflow.com/questions/69458623
复制