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使用方括号,大括号和括号,但会遇到一般语法错误。有人有建议吗?还是我需要吸收它并具有单独的功能?
作为一种解决方法,您可以创建一个返回带有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)
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |