Hive将字符串转换为字符数组

时间:2018-02-28 10:10:46

标签: hive hiveql

如何将字符串转换为字符数组,例如

"abcd" -> ["a","b","c","d"]

我知道分裂的方法:

SELECT split("abcd","");

#["a","b","c","d",""]

是最后一个空格的错误?或任何其他想法?

2 个答案:

答案 0 :(得分:1)

我不知道它是否是一个错误或它是如何工作的。作为替代方案,您可以使用explodecollect_list从where子句中排除空白

SELECT collect_list(l) 
FROM ( SELECT EXPLODE(split('abcd','') ) as l ) t 
WHERE t.l <> '';

答案 1 :(得分:1)

这实际上不是错误。配置单元split function仅通过将limit参数设置为-1来调用基础Java String#split(String regexp, int limit)方法,这将导致返回尾随空白。

由于已经有一个brilliant answer描述了问题,因此我不会深入探讨实现原因的细节。请注意,str.split("", -1)将根据您使用的Java版本返回不同的结果。

一些替代方法:

  1. 使用"(?!\A|\z)"作为分隔符正则表达式,例如split("abcd", "(?!\\A|\\z)")。这将使正则表达式匹配器在字符串的开头和结尾位置跳过零宽度匹配
  2. 创建一个自定义UDF ,该自定义UDF使用String#toCharArray()或接受limit作为UDF的参数,因此可以将其用作:SPLIT("", 0)