如何将 TIMESTAMPS_MILLIS 修复为 TIMESTAMP_SECONDS bigquery?

How to fix TIMESTAMPS_MILLIS to TIMESTAMP_SECONDS bigquery?

我需要一些关于大查询的帮助。

我有一个云功能,它从 pub/sub 接收消息并写入我的 table,问题是我犯了一个错误,在 [=16] 时使用了 TIMESTAMP_MILLIS(@hitTS) =] 已发送 SECONDS。我应该使用 TIMESTAMP_SECONDS(@hitTS)

我的条目看起来如何:

|            hitTS            |
-------------------------------
|"1970-01-19 22:44:46.921 UTC"|
|"1970-01-19 22:51:57.842 UTC"|
|"1970-01-19 22:52:27.482 UTC"|
|"1970-01-19 22:43:15.541 UTC"|

通过以下查询我可以获得 TIMESTAMP

SELECT
 hitTS,  UNIX_MILLIS(hitTS) as MILLI
FROM
  `my.table`
WHERE
  DATE(hitTS) < "1971-01-01"

结果:

|            hitTS            ||    MILLIS    |
-----------------------------------------------
|"1970-01-19 22:44:46.921 UTC"|   1637086921  |
|"1970-01-19 22:51:57.842 UTC"|   1637517842  |
|"1970-01-19 22:52:27.482 UTC"|   1637547482  |
|"1970-01-19 22:43:15.541 UTC"|   1636995541  |
-----------------------------------------------

我想如果我使用 MILLIS 字段并在末尾添加 000 似乎我得到了正确的日期...

可以在此处创建查询 我使用上述逻辑更新漏洞 table?

提前致谢!

由于您已经找到了固定日期的方法(通过添加 000),您可以尝试使用这种方法来更新您的值;

UPDATE `my.table`
SET hitTS=TIMESTAMP_MILLIS(CAST(CONCAT(CAST(UNIX_MILLIS(hitTS) AS STRING),'000') AS INT64))
WHERE
  DATE(hitTS) < "1971-01-01"

我为此解决方案修改了以下文档:timestamp_functions and string_functions