Google 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

有没有一种方法可以在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分钟,有没有办法做到这一点?

时代似乎是最好的选择

但需要先将日期转换为历元

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);