snowflake-cloud-data-platform - 如何在雪花中编写用户定义的函数?
问题描述
我对雪花很陌生。到目前为止,我一直使用 Teradata 编写复杂的 SQL 查询。在雪花中,我需要创建和调用宏(类似于 Teradata),其中我必须将日期作为参数传递,并且在函数中我必须在表中附加记录。这些方面的东西:
CREATE TABLE SFAAP.WS_DIRBNK_DPST.PV_HIGH_RISK_FI_LIST
(
APP_DT DATE
,FI_NAME VARCHAR(50)
);
CREATE OR REPLACE FUNCTION SFAAP.INSERT_FI (DT DATE, CRED CHAR(5))
--RETURNS NULL
--COMMENT='Create list of high risk FI by date'
AS
'
INSERT INTO SFAAP.WS_DIRBNK_DPST.PV_HIGH_RISK_FI_LIST
TO_DATE(DD) --------------Passed Parameter
,FI_NAME
FROM
(
SELECT
FINANCIAL_INSTITUTION AS FI_NAME
,COUNT(DISTINCT CASE WHEN IND_FPFA_FRAUD = 1 THEN APP_ID ELSE NULL END) AS TOT_FPFA_APPS
,COUNT(DISTINCT APP_ID) AS TOT_APPS
,CAST(TOT_FPFA_APPS AS DECIMAL(38,2))/TOT_APPS AS FRAUD_RATE
FROM
(
SELECT
A.*
,C.FINANCIAL_INSTITUTION
FROM BASE_05 A
LEFT JOIN
(
SELECT
BNK_ACCT_NBR_TOK
,BNK_TRAN_TYP_CDE
,ALT_DR_CR_CDE
,TRAN_1_DSC_TOK
,TRAN_DT
,TRAN_AMT
FROM "SFAAP"."V_SOT_DIRBNK_CLB_FRD_CRD"."BNK_DPS_TRAN_RLT_INFO"
WHERE TRAN_DT BETWEEN DATEADD(Day,-90,TO_DATE(DD)) AND TO_DATE(DD) --------------Passed Parameter, does calculation in the 90 days window from the passed date
AND ALT_DR_CR_CDE = TO_CHAR(CRED) --------------Passed Parameter
AND BNK_TRAN_TYP_CDE IN (22901,56003,56002,56302,56303,56102,70302)
AND TRAN_AMT>=5
QUALIFY ROW_NUMBER() OVER(PARTITION BY BNK_ACCT_NBR_TOK, TRAN_DT, TRAN_AMT, BNK_TRAN_TYP_CDE ORDER BY TRAN_DT ASC, TRAN_AMT DESC)=1
) B
ON A.BNK_ACCT_NBR = B.BNK_ACCT_NBR_TOK
LEFT JOIN SFAAP.WS_DIRBNK_DPST.PV_FRAUD_METRICS_03 C
ON B.TRAN_1_DSC_TOK = C.TOKEN_NAME
)SUB_A
GROUP BY 1
)SUB_B
WHERE FINANCIAL_INSTITUTION IS NOT NULL
AND TOT_APPS>=3
AND FRAUD_RATE>=0.20
'
;
我从这里的答案中得到了一些指导,但我还没有到那里。这是我得到的错误:
由于缺乏编写雪花用户定义函数的经验,我认为我在某处弄乱了语法(可能是我传递这两个参数的方式)。评论/建议是最受欢迎的。
提前致谢。
解决方案
看起来 SFAAP 是您的数据库名称,如果您要使用“完全限定名称”,请包括您的架构名称,或者更改您的会话上下文以使用数据库和架构,然后创建没有数据库和架构名称的函数。
例如:创建或替换函数 SFAAP.WS_DIRBNK_DPST.INSERT_FI (
我希望这会有所帮助...丰富
ps 如果这个(或另一个)答案对您有帮助,请花点时间“接受”有帮助的答案,方法是单击答案旁边的复选标记,将其从“灰色”切换为“已填写”。
推荐阅读
- c - 将节点添加到结束函数有什么作用
- java - 如何使用 parseInt 将字符串转换为整数?
- angular - TS2339:“对象”类型上不存在属性“地图”
- python - Matplotlib,图例未出现在直方图中
- java - Spring Boot 应用程序无法在 Azure 上正常运行
- c# - 如何使用字符串在 UWP 的 AutoSuggestBox 中显示数据
- google-apps-script - 从电子表格发送自动电子邮件
- php - PHP 日期计算器返回错误的日期
- javascript - 使用 mocha 测试组件是否在正确的 DOM 中
- react-native - 在 React-Native expo 应用程序中预加载资产永远不会完成