BigQuery UDF Array <TIMESTAMP>返回。无法强制输出值键入TIMESTAMP

时间:2019-06-05 14:59:49

标签: google-bigquery

我正在使用BigQuery JavaScript UDF返回日期数组。该数组必须类似于GENERATE_TIMESTAMP_ARRAY()函数的时间戳数组,以匹配UNNEST CASE WHEN。

当我从JavaScript UDF返回时间戳数组时,会发生问题。如果我指定RETURNS ARRAY ,则数组会返回正常值,但是当我使用RETURNS ARRAY 时,BigQuery似乎无法强制日期的字符串格式。

我尝试了多种字符串格式,即'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"
    ]

2 个答案:

答案 0 :(得分:2)

使用Date()

CREATE TEMP FUNCTION
  getCalendarDateArray()
  RETURNS ARRAY<TIMESTAMP>
  LANGUAGE js AS
"""
  return [Date('2018-03-03 10:10:10')]
""";

SELECT getCalendarDateArray() dates

enter image description here

答案 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())""";

前一个函数引发强制异常,而后者成功。