我正在尝试范围连接两个表,如此
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
。
上述内容以
失败No matching signature for operator < for argument types: TIMESTAMP, INT64. Supported signature: ANY < ANY
h.visitStartTime
和TIMESTAMP()
中的CAST(d.interval_start_time_utc AS INT64)
包裹都不起作用。如何在BigQuery的标准SQL方言中使两者具有可比性?
答案 0 :(得分:16)
您可以使用TIMESTAMP_SECONDS
,TIMESTAMP_MILLIS
,TIMESTAMP_MICROS
,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
例如,假设你的h.visitStartTime是自unix纪元以来的微秒
ax[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
答案 1 :(得分:1)
使用标准 sql,您可以使用其中一种,具体取决于精度:
DATE_FROM_UNIX_DATE
-从时代开始至今TIMESTAMP_SECONDS
-从秒纪到时间戳记TIMESTAMP_MILLIS
-从毫秒级到时间戳TIMESTAMP_MICROS
-从毫秒级到时间戳在此处查看文档:{{3}}
使用旧版 sql,您只需使用TIMESTAMP
函数并将其乘以1000或除以将其设置为所需的纪元类型即可:
SELECT
TIMESTAMP(epoch_in_millis / 1000) AS datetime
FROM
my_table