有没有办法在BigQuery中生成专注于小时,分钟和秒的顺序时间戳?
在BigQuery中,您可以通过以下方式生成连续日期:
select *
FROM UNNEST(GENERATE_DATE_ARRAY('2016-10-18', '2016-10-19', INTERVAL 1 DAY)) as day
这将生成日期间隔2016-10-18至2016-10-19的日期
Row day
1 2016-10-18
2 2016-10-19
但是,假设我想在15分钟或5分钟内完成间隔,有没有办法做到这一点?
答案 0 :(得分:3)
首先,我建议“主演”feature request for GENERATE_TIMESTAMP_ARRAY
表示有兴趣拥有这样的功能。但是,给定GENERATE_ARRAY
,目前最好的选择是使用此表单的查询:
SELECT TIMESTAMP_ADD('2018-04-01', INTERVAL 15 * x MINUTE)
FROM UNNEST(GENERATE_ARRAY(0, 13)) AS x;
如果你想要一个基于分钟的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;
这将返回4月1日午夜到12点之间每15分钟间隔的时间戳。
更新:您现在可以在BigQuery中使用GENERATE_TIMESTAMP_ARRAY
function。例如,如果要以15分钟的间隔生成时间戳,则可以使用:
SELECT GENERATE_TIMESTAMP_ARRAY('2016-10-18', '2016-10-19', INTERVAL 15 MINUTE);
答案 1 :(得分:1)
Epoch似乎是要走的路。
但需要先将日期转换为纪元。
select TIMESTAMP_MICROS(CAST(day * 1000000 as INT64))
FROM UNNEST(GENERATE_ARRAY(1522540800, 1525132799, 900)) as day
Row f0_
1 2018-04-01 00:00:00.000 UTC
2 2018-04-01 00:15:00.000 UTC
3 2018-04-01 00:30:00.000 UTC
4 2018-04-01 00:45:00.000 UTC
5 2018-04-01 01:00:00.000 UTC
6 2018-04-01 01:15:00.000 UTC
7 2018-04-01 01:30:00.000 UTC
8 2018-04-01 01:45:00.000 UTC
9 2018-04-01 02:00:00.000 UTC
10 2018-04-01 02:15:00.000 UTC
11 2018-04-01 02:30:00.000 UTC
12 2018-04-01 02:45:00.000 UTC
13 2018-04-01 03:00:00.000 UTC