我正在尝试范围连接两个表,就像这样
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
Run Code Online (Sandbox Code Playgroud)
在哪里h.visitStartTime是一个INT64时代,d.interval_start_time_utc并且d.interval_end_time_utc是正确TIMESTAMP的.
以上失败了
No matching signature for operator < for argument types: TIMESTAMP, INT64. Supported signature: ANY < ANY
Run Code Online (Sandbox Code Playgroud)
无论是包装h.visitStartTime的TIMESTAMP(),也没有CAST(d.interval_start_time_utc AS INT64)工作.如何在BigQuery的标准SQL方言中使两者具有可比性?
Mik*_*ant 19
您可以使用时间戳转换函数一样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
Run Code Online (Sandbox Code Playgroud)
对于标准 sql,您可以根据精度使用其中一种:
DATE_FROM_UNIX_DATE -从时代开始至今TIMESTAMP_SECONDS -从秒到时间戳TIMESTAMP_MILLIS -从毫秒级到时间戳TIMESTAMP_MICROS -从微秒纪元到时间戳请参阅此处的文档:https : //cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#timestamp_seconds
使用旧版 sql,您可以只使用TIMESTAMPfunction并将其乘以1000或除以使其达到所需的纪元类型:
SELECT
TIMESTAMP(epoch_in_millis / 1000) AS datetime
FROM
my_table
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16887 次 |
| 最近记录: |