使用示例:
select
ChargeName,
regexp_replace(regexp_replace(sub, '\\{', ''), '\\}', '') managebranch,
StartDate
FROM (
SELECT
*
FROM
ods_aimsen_base_regionhistories lateral VIEW explode(split(ManageBranchNos,'\\}\\{')) tmp
AS sub
) tmp_a
炸开后效果:
示例1:
row_number() 函数打行号:
SELECT
id,
age,
name,
sex from
(
SELECT
id,
age,
name,
sex,
row_number() over(partition BY sex ORDER BY age DESC) AS rank
FROM
t_rownumber
) tmp
WHERE
rank<=2;
示例2:
SELECT
*
FROM
(
SELECT
workno,
employeename,
brand,
null,
null,
amount,
effectivedate,
isleave,
leavedate,
addtime,
managebranchnos ,
chargename,
startdate,
row_number() over(partition BY workno,employeename,brand,office,team,amount,effectivedate,isleave,leavedate,addtime,managebranchnos ORDER BY startdate DESC) AS rank
FROM
(
SELECT
*
FROM
dws.dws_resumeachieve_t_result_tmp02 tmp02
LEFT JOIN
dws.dws_resumeachieve_t_regionhistories_tmp01 tmp_a
ON
tmp02.managebranchnos=tmp_a.managebranch
WHERE
tmp02.addtime is not null and tmp02.addtime!='null' and tmp02.managebranchnos is not null and tmp02.managebranchnos !='null' and tmp02.leavedate is not null and tmp02.leavedate!='null' and
--tmp02.addtime is not null and
tmp02.addtime>tmp_a.startdate
) a ) tmp
你可以加上筛选条件:
WHERE
rank is null or rank=1;
效果:
在正常解析一个有值的字符串时,用lateral view explode是完全ok的,但是,当遇到该字符串为空时,如果在使用该函数,就会导致该条记录消失。
lateral view explode这个UDTF转换的Array为空的记录,自动被过滤掉了,如果想要保留记录,需要加上outer关键字。
如:
select ... from 表名 lateral view outer explode(需炸开的字段)tmp as sub
参考:
https://blog.csdn.net/jarry_cm/article/details/90402833