如何在雪花中使用 SQL 用户定义函数?

Posted

技术标签:

【中文标题】如何在雪花中使用 SQL 用户定义函数?【英文标题】:how to use SQL user defined function in snowflake? 【发布时间】:2019-03-26 04:02:26 【问题描述】:

我只是在研究如何在雪花中使用 SQL。这是一张快照:

这是这里使用的代码:

use schema SNOWFLAKE_SAMPLE_DATA.TPCH_SF1;
--use schema SNOWFLAKE_SAMPLE_DATA.TPCH_SF10;

select *
from LINEITEM
limit 200

您可以看到该表包括两个字段:L_LINENUMBER、L_QUANTITY。现在我想尝试一个用户定义的函数,它可以做到:

    使用 L_LINENUMBER、L_QUANTITY 作为两个参数传入函数, 计算 L_LINENUMBER1=L_LINENUMBER+1 和 L_QUANTITY1=mean(L_QUANTITY)。 将两个新字段(L_LINENUMBER1、L_QUANTITY1)连接到原始表 (LINEITEM)

如何使用创建功能来做到这一点。我已经阅读了很多有关创建功能的示例。但我就是不明白这一点。也许是因为我不擅长 SQL。那么,谁能给我一个包含所有细节的综合示例?

【问题讨论】:

【参考方案1】:

我知道您的问题是关于 UDF 的,但是在这里使用 UDF 来达到您的目的是矫枉过正的。

您可以使用以下语句增加表中的属性。

SELECT
    L_LINENUMBER+1 as L_LINENUMBER1
FROM LINEITEM;

要计算表中属性的平均值,您应该了解这是一个聚合函数,仅在与 group by 语句结合使用时才有意义。下面显示了一个包含您的数据的示例。

SELECT
    AVG(L_QUANTITY) AS L_QUANTITY1
FROM LINEITEM
GROUP BY L_ORDERKEY;

由于您的问题最初是关于 UDF 并且您似乎正在关注 Snowflake 的示例数据,因此他们提供的示例是以下 UDF,它接受开尔文的温度并将其转换为华氏温度(从定义中您可以看到它可以应用于数字类型的任何属性)。

CREATE OR REPLACE FUNCTION 
  UTIL_DB.PUBLIC.convert_fahrenheit( t NUMBER)
  RETURNS NUMBER
  COMMENT='Convert from Kelvin from Fahrenheit'
  AS '(t - 273.15) * 1.8000 + 32.00';

【讨论】:

以上是关于如何在雪花中使用 SQL 用户定义函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在雪花 sql 中使用 date_trunc 更改默认的星期几和时间戳

如何在雪花中的 SQL 中查找以分钟为单位的时差

如何使用代理与 Snowpark 会话构建器连接到雪花

如何在 Spark SQL 中定义和使用用户定义的聚合函数?

如何在SQL语句中使用FUNCTION

jOOQ:如何在选择查询中调用 Sql 用户定义函数