您可以在Redshift中从python UDF返回多个值吗?

Sco*_*ieB 0 python json user-defined-functions amazon-web-services amazon-redshift

我们偶尔使用JSONB来存储元素。这作为字符串传递给Redshift,然后我使用UDF进行解析。对于审计报告,我想在一列中呈现JSON的一部分,而在另一列中呈现。除了可以在每一行中调用两个UDF之外,我还可以调用一个返回两个值的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}
]}
Run Code Online (Sandbox Code Playgroud)

在我的报告中,我想要一列(methods)显示现金金额,第二列(coupons > $5)显示该交易是否获得了超过$ 5的折扣。

我也尝试RETURNS float, int使用方括号,大括号和括号,但会遇到一般语法错误。有人有建议吗?还是我需要吸收它并具有单独的功能?

Ale*_*Yes 5

作为一种解决方法,您可以创建一个返回带有2个键/值对的JSON的UDF,在子查询中运行它,然后使用本机Redshift函数解析结果,该函数获取特定的键,如下所示:

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;
Run Code Online (Sandbox Code Playgroud)