Hive:使用正则表达式拆分字符串

rau*_*aul 1 regex hadoop hive

我有一串被::分隔的单词.如何使用Hive UDF regexp_extract()从字符串中提取单词?

inv*_*ell 5

regexp_extract('2foa1fa::12hjk','^(\\w.*)\\:{2}(\\w.*)$',1) as word1
Run Code Online (Sandbox Code Playgroud)

OUTPUT: 2foa1fa

regexp_extract('2foa1fa::12hjk','^(\\w.*)\\:{2}(\\w.*)$',2) as word2
Run Code Online (Sandbox Code Playgroud)

OUTPUT: 12hjk

  • ^锚定到字符串的开头
  • \\ w查找单词字符和.*表示任意次数
  • \\:{2}查找两个:连续(这是你的:: delimiter)
  • $将字符串锚定到字符串的末尾
  • 在regexp_extract中指定第三个参数,提取索引(模式)

现在只需将您的列名称放在字符串文字的位置,您应该很高兴.

您还可以使用拆分函数创建数组,然后按数组位置进行查询.看起来像这样:

select my_array[2] from 
    (select split('2foa1fa::12hjk','\\::') as my_array from my_table) b;
Run Code Online (Sandbox Code Playgroud)

OUTPUT: 12hjk