BigQuery:将epoch转换为TIMESTAMP

Roy*_*lTS 11 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
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.visitStartTimeTIMESTAMP(),也没有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)


Rei*_*ica 6

对于标准 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)