google-bigquery - 如何在 BigQuery 中创建 UDF?例程名称缺失数据集
问题描述
以下是我在 postgres db 中的工作函数的定义:
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.
我缺少什么命令/语法?我没有看到很多关于如何纠正这个问题的具体 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 或 project.dataset.function_name 概念
- 如果您想使用 BQ 脚本 - 您应该使用过程 - 请参阅CREATE PROCEDURE 语句。BQ 函数不支持脚本。因此,如果您的逻辑涉及脚本 - proc 是您的选择
推荐阅读
- javascript - 有没有办法同时完成这两个功能?
- json - 你可以设置动态 json 结构字段标签吗?
- java - Netty 客户端中配置的密码列表未发送到服务器
- android - Exoplayer - 如何在缓冲之前检索内容长度?
- tensorflow - 如何在 tfds.load 中使用自定义数据集
- linux - clad 扫描功能的奇怪行为
- python - 权限错误[Errno13]安装robotframework-SikuliLibrary时权限被拒绝
- fuzzing - 更改 AFL 的输入源优先级
- image - Grafana SigV4 身份验证 - Docker 映像?
- python - Pandas 按每个组内的日期范围过滤