BigQuery:将epoch转换为TIMESTAMP

时间:2016-06-16 14:02:20

标签: google-bigquery

我正在尝试范围连接两个表,如此

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.visitStartTimeINT64时代而d.interval_start_time_utcd.interval_end_time_utc是正确的TIMESTAMP

上述内容以

失败
No matching signature for operator < for argument types: TIMESTAMP, INT64. Supported signature: ANY < ANY

h.visitStartTimeTIMESTAMP()中的CAST(d.interval_start_time_utc AS INT64)包裹都不起作用。如何在BigQuery的标准SQL方言中使两者具有可比性?

2 个答案:

答案 0 :(得分:16)

您可以使用TIMESTAMP_SECONDSTIMESTAMP_MILLISTIMESTAMP_MICROSSELECT * 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