从 Avro 将 unix 时间戳(以秒为单位)导入 Bigquery 中的正确时间戳
Posted
技术标签:
【中文标题】从 Avro 将 unix 时间戳(以秒为单位)导入 Bigquery 中的正确时间戳【英文标题】:Import a unix timestamp in seconds from Avro to the right timestamp in Bigquery 【发布时间】:2021-02-22 13:07:14 【问题描述】:我想将以 AVRO 格式存储的数据从 GCS 导入 Bigquery。
源时间戳是具有秒精度的 Unix 格式(例如:1572534049),但是 BQ 要求它以毫秒或微秒精度使用逻辑类型并将其转换为正确的 TIMESTAMP(我目前得到值在 1970-XX-XX 而不是 2021-XX-XX)。
我知道我的问题类似于以下线程: Convert unix timestamp to avro and store it in BigQuery
但是,我不能将 AVRO 文件中的列乘以 1000,因为它们是从其他地方检索然后定期存储的。看来我也无法在表架构定义中添加 *1000。
如果没有直接的方法,我会简单地将带有unix时间戳的AVRO作为一个整数导入一个中间表中,然后通过查询输出另一个具有预期列的表,但这不是最方便的。
编辑:添加示例
【问题讨论】:
【参考方案1】:您可以尝试以下解决方案来实现所需的要求。
第 1 步:将数据以与 GCS 上可用的相同格式加载到 Bigquery。 第 2 步:在最近的表上创建一个 View 并在该视图中应用日期转换,更进一步始终参考视图以获取数据。
替代解决方案:- 第 1 步:以与 GCS 上可用的相同格式将数据加载到 Bigquery。 第 2 步:在调用数据之前,为日期转换创建 function 并在 Unix 格式日期上应用函数。
它将满足您的要求。
【讨论】:
以上是关于从 Avro 将 unix 时间戳(以秒为单位)导入 Bigquery 中的正确时间戳的主要内容,如果未能解决你的问题,请参考以下文章
将 unix_timestamp 转换为 spark 中的普通时间戳(以秒为单位)
获取 Go 语言中的 Unix 时间戳(当前时间,以秒为单位)