Google bigquery BigQuery-一种基于小时/分/秒生成时间戳的方法?
有没有一种方法可以在BigQuery中生成以小时、分钟和秒为中心的顺序时间戳 在BigQuery中,您可以通过以下方式生成连续日期:Google bigquery BigQuery-一种基于小时/分/秒生成时间戳的方法?,google-bigquery,Google Bigquery,有没有一种方法可以在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的日期 但假设我希望间隔15分钟或5分钟,有没有办法做到这一点?时代似乎是最好的选择 但需要先将日期转换为历元 s
select *
FROM UNNEST(GENERATE_DATE_ARRAY('2016-10-18', '2016-10-19', INTERVAL 1 DAY)) as day
这将以日期间隔生成2016-10-18至2016-10-19的日期
但假设我希望间隔15分钟或5分钟,有没有办法做到这一点?时代似乎是最好的选择 但需要先将日期转换为历元
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
时代似乎是前进的方向 但需要先将日期转换为历元
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
首先,我建议用“明星”来表达对这样一个功能的兴趣。但是,如果给定生成\u数组
,当前最好的选择是使用以下形式的查询:
SELECT TIMESTAMP_ADD('2018-04-01', INTERVAL 15 * x MINUTE)
FROM UNNEST(GENERATE_ARRAY(0, 13)) AS x;
如果您想要一个基于分钟的GENERATE\u TIMESTAMP\u 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中使用。例如,如果要以15分钟为间隔生成时间戳,可以使用:
SELECT GENERATE_TIMESTAMP_ARRAY('2016-10-18', '2016-10-19', INTERVAL 15 MINUTE);
首先,我建议用“明星”来表达对这样一个功能的兴趣。但是,如果给定生成\u数组
,当前最好的选择是使用以下形式的查询:
SELECT TIMESTAMP_ADD('2018-04-01', INTERVAL 15 * x MINUTE)
FROM UNNEST(GENERATE_ARRAY(0, 13)) AS x;
如果您想要一个基于分钟的GENERATE\u TIMESTAMP\u 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中使用。例如,如果要以15分钟为间隔生成时间戳,可以使用:
SELECT GENERATE_TIMESTAMP_ARRAY('2016-10-18', '2016-10-19', INTERVAL 15 MINUTE);