我的表中有一些无效的时间戳,我认为对于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
列中设置值。
有人对如何解决这个问题有任何想法吗?
答案 0 :(得分:2)
必要性是发明之母。对于有类似问题的任何人,我都想出了一种解决方法。
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))))
WHERE
子句从原始表中删除受影响的行。还有很多工作要做,但是应该可以解决。