BigQuery - 基于小时/分钟/秒生成时间戳的方法?

use*_*751 2 google-bigquery

有没有办法在 BigQuery 中生成以小时、分钟和秒为重点的顺序时间戳?

在 BigQuery 中,您可以通过以下方式生成连续日期:

select *
FROM UNNEST(GENERATE_DATE_ARRAY('2016-10-18', '2016-10-19', INTERVAL 1 DAY)) as day
Run Code Online (Sandbox Code Playgroud)

这将按日期间隔生成从 2016-10-18 到 2016-10-19 的日期


Row day  
1   2016-10-18   
2   2016-10-19
Run Code Online (Sandbox Code Playgroud)

但是假设我想要 15 分钟或 5 分钟的间隔,有没有办法做到这一点?

Ell*_*ard 5

首先,我建议“主演”功能请求GENERATE_TIMESTAMP_ARRAY以表达对拥有这样一个功能的兴趣。考虑到GENERATE_ARRAY,不过,最好的选择是目前使用这种形式的查询:

SELECT TIMESTAMP_ADD('2018-04-01', INTERVAL 15 * x MINUTE)
FROM UNNEST(GENERATE_ARRAY(0, 13)) AS x;
Run Code Online (Sandbox Code Playgroud)

如果你想要一个基于分钟的GENERATE_TIMESTAMP_ARRAY等价物,你可以使用这样的 UDF:

CREATE TEMP FUNCTION GenerateMinuteTimestampArray(
    t0 TIMESTAMP, t1 TIMESTAMP, minutes INT64) AS (
  ARRAY(
    SELECT TIMESTAMP_ADD(t0, INTERVAL minutes * x MINUTE)
    FROM UNNEST(GENERATE_ARRAY(0, TIMESTAMP_DIFF(t1, t0, MINUTE))) AS x
  )
);

SELECT ts
FROM UNNEST(GenerateMinuteTimestampArray('2018-04-01', '2018-04-01 12:00:00', 15)) AS ts;
Run Code Online (Sandbox Code Playgroud)

这将返回 4 月 1 日午夜和中午 12 点之间每 15 分钟间隔的时间戳。

更新:您现在可以在 BigQuery 中使用该GENERATE_TIMESTAMP_ARRAY函数。例如,如果要以 15 分钟为间隔生成时间戳,则可以使用:

SELECT GENERATE_TIMESTAMP_ARRAY('2016-10-18', '2016-10-19', INTERVAL 15 MINUTE);
Run Code Online (Sandbox Code Playgroud)