如何在 snowflake 中使用 SQL 用户自定义函数?
how to use SQL user defined function in snowflake?
我正在研究如何在雪花中使用SQL。这是快照:
这是这里使用的代码:
use schema SNOWFLAKE_SAMPLE_DATA.TPCH_SF1;
--use schema SNOWFLAKE_SAMPLE_DATA.TPCH_SF10;
select *
from LINEITEM
limit 200
你可以看到table包含两个字段:L_LINENUMBER、L_QUANTITY。现在我想尝试一个用户定义的函数,它可以做:
- 使用L_LINENUMBER,L_QUANTITY作为两个参数传入函数,
- 计算L_LINENUMBER1=L_LINENUMBER+1,和L_QUANTITY1=mean(L_QUANTITY).
- 将两个新字段(L_LINENUMBER1,L_QUANTITY1)加入原来的table(LINEITEM)
如何使用创建函数来做到这一点。我已经阅读了很多关于创建函数的例子。但我就是不明白这一点。也许是因为我不擅长SQL。那么,谁能给我一个包含所有细节的综合示例?
我知道你的问题是关于 UDF 的,但是在这里使用 UDF 是为了你的目的是矫枉过正的。
您可以使用以下语句递增 table 中的属性。
SELECT
L_LINENUMBER+1 as L_LINENUMBER1
FROM LINEITEM;
要计算 table 中属性的平均值,您应该了解这是一个聚合函数,只有与 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。这是快照:
这是这里使用的代码:
use schema SNOWFLAKE_SAMPLE_DATA.TPCH_SF1;
--use schema SNOWFLAKE_SAMPLE_DATA.TPCH_SF10;
select *
from LINEITEM
limit 200
你可以看到table包含两个字段:L_LINENUMBER、L_QUANTITY。现在我想尝试一个用户定义的函数,它可以做:
- 使用L_LINENUMBER,L_QUANTITY作为两个参数传入函数,
- 计算L_LINENUMBER1=L_LINENUMBER+1,和L_QUANTITY1=mean(L_QUANTITY).
- 将两个新字段(L_LINENUMBER1,L_QUANTITY1)加入原来的table(LINEITEM)
如何使用创建函数来做到这一点。我已经阅读了很多关于创建函数的例子。但我就是不明白这一点。也许是因为我不擅长SQL。那么,谁能给我一个包含所有细节的综合示例?
我知道你的问题是关于 UDF 的,但是在这里使用 UDF 是为了你的目的是矫枉过正的。
您可以使用以下语句递增 table 中的属性。
SELECT
L_LINENUMBER+1 as L_LINENUMBER1
FROM LINEITEM;
要计算 table 中属性的平均值,您应该了解这是一个聚合函数,只有与 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';