为什么int96时间戳对我不起作用?
我想用S3 Select读取 parquet 文件。根据文档,S3 Select不支持保存为int96的时间戳。另外,在 parquet 中保存为int96的时间戳是deprecated。
我尝试了什么?
Firehose使用org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
序列化到parquet(AWS使用的确切配置单元版本未知)。在阅读配置单元代码时,我遇到了以下配置开关:我尝试通过更改AWS Glue表config中的Serde参数来应用此配置开关:
不幸的是,这并没有产生什么影响,我的时间戳列仍然存储为int96(通过从S3下载文件并用parq my-file.parquet --schema
检查它来检查)
1条答案
按热度按时间68bkxrlz1#
虽然我不能让Firehose写入int64时间戳,但我找到了一个变通方法,可以将S3Select查询结果返回的int96时间戳转换为有用的东西。
我使用了中介绍的方法
用JavaScript编写以下转换函数:
注意,unlike expected,S3 Select返回的时间戳将儒略历部分存储在开头,而不是最后4个字节。纳秒时间部分存储在最后8个字节。此外,字节顺序不颠倒。
(关于儒略日常数
2440588
:根据https://docs.oracle.com/javase/8/docs/api/java/time/temporal/JulianFields.html,在此上下文中使用2440587.5
是错误的)