您可以 return 来自 Redshift 中 python UDF 的多个值吗?
Can you return multiple values from a python UDF in Redshift?
我们偶尔使用JSONB来存储元素。这作为字符串传递给 Redshift,然后我使用 UDF 对其进行解析。对于审计报告,我想在一栏中显示 JSON 的一部分,在另一栏中显示不同的部分。 我可以调用一个 returns 两个值的 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 美元的折扣。
我也尝试 RETURNS float, int
使用方括号、大括号和圆括号,但出现一般语法错误。有人有建议吗?还是我需要吸收它并具有单独的功能?
没有。标量 UDF returns 只有一个值。
您可以通过字符串传递多个值,但是没有将值存储在变量中以供进一步操作(例如拆分值)的概念。
来自Creating a Scalar Python UDF:
A scalar Python UDF incorporates a Python program that executes when the function is called and returns a single value.
作为解决方法,您可以创建一个 UDF returns JSON 具有 2 个 key/value 对,运行 它在子查询中,然后使用本机解析结果像这样获取特定键的 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;
我们偶尔使用JSONB来存储元素。这作为字符串传递给 Redshift,然后我使用 UDF 对其进行解析。对于审计报告,我想在一栏中显示 JSON 的一部分,在另一栏中显示不同的部分。 我可以调用一个 returns 两个值的 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 美元的折扣。
我也尝试 RETURNS float, int
使用方括号、大括号和圆括号,但出现一般语法错误。有人有建议吗?还是我需要吸收它并具有单独的功能?
没有。标量 UDF returns 只有一个值。
您可以通过字符串传递多个值,但是没有将值存储在变量中以供进一步操作(例如拆分值)的概念。
来自Creating a Scalar Python UDF:
A scalar Python UDF incorporates a Python program that executes when the function is called and returns a single value.
作为解决方法,您可以创建一个 UDF returns JSON 具有 2 个 key/value 对,运行 它在子查询中,然后使用本机解析结果像这样获取特定键的 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;