Hive查询将列数据拆分并存储到多个记录中

时间:2018-02-15 15:29:40

标签: hive hiveql impala

有人可以建议我如何使用以下详细信息编写Hive SQL查询。

  • 输入(制表符分隔数据)

    Name Phone Address abc 123:456:789 hyderabad,bangalore,chennai xyz 111:222:333 delhi,mumbai,pune pqr 321:654:999 add1,add2,add3

  • 输出:

    Name Phone Address abc 123 hyderabad abc 456 bangalore abc 789 chennai xyz 111 delhi xyz 222 mumbai xyz 333 pune pqr 321 add1 pqr 654 add2 pqr 999 add3

有人可以帮我分割列数据并将其作为新记录不使用任何默认功能。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

使用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;

答案 1 :(得分:0)

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

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))

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