【发布时间】:2019-06-05 14:59:49
【问题描述】:
我正在使用 BigQuery JavaScript UDF 返回日期数组。数组必须是时间戳数组,类似于 GENERATE_TIMESTAMP_ARRAY() 函数,以便匹配 UNNEST CASE WHEN。
当我从我的 JavaScript UDF 返回时间戳数组时会出现问题。如果我指定 RETURNS ARRAY
我尝试了多种字符串格式,例如 'YYYY-MM-DD HH:mm:ss'、'YYYY-MM-DD 00:00:00+00'、'YYYY-MM-DD HH:mm:ss .SSSSSS UTC'。
CREATE TEMP FUNCTION
getCalendarDateArray(date_start STRING,
date_end STRING,
frequency STRING,
unit STRING,
value INT64,
parent STRING,
next_date TIMESTAMP)
RETURNS ARRAY<TIMESTAMP>
LANGUAGE js AS
"""
let dates_array = getTimestampArray(date_start, date_end, frequency, unit, value, parent, next_date);
return dates_array;
"""
OPTIONS
( library=["gs://my-bucket/myfunction.js"] );
UDF 输出当前是格式化的日期字符串数组,不能强制转换为时间戳。为了让 BigQuery 成功强制时间戳,正确的字符串格式是什么?
[
"2019-07-02",
"2019-07-09",
"2019-07-16",
"2019-07-23",
"2019-07-30"
]
【问题讨论】:
-
使用昂贵的 JS UDF 而不是使用内置的
GENERATE_..._ARRAY()系列函数的原因是什么? -
我根据日历日期生成重复日期,而不仅仅是设置间隔。例如:从 X 日期开始每周的第二天,或每月的第三周。但是,在尝试了 UDF 之后,很明显它既昂贵又耗时。相反,我将在上传到 bigquery 之前简单地计算每一行的日期。
标签: google-bigquery