explode函数的局限性

UDF
UDAF
UDTF

explode(UDTF)函数的局限性

  • 不能关联原有的表中的其他字段。
  • 不能与group by、cluster by、distribute by、sort by联用。
  • 不能进行UDTF嵌套。
  • 不允许选择其他表达式。

常常和lateral view 结合使用

-- hive中解析json数组

CREATE TABLE tmp_export.mobile_info AS

SELECT loan_account_id,
       user_id,
       name,
       t3.mobilePhoneNo,
       md5(t3.mobilePhoneNo) AS mobilePhoneNo_1
FROM
  (SELECT t1.loan_account_id,
          t1.user_id,
          get_json_object(ss.col,'$.name') AS name,
          get_json_object(ss.col,'$.mobilePhoneNo') AS mobilePhoneNo
   FROM
     (SELECT loan_account_id,
             user_id,
             split(regexp_replace(regexp_extract(get_json_object(allcontactinfo,'$.fullContactInfoList') -- 获取data数组,格式[{json},{json}]
 ,'^\\[(.+)\\]$',1) -- 删除字符串前后的[],格式{json},{json}
 ,'\\}\\,\\{', '\\}\\|\\|\\{') -- 将josn字符串中的分隔符代换成||,格式{json}||{json}
 ,'\\|\\|') AS str -- 按||分隔符切割成一个hive数组

      FROM tmp_export.friend_mobile_info) t1 LATERAL VIEW explode(t1.str) ss AS col)t2 -- 将hive数组转成行
 LATERAL VIEW explode(split(regexp_replace(regexp_replace(t2.mobilePhoneNo,'\\[|\\]',''),'\\"',''),',')) t3 AS mobilePhoneNo
WHERE length(t3.mobilePhoneNo) = 11;


SELECT json_tuple(json, 'website', 'name')
FROM
  (SELECT explode(split(regexp_replace(regexp_replace('[{"website":"www.iteblog.com","name":"过往记忆"},{"website":"carbondateblog.com","name":"carbondata 中文文档"}]', '\\}\\,\\{','\\}\\;\\{'),'\\[|\\]',''),'\\;')) AS json) iteblog;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值