数仓中presto解析varchar类型Array<Map>数据方案1

数仓中presto解析varchar类型Array格式数据方案1

源数据:[{“accountSubject”:“10128”,“amount”:500000},{“accountSubject”:“10129”,“amount”:3000000}]

痛点::原因众多,包括但不限于,数据从业务数据库中同步到数仓,大部分统一使用string类型,导致Array等结构化数据被以string类型的方式导入到数仓中,导致很多函数需要通过构建数据之后才能使用

背景::presto较hive而言相对较麻烦,但是公司并不会开放hive引擎供外日常查询需求,解决方案1:
使用正则表达式构建数据,借用json_extract()函数获取指定value

实现逻辑::regexp_extract(value, ‘(?<=[).*(?=])’) 提取外层括号内的json数据,使用CROSS JOIN UNNEST(“regexp_split”(CAST(“a” AS VARCHAR), ‘(?<=})\S(?={)’)) t (aa) 将数据通过’,'拆分,列转行的形式,将数据构建成json串,使用json_extract()函数获取指定value

代码展示:SELECT order_id, cast(json_extract(aa, '$.accountSubject') as bigint) FROM ( SELECT * FROM ( SELECT order_id, regexp_extract(refund_expenses, '(?<=\[).*(?=\])') a FROM guazi_dw_dwb.dwb_partner_invest_invest_order_refund_flow_day WHERE dt = '${date_y_m_d}' ) t CROSS JOIN UNNEST("regexp_split"(CAST("a" AS VARCHAR), '(?<=})\S+(?={)')) t (aa) ) t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值