在配置单元中过滤
Filtering in hive
我有一个配置单元 table 演示(id bigint,项目字符串),其中数据集是逗号分隔的字符串集,例如
id dataset
1 ,2,asd,as,a,1
2 sda,saa,2,fds
有没有一种本机方法可以过滤掉非数字字符串并仅保留数字字符串,而不是分解 table、过滤然后分组或编写我自己的 UDF。
id dataset
1 2,1
2 2
select id
,regexp_replace(regexp_replace(dataset,'(?<=^|,)((\d+)|([^,]*))(?=,|$)',''),'^,+|,+$|(,)+','')
from demo
;
+----+-----+
| id | c1 |
+----+-----+
| 1 | 2,1 |
| 2 | 2 |
+----+-----+
试试这样的正则表达式:
select id
,regexp_replace(dataset, '(,[a-zA-Z]+|^,|[a-zA-Z]+,)' , '') as dataset
from yourdata;
这导致:
id dataset
1 2,1
2 2
我有一个配置单元 table 演示(id bigint,项目字符串),其中数据集是逗号分隔的字符串集,例如
id dataset
1 ,2,asd,as,a,1
2 sda,saa,2,fds
有没有一种本机方法可以过滤掉非数字字符串并仅保留数字字符串,而不是分解 table、过滤然后分组或编写我自己的 UDF。
id dataset
1 2,1
2 2
select id
,regexp_replace(regexp_replace(dataset,'(?<=^|,)((\d+)|([^,]*))(?=,|$)',''),'^,+|,+$|(,)+','')
from demo
;
+----+-----+
| id | c1 |
+----+-----+
| 1 | 2,1 |
| 2 | 2 |
+----+-----+
试试这样的正则表达式:
select id
,regexp_replace(dataset, '(,[a-zA-Z]+|^,|[a-zA-Z]+,)' , '') as dataset
from yourdata;
这导致:
id dataset
1 2,1
2 2