从 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 时间戳(当前时间,以秒为单位)

Java:Unix时间以毫秒为单位

以秒为单位的转换时间戳值不会反转为 python 中的原始时间戳

每个周期索引一个数组(以秒为单位)

MySql 以秒为单位的两个时间戳之间的区别?