0

我們使用JSONB偶爾存儲元素。這將作爲字符串傳遞給Redshift,然後使用UDF進行解析。對於審計報告,我想在一列中顯示JSON的一部分,而在另一列中顯示另一部分。我可以調用一個返回兩個值的UDF,而不是每行都調用兩個UDF,你能從Redshift的python UDF中返回多個值嗎?

作爲一個玩具的例子,考慮一個交易數據庫,其中每一行我們存儲客戶用來支付的方法。有些客戶可以支付多筆金額(例如,花費一張禮品卡,然後用現金支付差額),因此我們在該字段中存儲了一個JSON blob。

{"Methods": [ 
    {"Type":"Gift Card", "Amount": 5.74} 
    ,{"Type":"Cash", "Amount": 4.26} 
], 
"Coupons": [ 
    {"Code": "XHAY12", "Amount":1.22}, 
    {"Code": "Y123A", "Amount": 4.66} 
]} 

在我的報告,我想一列(methods),顯示現金量和顯示交易是否得到了超過$ 5第二列coupons > $5)。

我試過RETURNS float, int以及括號,大括號和括號,但得到一般的語法錯誤。任何人都有建議?或者我需要吮吸它並具有單獨的功能?

回答

2

否。標量UDF只返回一個值。

您可以通過一個字符串傳遞多個值,但是沒有將值存儲在變量中用於進一步操作的概念(例如分離值)。

Creating a Scalar Python UDF

標量的Python UDF包含執行時調用該函數,並返回一個單個值 Python程序。

1

作爲一種變通方法,您可以創建與2鍵/值對返回JSON一個UDF,在一個子查詢中運行它,然後解析與本土紅移功能得到這樣的特定鍵結果:

WITH 
udf_subquery as (
    SELECT 
    id 
    ,your_udf(parameters) as your_udf_json_result 
    FROM your_table 
) 
SELECT 
id 
,json_extract_path_text(your_udf_json_result,'key1') as col1 
,json_extract_path_text(your_udf_json_result,'key2') as col2 
FROM udf_subquery; 
+0

哦哇,我喜歡那個黑客! – ScottieB