Arrays 生成日期时间范围
我想生成一个datetime时间戳数组,递增步长为1小时 例如:Arrays 生成日期时间范围,arrays,datetime,google-bigquery,Arrays,Datetime,Google Bigquery,我想生成一个datetime时间戳数组,递增步长为1小时 例如: [2018-01-01 10:00:00, 2018-01-01 11:00:00, 2018-01-01 12:00:00] 数组函数GENERATE\u DATE\u array实现了我想要的功能,但不幸的是,它似乎只适用于天/周/月,而不适用于日内时间粒度 有什么建议吗? 谢谢我相信比我聪明得多的人会找到一种方法来实现这一点,那就是SQL(对Mikhail视而不见),但是使用JavaScript UDF怎么样 大概是这样的
[2018-01-01 10:00:00, 2018-01-01 11:00:00, 2018-01-01 12:00:00]
数组函数GENERATE\u DATE\u array
实现了我想要的功能,但不幸的是,它似乎只适用于天/周/月,而不适用于日内时间粒度
有什么建议吗?
谢谢我相信比我聪明得多的人会找到一种方法来实现这一点,那就是SQL(对Mikhail视而不见),但是使用JavaScript UDF怎么样 大概是这样的:
CREATE TEMPORARY FUNCTION
generate_stepped_timestamp_array(step FLOAT64,
iterations FLOAT64)
RETURNS ARRAY<TIMESTAMP>
LANGUAGE js AS """
var timestamps = [];
var start = new Date('2018-01-01');
for(i = 0; i < iterations; i++){
start.setHours(start.getHours() + step);
timestamps.push(new Date(start));
}
return timestamps;
""";
SELECT
generate_stepped_timestamp_array(1,
24) AS stepped_array
创建临时函数
生成\u步进\u时间戳\u数组(步骤64,
迭代次数(64)
返回数组
语言js为“”
var时间戳=[];
风险值开始=新日期('2018-01-01');
对于(i=0;i
显然,我不是JavaScript枪!在JS中实现这一点可能有更好的方法。但是,希望你能理解这个想法
我在旅行中发现了。作为旁注,我认为类似于
GENERATE\u DATETIME\u ARRAY
或类似的函数会受到欢迎。您可以使用GENERATE\u ARRAY
函数和ARRAY
和TIMESTAMP\u ADD
函数来构建具有所需范围的数组。以下是一个例子:
SELECT
ARRAY(
SELECT TIMESTAMP_ADD('2018-01-01 10:00:00', INTERVAL x HOUR)
FROM UNNEST(GENERATE_ARRAY(0, TIMESTAMP_DIFF('2018-01-01 12:00:00', '2018-01-01 10:00:00', HOUR))) AS x
) AS timestamps
如果愿意,可以创建SQL UDF,然后调用它:
CREATE TEMP FUNCTION MakeRange(lower TIMESTAMP, upper TIMESTAMP) AS (
ARRAY(
SELECT TIMESTAMP_ADD(lower, INTERVAL x HOUR)
FROM UNNEST(GENERATE_ARRAY(0, TIMESTAMP_DIFF(upper, lower, HOUR))) AS x
)
);
SELECT MakeRange('2018-01-01 10:00:00', '2018-01-01 12:00:00') AS timestamps
谢谢,但不幸的是我们不能使用UDF,因为他们有更严格的利率限额。谢谢你的链接,我会试试看我是否能用上你看到的。艾略特比我聪明多了。不过我还是喜欢我的UDF;-)@GrahamPolley我有一个优势,因为我指定并实现了
GENERATE_ARRAY
和GENERATE_DATE_ARRAY
)作为将来的参考,例如,生成时间戳数组
。我无法与之竞争;-)