【问题标题】:Calling a native function within a UDF in bigquery在 bigquery 的 UDF 中调用本机函数
【发布时间】:2021-10-27 17:32:59
【问题描述】:

我正在尝试将我们的旧函数转换为标准 SQL,因此通过使用 UDF 作为一个 gig 来重用旧函数名称和原生函数。

这里我有我的 UDF to_char 并在里面使用参数来运行 FORMAT_DATE 但是当我执行它时,即使创建了一个例程,我也会收到没有附加信息的错误。 一旦创建了例程并且我注释掉了代码,错误就会出现 function to_char not found

如果我运行CREATE TEMP FUNCTION,我会得到很长的加载时间(大约 30 - 90 秒),这显然是不对的。

CREATE OR REPLACE FUNCTION mytable.TO_CHAR(dstamp DATETIME, fmt STRING)
RETURNS STRING AS
(
    FORMAT_DATE(fmt, dstamp)
);

SELECT
    TO_CHAR(End_Time, 'yyyy-mm') AS Month_and_Year,

我不想创建临时函数。理想情况下,我希望有一个例程,我可以在需要时继续调用,但我的 UDF 和 FORMATE_DATE 函数搞砸了。任何帮助将不胜感激,谢谢!

顺便说一句,在 GBQ 中运行它。

【问题讨论】:

  • 为什么不直接使用内置函数呢? FORMAT_DATE?另外,您知道吗 - 您可以创建永久功能?你真正的用例是什么?请详细说明...
  • 我有一堆遗留代码,我们希望将它们转换为标准 SQL,因此我不想将函数更改为内置函数,而是我想创建自己的函数,例如 to_char 函数使用 FORMAT_DATE 同样的事情。是的,我知道,CREATE OR REPLACE FUNCTION 不会创建一个永久函数吗??

标签: sql google-bigquery user-defined-functions bigquery-udf


【解决方案1】:

您需要引用带有数据集前缀的 UDF,否则 BigQuery 会认为它是内置函数或临时 UDF。在您的情况下,只需将TO_CHAR 更改为mytable.TO_CHAR。假设您的 mytable 实际上是一个数据集。

SELECT mytable.TO_CHAR(End_Time, 'yyyy-mm') AS Month_and_Year,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 2015-12-13
    • 2012-10-03
    • 2021-07-27
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多