有没有办法在 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 分钟的间隔,有没有办法做到这一点?
首先,我建议“主演”功能请求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)
| 归档时间: |
|
| 查看次数: |
2988 次 |
| 最近记录: |