BigQuery:将纪元转换为时间戳
BigQuery: convert epoch to TIMESTAMP
我正在尝试范围连接两个表,就像这样
SELECT *
FROM main_table h
INNER JOIN
test.delay_pairs d
ON
d.interval_start_time_utc < h.visitStartTime
AND h.visitStartTime < d.interval_end_time_utc
其中 h.visitStartTime
是一个 INT64
纪元,d.interval_start_time_utc
和 d.interval_end_time_utc
是正确的 TIMESTAMP
s.
以上失败
No matching signature for operator < for argument types: TIMESTAMP, INT64. Supported signature: ANY < ANY
在 TIMESTAMP()
和 CAST(d.interval_start_time_utc AS INT64)
中包装 h.visitStartTime
都不起作用。如何使两者在 BigQuery 的标准 SQL 方言中具有可比性?
您可以像 TIMESTAMP_SECONDS
、TIMESTAMP_MILLIS
、TIMESTAMP_MICROS
这样使用 timestamp conversion functions
例如,假设您的 h.visitStartTime 是自 unix 纪元以来的微秒
SELECT *
FROM main_table h
INNER JOIN test.delay_pairs d
ON d.interval_start_time_utc < TIMESTAMP_MICROS(h.visitStartTime)
AND TIMESTAMP_MICROS(h.visitStartTime) < d.interval_end_time_utc
使用 standard sql 您可以使用其中之一,具体取决于精度:
DATE_FROM_UNIX_DATE
- 从 days epoch 到 date
TIMESTAMP_SECONDS
- 从纪元秒到时间戳
TIMESTAMP_MILLIS
- 从毫秒纪元到时间戳
TIMESTAMP_MICROS
- 从微秒纪元到时间戳
使用 legacy sql 你可以只使用 TIMESTAMP
函数并乘以或除以 1000 使其成为所需的纪元类型:
SELECT
TIMESTAMP(epoch_in_millis / 1000) AS datetime
FROM
my_table
我正在尝试范围连接两个表,就像这样
SELECT *
FROM main_table h
INNER JOIN
test.delay_pairs d
ON
d.interval_start_time_utc < h.visitStartTime
AND h.visitStartTime < d.interval_end_time_utc
其中 h.visitStartTime
是一个 INT64
纪元,d.interval_start_time_utc
和 d.interval_end_time_utc
是正确的 TIMESTAMP
s.
以上失败
No matching signature for operator < for argument types: TIMESTAMP, INT64. Supported signature: ANY < ANY
在 TIMESTAMP()
和 CAST(d.interval_start_time_utc AS INT64)
中包装 h.visitStartTime
都不起作用。如何使两者在 BigQuery 的标准 SQL 方言中具有可比性?
您可以像 TIMESTAMP_SECONDS
、TIMESTAMP_MILLIS
、TIMESTAMP_MICROS
例如,假设您的 h.visitStartTime 是自 unix 纪元以来的微秒
SELECT *
FROM main_table h
INNER JOIN test.delay_pairs d
ON d.interval_start_time_utc < TIMESTAMP_MICROS(h.visitStartTime)
AND TIMESTAMP_MICROS(h.visitStartTime) < d.interval_end_time_utc
使用 standard sql 您可以使用其中之一,具体取决于精度:
DATE_FROM_UNIX_DATE
- 从 days epoch 到 dateTIMESTAMP_SECONDS
- 从纪元秒到时间戳TIMESTAMP_MILLIS
- 从毫秒纪元到时间戳TIMESTAMP_MICROS
- 从微秒纪元到时间戳
使用 legacy sql 你可以只使用 TIMESTAMP
函数并乘以或除以 1000 使其成为所需的纪元类型:
SELECT
TIMESTAMP(epoch_in_millis / 1000) AS datetime
FROM
my_table