【问题标题】:Bigquery: How to write Multiline SQL UDF?Bigquery:如何编写多行 SQL UDF?
【发布时间】:2021-07-22 00:41:10
【问题描述】:

我想在 bigquery 中创建一个 SQL UDF,我可以在其中执行某些操作,然后返回值。

例如,在 SQL Server 中,我可以按如下方式创建 UDF:

CREATE FUNCTION east_or_west (
    @long DECIMAL(9,6)
)
RETURNS int AS
BEGIN
    DECLARE @return_value int;
    SET @val = 5;
    IF (@long > 0.00) SET @val = 10;
    IF (@long < 0.00) SET @val = 20;
    SET @ModelID = (SELECT count(*) 
                  FROM MODELS m
                 WHERE m.areaid = @val)
 
    RETURN @ModelID
END;

我将如何在 bigquery 中实现这个简单的多行 sql udf?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    在下面使用

    CREATE FUNCTION east_or_west(long float64) as ((
      SELECT COUNT(*) 
      FROM `project.dataset.MODELS` m
      WHERE m.areaid = (
        CASE 
          WHEN long > 0.00 THEN 10
          WHEN long < 0.00 THEN 20
          ELSE 5
        END
      )
    ));
    

    【讨论】:

    • 嗨@Mikhail。这只是一个示例函数。我想创建一个 SQL UDF,我可以在其中声明变量,执行一些操作,也许运行一个选择查询等。这似乎在 SQL UDF 中是不可能的?
    • 你应该为此使用存储过程!
    • 嗨@Mikhail。有没有办法拥有多行sql udfs?我的理解是: 1.我们可以使用sql或js语言编写函数。 2.但是如果我们选择sql语言那么在那种情况下,它只能是1行sql表达式,对吗? 3.如果我们决定使用JS udfs,那么我们不能有这样的语句:let a = "SELECT count(*) FROM emp"; ;返回一些变量;在 JS udfs 中,对吗?
    • 是的!如果您需要使用多个 sql 语句打包脚本 - 您使用存储过程。如果它只是一个选择语句(无论它多么复杂 - 但它是一个),您可以使用 SQL UDF。最后 - 你可以使用 JS UDF 来使用 javascript 的强大功能,但有一些限制 - 文档非常好 - 看看:o)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多