是否可以使用 hive sql 拆分复杂的数据格式

问题描述

现在,有这样的数据

a                                            b              c    
101:1.9|832:1.9|91:1.0|786:1.0|55:1.0|28:1.0 14:1.0|149:1.0 14:1.0|1:1.0

我怎样才能得到结果

a                       b       c
101;832;91;786;55;28    14;149  14;1

使用 hive sql 。我是 hive sql 的新手

解决方法

使用 regexp_replace 您可以用分号 ; 替换(: 之后直到 | 或字符串末尾的所有内容),然后删除结尾的分号。

演示:

with mytable as(
select stack( 1,'101:1.9|832:1.9|91:1.0|786:1.0|55:1.0|28:1.0','14:1.0|149:1.0','14:1.0|1:1.0' ) as (a,b,c)
  ) 
  
select regexp_replace(regexp_replace(a,':[0-9.]*(\\||$)','\073'),'\073$','') as a,regexp_replace(regexp_replace(b,'') as b,regexp_replace(regexp_replace(c,'') as c
from mytable

结果:

a                       b       c
101;832;91;786;55;28    14;149  14;1