Google Big Query 中的功能
Posted
技术标签:
【中文标题】Google Big Query 中的功能【英文标题】:Function in Google Big Query 【发布时间】:2019-03-15 10:14:34 【问题描述】:我正在尝试在 google biq 查询中创建一个函数,但我收到以下错误。任何帮助表示赞赏:
CREATE FUNCTION `test.xx.x_to_y_Id`(ID INT64)
RETURNS INT64
SELECT CASE
WHEN CAST(FLOOR(ID/POWER(CAST(2 AS INT64),38)) AS INT64) & 3 = 0
THEN ID & CAST(12345678 AS INT64)
ELSE ID END
Syntax error: Expected "(" or string literal but got keyword SELECT at [4:9]
【问题讨论】:
【参考方案1】:您可以将其用作 CREATE 函数语句
CREATE TEMP FUNCTION
test(ID FLOAT64)
AS (
CASE
WHEN CAST(FLOOR(ID/POWER(CAST(2 AS INT64),38)) AS INT64) & 3 = 0
THEN ID & CAST(12345678 AS INT64)
ELSE ID END);
注意:我从函数主体中删除了 SELECT
,并更正了函数签名以匹配 here 定义的 BigQuery 函数样式
【讨论】:
@Anusha 注意:对 SO 很重要 - 您可以使用已发布答案左侧、投票下方的勾号来标记已接受的答案。请参阅 meta... 了解为什么它很重要【参考方案2】:下面是你的函数的固定版本
#standardSQL
CREATE TEMP FUNCTION test(ID INT64)
RETURNS INT64 AS ((
SELECT CASE
WHEN CAST(FLOOR(ID/POWER(CAST(2 AS INT64),38)) AS INT64) & 3 = 0
THEN ID & CAST(12345678 AS INT64)
ELSE ID
END
));
SELECT test(12)
如您所见 - 您缺少它的某些方面,例如 TEMP
关键字、一些左括号和右括号等。
同时,在像你这样的简单场景中 - 你可以省略 SELECT
的使用,而只使用下面的例子中的表达式(注意在这种情况下你也摆脱了额外的开/关括号
#standardSQL
CREATE TEMP FUNCTION test(ID INT64)
RETURNS INT64 AS (
CASE
WHEN CAST(FLOOR(ID/POWER(CAST(2 AS INT64),38)) AS INT64) & 3 = 0
THEN ID & CAST(12345678 AS INT64)
ELSE ID
END
);
SELECT test(12)
【讨论】:
以上是关于Google Big Query 中的功能的主要内容,如果未能解决你的问题,请参考以下文章
Big Query 中的 Google AdWords 传输:可以更改表架构吗?