sql - BigQuery 用户定义函数错误 - 无法在查询中调用 UDF
问题描述
我正在尝试使用我在 BQ 数据集中创建的用户定义函数。
这是UDF:
CREATE OR REPLACE FUNCTION `project.dataset.CountHolidays`(START_DATE DATETIME,
SLA INT64, OPERATION STRING) AS (
(
SELECT
SUM(CASE WHEN OPERATION = 'OPTION 1' THEN OPTION_1
WHEN OPERATION = 'OPTION 2' THEN OPTION_2
WHEN OPERATION = 'OPTION 3' THEN OPTION_3
WHEN OPERATION = 'OPTION 4' THEN OPTION_4
WHEN OPERATION = 'OPTION 5' THEN OPTION_5
WHEN OPERATION = 'OPTION 6' THEN OPTION_6
END)
FROM
`project.dataset.calendar` cal
WHERE
cal.CALENDAR_DATE BETWEEN START_DATE AND DATE_ADD(START_DATE, INTERVAL SLA DAY)
)
);
我试图在这样的查询中调用 UDF:
SELECT
ORDER_NUMBER,
`project.dataset.CountHolidays`(DATE(PICK_RELEASE_DATE), EBS_SERVICE_DAYS, WAREHOUSE_ID) as CountHolidays
FROM `different_project.different_dataset.view_name`
我收到以下错误并且无法运行查询:
LEFT OUTER JOIN cannot be used without a condition that is an equality of fields from both sides of the join.
有人知道这里的错误是什么吗?几个小时以来一直在挠头。谢谢。
解决方案
您的选择引用了 UDF,它被“翻译”为不受支持的左连接 - 因此出现错误!
尝试以下版本的 UDF - 我认为应该可以
CREATE OR REPLACE FUNCTION `project.dataset.CountHolidays`(START_DATE DATE,
SLA INT64, OPERATION STRING) AS (
(
SELECT
SUM(IF(cal.CALENDAR_DATE BETWEEN START_DATE AND DATE_ADD(START_DATE, INTERVAL SLA DAY),
CASE WHEN OPERATION = 'OPTION 1' THEN OPTION_1
WHEN OPERATION = 'OPTION 2' THEN OPTION_2
WHEN OPERATION = 'OPTION 3' THEN OPTION_3
WHEN OPERATION = 'OPTION 4' THEN OPTION_4
WHEN OPERATION = 'OPTION 5' THEN OPTION_5
WHEN OPERATION = 'OPTION 6' THEN OPTION_6
END, 0))
FROM
`project.dataset.calendar` cal
));
推荐阅读
- python - 如何在此输出中打印“名称”?我只想提取'edge-star-mini-shv-01-atl3.facebook.com'并打印出来
- python - 使用 PIP 时出现“SSL:CERTIFICATE_VERIFY_FAILED”错误
- javascript - 对于许多相同组件之间的兄弟通信,我应该如何将数据存储在最低公共祖先中?
- javascript - 使用带有 for..of 循环的 async/await
- reactjs - 如何在功能组件 React 中使用函数
- c++ - 向量
>::size_type 或向量 ::size_type 处理向量时 >的大小()? - python - 将 xy 转换为 x*y?
- bevy - 如何在 Bevy 中围绕本地原点旋转 3d 网格
- postgresql - Amazon RDS 上的 PostgresSQL
- python - mysql没有插入正确的值