【问题标题】:Can you return multiple values from a python UDF in Redshift?您可以从 Redshift 中的 python UDF 返回多个值吗?
【发布时间】:2017-09-06 00:16:43
【问题描述】:

我们偶尔会使用 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}
]}

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

我也尝试了RETURNS float, int 以及括号、大括号和圆括号,但得到了一般的语法错误。有人有建议吗?还是我需要把它吸起来并有单独的功能?

【问题讨论】:

    标签: python json amazon-web-services amazon-redshift user-defined-functions


    【解决方案1】:

    作为一种解决方法,您可以创建一个返回带有 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;
    

    【讨论】:

      【解决方案2】:

      没有。标量 UDF 只返回一个值。

      您可以通过字符串传递多个值,但没有将值存储在变量中以供进一步操作(例如拆分值)的概念。

      来自Creating a Scalar Python UDF

      标量 Python UDF 包含一个 Python 程序,该程序在调用函数时执行并返回一个单个值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多