我的字符串数据如下:
data = 'ABCD/~DEFG/~HJKL/~MNOP'
我试着用下面的查询
select split(data,'[/~]')[1] from test_table;
预期输出:ABCD原始输出:(空间)
当我尝试对索引[2]进行相同的查询时,其工作
select split(data,'[/~]')[2] from test_table;
预期输出:DEFG原始输出:DEFG
我的观察:它对每个偶数指数都工作得很好,比如0,2,4…并且它正在填充奇数索引数,如1,3,5..
有人能帮我解决这个问题吗?
您需要使用split作为:split('\/~')
:
hive> select split('word1/~word2/~word3','\/~')[0] as word1;
word1
,检查我的答案:load-data-into-hive-with-custom-delimiter使用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