如何在雪花中使用 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 更改默认的星期几和时间戳