首页 > 解决方案 > 是否可以使用 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

使用配置单元 sql 。我是 hive sql 的新手

标签: sqlsplithivehiveql

解决方案


使用 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, ':[0-9.]*(\\||$)','\073'),'\073$','') as b,
       regexp_replace(regexp_replace(c, ':[0-9.]*(\\||$)','\073'),'\073$','') as c
from mytable

结果:

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

推荐阅读