如何在 BigQuery 中创建 UDF?例程名称缺少数据集

How to create UDF in BigQuery? Routine name missing dataset

以下是我在 postgres 数据库中的工作函数的定义:

create function my_function(price numeric, qty numeric, min_charge numeric, other_fee numeric) returns numeric
    language plpgsql
as
$$
DECLARE
    _charge numeric;
BEGIN
    IF qty = 0 THEN
        RETURN 0.00::numeric(19, 2);
    END IF;
    _charge := GREATEST(price * qty, min_charge)::numeric(19, 2);
    RETURN (_charge + COALESCE(other_fee, 0.00))::numeric(19, 2);
END;
$$;

alter function my_function(numeric, numeric, numeric, numeric) owner to my_location;

但是当我在 BigQuery 中尝试以下操作时:

create function my_function(price numeric, qty numeric, min_charge numeric, other_fee numeric) returns numeric
    language plpgsql
as
"""
DECLARE
    _charge numeric;
BEGIN
    IF qty = 0 THEN
        RETURN 0.00::numeric(19, 2);
    END IF;
    _charge := GREATEST(price * qty, min_charge)::numeric(19, 2);
    RETURN (_charge + COALESCE(other_fee, 0.00))::numeric(19, 2);
END;
""";

我收到以下错误:

Routine name "my_function" missing dataset while no default dataset is set in the request.

我缺少的 command/syntax 是什么?我没有看到很多关于如何纠正这个问题的具体文档 sql。

更新:到目前为止,我有以下 BigQuery,我认为它在正确的轨道上,但它仍然给出浮点文字 0.00 和其他不兼容语法的错误

create procedure my_schema.my_function(price numeric, qty numeric, min_charge numeric, other_fee numeric)
BEGIN
    IF qty = 0 THEN
        RETURN 0.00::numeric(19, 2);
    END IF;
    _charge := GREATEST(price * qty, min_charge)::numeric(19, 2);
    RETURN (_charge + COALESCE(other_fee, 0.00))::numeric(19, 2);
END;
  • 只需使用 dataset.function_name 或项目。dataset.function_name 概念
  • 如果您想使用 BQ 脚本 - 您应该使用过程 - 请参阅 CREATE PROCEDURE statement。 BQ 函数不支持脚本。因此,如果您的逻辑涉及脚本编写 - proc 是您的选择

下面给出了参数化用户定义函数的示例:


CREATE OR REPLACE FUNCTION `Project_Name.DataSet_Name.User_Defined_Function_Name`(Field Data_Type) AS 
(
SELECT  COALESCE(Feild, 0) AS Filed2
);