Функция в Google Big Query - PullRequest
       17

Функция в Google Big Query

0 голосов
/ 15 марта 2019

Я пытаюсь создать функцию в запросе 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]

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Вы можете использовать это как оператор функции 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 из тела функции и исправил сигнатуру функции, чтобы соответствовать стилю функции BigQuery, как определено здесь

1 голос
/ 15 марта 2019

Ниже приведена фиксированная версия вашей функции

#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)   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...