我的表格中有一些无效的时间戳,我认为对于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
不参考它来设置列中的值。
有人对如何解决这个问题有任何想法吗?
必要性是发明之母。对于遇到类似问题的任何人,我都想出了一种解决方法。
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
子句从原始表中删除受影响的行。还有很多工作要做,但是应该可以解决。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句