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

时间:2018-04-20 05:18:05

标签: 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的日期

Row day  
1   2016-10-18   
2   2016-10-19

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

2 个答案:

答案 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