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