我将prestodb与hive metastore一起用于模式存储,将alluxio缓存用作数据的外部存储。alluxio和hive模式中使用的存储格式是parquet。在使用配置单元目录从presto检索时间戳字段时。我犯了错误。
utdate列声明为timestamp类型,但parquet文件将该列声明为int64类型
数据集的架构为
使用(format='parquiet',external\u location=)创建表test(utcdate timestamp)alluxio://path-toserver/directory-path-to-parquet' )
此问题是在从prestodb v0.221升级到v0.226版本后产生的。
2条答案
按热度按时间kyvafyod1#
我在保存Parquet地板时使用这个来解决时间戳问题。
pyarrow.parquet.write\u表(self.arrow\u表,文件名,使用不推荐的\u int96\u timestamps=true)
presto和spark使用int96 timestamp值以纳秒为单位存储时间戳。pyarrow表的默认时间戳格式是int64,而presto将int64视为bigint数据类型。如果我们在pyarrow中使用不推荐使用的timestamp int96版本,我们将获得presto兼容格式的timestamp值。
pnwntuvh2#
不清楚你在问什么,所以我想问题是:如何读取数据。
在.226版本中,没有可用于读取数据的开关或配置更改。因此,您目前有两种选择:
降到前221级
升级至presto 324