如何将扳手 TIMESTAMP 转换为 BigQuery TIMESTAMP?

Posted

技术标签:

【中文标题】如何将扳手 TIMESTAMP 转换为 BigQuery TIMESTAMP?【英文标题】:How to convert the spanner TIMESTAMP to BigQuery TIMESTAMP? 【发布时间】:2019-09-11 12:48:42 【问题描述】:

我正在尝试将一些表从 Spanner 复制到 BigQuery。

我将 Spanner 数据库转储到 csv 文件中,当我尝试将该 csv 上传到 BigQuery 时,它会引发时间戳格式错误。

Here 他们提到了 BigQuery TIMESTAMP 的限制。

如何将 spanner TIMESTAMP 转换为 BigQuery TIMESTAMP?

【问题讨论】:

当您从 cloudpanner 源移植数据时,您可能需要格式化时间戳。或者,您可以选择按原样进行,并在上传期间将时间戳字段保留为字符串字段,并在查询时在 Bi​​gQuery 中对其进行解析。 【参考方案1】:

可能有两种方法可以解决这个问题。

    将时间戳字段保留为 Cloud Spanner 导出的字符串,并将其作为字符串加载到 BigQuery 中。它仍应可排序并用于谓词。 使用用户定义的函数进行字符串转换,通过 TextToBigQuery Dataflow template 在 BigQuery 中本地加载时间戳。

您还可以编写脚本将时间戳转换为 BigQuery 格式。

【讨论】:

【参考方案2】:

除了@Biswa-nag 写的 -

我们将 Spanner 表导出到 avro 文件,然后导入到 BigQuery。 不幸的是,时间戳原来是 BigQuery 中的字符串。

我们针对临时查询的解决方法是使用用户定义的函数来转换查询中的时间戳(需要一些时间才能找到正确的格式...)

一个例子:

CREATE TEMP FUNCTION ConvertTimestamp(dt STRING) AS (PARSE_DATETIME("%Y-%m-%dT%H:%M:%E*SZ", dt));
select count(*) from `[db].Games` where ConvertTimestamp(StartTime) >= DateTime(2019,8,1,0,0,0)

【讨论】:

【参考方案3】:

我像这样将时间戳转换为纪元时间

SELECT myTime , FORMAT_TIMESTAMP("%s",  myTime, "America/Los_Angeles") FROM MyTable

它成功了。

【讨论】:

以上是关于如何将扳手 TIMESTAMP 转换为 BigQuery TIMESTAMP?的主要内容,如果未能解决你的问题,请参考以下文章

java中如何将Timestamp转换为毫秒数

自Epoch以来如何将Pandas Timestamp转换为nano?

如何将 Timestamp 转换为 Date 或 DateTime 对象?

如何将 Timestamp(date.getTime()) 转换为 ms 访问日期? [复制]

kettle如何将string类型转换为timestamp类型

Mongo:如何将所有使用 long timeStamp 的条目转换为 ISODate?