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

时间:2019-03-26 04:02:27

标签: sql function user-defined-functions snowflake

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

enter image description here

这是这里使用的代码:

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

select *
from LINEITEM
limit 200

您可以看到该表包含两个字段:L_LINENUMBER,L_QUANTITY。现在,我想尝试一个用户定义的函数,该函数可以执行以下操作:

  1. 使用L_LINENUMBER,L_QUANTITY作为传递到函数中的两个参数,
  2. 计算L_LINENUMBER1 = L_LINENUMBER + 1,并且L_QUANTITY1 =平均值(L_QUANTITY)。
  3. 将两个新字段(L_LINENUMBER1,L_QUANTITY1)连接到原始表(LINEITEM)

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

1 个答案:

答案 0 :(得分: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';