【问题标题】:Function in Google Big QueryGoogle 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]

【问题讨论】:

    标签: google-bigquery


    【解决方案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)   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      相关资源
      最近更新 更多