用于拆分列数据并存储到多个记录中的配置单元查询

0qx6xfy6  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(542)

有人能建议我如何用下面的细节编写配置单元sql查询吗。
输入:(制表符分隔的数据) Name Phone Address 123:456:789 hyderabad,bangalore,chennai xyz 111:222:333 delhi,mumbai,pune pqr 321:654:999 add1,add2,add3 输出: Name Phone Address 123 hyderabad 456 bangalore 789 chennai xyz 111 delhi xyz 222 mumbai xyz 333 pune pqr 321 add1 pqr 654 add2 pqr 999 add3 有人能帮助我如何拆分列数据并将其作为新记录放置而不使用任何默认函数吗。提前谢谢。

cidc1ykv

cidc1ykv1#

如果我们不知道用于此的预定义函数。我们可以编写如下的自定义逻辑(只有知道分隔符和拆分的#)。

select name, substr(phone,instr(phone,':',1)-1) phone, substr(address,instr(address,',',1)-1)
union all 
select name, substr(phone,instr(phone,':',2)-1) phone, substr(address,instr(address,',',2)-1)
union all 
select name, substr(phone,instr(phone,':',2)+1,length(phone)) phone, substr(address,instr(address,',',2)+1,length(address))

如果我们不知道预定义的方法,这可能会有帮助。

iq0todco

iq0todco2#

使用posexplode,split。由于需要分割列的索引进行匹配,因此需要使用posexplode创建索引,并确保在将列转换为行时它们匹配。

select Name, Phone, Address 
from table 
      lateral view posexplode(split(Phone,':')) Phone AS index1, Phone
      lateral view posexplode(split(Address,',')) Address AS index2, Address
where index1=index2;

相关问题