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;

發佈了163 篇原創文章 · 獲贊 71 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章