我的字符串数据如下所示。
data = 'ABCD/~DEFG/~HJKL/~MNOP'
Run Code Online (Sandbox Code Playgroud)
我尝试了以下查询
select split(data,'[/~]')[1] from test_table;
Run Code Online (Sandbox Code Playgroud)
预期输出:ABCD原始输出:[SPACES]
当我尝试使用索引[2]进行相同的查询时,其工作原理。
select split(data,'[/~]')[2] from test_table;
Run Code Online (Sandbox Code Playgroud)
预期输出:DEFG原始输出:DEFG
我的观察:对于每个偶数索引数字(如0,2,4 ..),它都可以正常工作,并且为诸如1,3,5 ..的奇数索引数填充空格。
有人可以帮我解决这个问题。
您需要使用split作为split('\\/~'):
hive> select split('word1/~word2/~word3','\\/~')[0] as word1;
word1
Run Code Online (Sandbox Code Playgroud)
另外,请检查我的答案:使用和使用自定义分隔符将数据加载到hive中,并使用以下MultiDelimitSerDe
其他选项regexp_extract:hive-split-string-using-regex
例子:应该有一些简单的正则表达式来实现这一点,但是我从下面的例子中想到了这个:
hive> select regexp_extract('word1/~word2/~word3','^(\\w.*)\\/~(\\w.*)$',2) as word3;
word3
hive> select regexp_extract('word1/~word2/~word3','^(?:([^/~]+)\\/~?){1}',1) as word1;
word1
hive> select regexp_extract('word1/~word2/~word3','^(?:([^/~]+)\\/~?){2}',1) as word2;
word2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10677 次 |
| 最近记录: |