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

时间:2019-09-11 12:48:42

标签: google-bigquery google-cloud-spanner

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

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

Here,他们提到了BigQuery TIMESTAMP的局限性。

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

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

除了@ 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)

答案 2 :(得分:0)

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

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

它奏效了。