【问题标题】:How to use String split function on multi-delimiter strings in hive?如何对 hive 中的多分隔符字符串使用字符串拆分功能?
【发布时间】:2016-12-20 08:40:54
【问题描述】:

我的字符串数据如下。

data = 'ABCD/~DEFG/~HJKL/~MNOP'

我尝试了以下查询

select split(data,'[/~]')[1] from test_table;

预期输出: A B C D 原始输出: [空间]

当我尝试使用索引 [2] 进行相同查询时,它的工作原理。

select split(data,'[/~]')[2] from test_table;

预期输出: DEFG 原始输出: DEFG

我的观察: 它适用于每个偶数索引号,如 0,2,4.. 它正在为奇数索引号填充空格,例如 1,3,5..

谁能帮我解决这个问题。

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    您需要使用拆分为: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


    示例:应该有一些简单的正则表达式来实现这一点,但我在关注example from here 之后想出了这个:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-26
      • 2011-05-03
      • 2012-09-04
      • 1970-01-01
      • 2012-02-14
      • 2018-02-27
      • 2013-03-03
      相关资源
      最近更新 更多