我正在使用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"
]
答案 0 :(得分:2)
使用Date()
:
CREATE TEMP FUNCTION
getCalendarDateArray()
RETURNS ARRAY<TIMESTAMP>
LANGUAGE js AS
"""
return [Date('2018-03-03 10:10:10')]
""";
SELECT getCalendarDateArray() dates
答案 1 :(得分:0)
仅是为了扩展Felipe Hoffa接受的答案,以下示例可能显示了发生的情况:
CREATE TEMP FUNCTION getDate_fail() RETURNS TIMESTAMP
LANGUAGE js AS """ return Date.now()""";
CREATE TEMP FUNCTION getDate_succeed() RETURNS TIMESTAMP
LANGUAGE js AS """ return Date(Date.now())""";
前一个函数引发强制异常,而后者成功。