如何在 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
);
以下是我在 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
);