更新Google BigQuery表中的无效时间戳记

时间:2019-12-23 17:15:16

标签: sql google-bigquery

我的表中有一些无效的时间戳,我认为对于BigQuery来说,这些时间戳太精确了(可能超过微秒)。

当我尝试使用标准SQL使用以下查询更新表时:

UPDATE mytable
SET event_time = TIMESTAMP(DATETIME(TIMESTAMP_MILLIS(CAST(SUBSTR(SAFE_CAST(UNIX_MILLIS(event_time) AS string),1,13) AS int64))))
WHERE DATE(logtime) BETWEEN "2018-03-21" AND "2018-03-23"
    AND event_time IS NOT NULL

我收到无效的时间戳错误:

Cannot return an invalid timestamp value of 1521738691071000064 microseconds relative to the Unix epoch. The range of valid timestamp values is [0001-01-1 00:00:00, 9999-12-31 23:59:59.999999]; error in writing field event_time

我认为问题出在SET event_time =部分,但我不知道如何不参考而在event_time列中设置值。

有人对如何解决这个问题有任何想法吗?

1 个答案:

答案 0 :(得分:2)

必要性是发明之母。对于有类似问题的任何人,我都想出了一种解决方法。

  1. 为受影响的行创建一个新表(在WHERE子句中包含此表:LENGTH(CAST(UNIX_MILLIS(event_time) as string)) > 13,同时转换 使用TIMESTAMP(DATETIME(TIMESTAMP_MILLIS(CAST(SUBSTR(SAFE_CAST(UNIX_MILLIS(event_time) AS string),1,13) AS int64))))
  2. 将无效的时间戳转换为有效格式
  3. 使用上述WHERE子句从原始表中删除受影响的行。
  4. 将新表中的所有行重新插入到原始表中。

还有很多工作要做,但是应该可以解决。

相关问题