Hive如何去除首尾换行符?trim()无法生效的非UDF替代方案有哪些?
Hive去除字符串首尾换行符的替代方案
Hive内置的trim()函数默认仅支持移除字符串首尾的半角空格(ASCII码32),无法识别换行符\n、回车符\r等空白字符,以下是无需自定义UDF的实现方案:
- 方案1:使用
regexp_replace()正则替换
直接通过正则匹配首尾的换行/回车/制表符等空白字符,语法示例:
注意Hive的正则里反斜杠需要双重转义,所以写-- 仅移除首尾的换行符\n SELECT regexp_replace(your_column, '^\n+|\n+$', '') AS cleaned_str FROM your_table; -- 移除首尾所有空白字符(包含换行、回车、制表符、全角/半角空格) SELECT regexp_replace(your_column, '^[\\s\\r\\n]+|[\\s\\r\\n]+$', '') AS cleaned_str FROM your_table;\\s而不是\s。 - 方案2:Hive 2.3+版本使用增强版trim函数
Hive 2.3及以上版本新增了带第二个参数的trim()重载,可以指定要移除的字符集,直接把换行符加入待移除字符即可:
如果还需要移除回车符,直接把-- 同时移除首尾的空格和换行符 SELECT trim(' \n' FROM your_column) AS cleaned_str FROM your_table;\r也加进第一个参数即可:trim(' \n\r' FROM your_column) - 方案3:嵌套使用
replace()+trim()组合
如果你只需要处理换行,不需要复杂匹配,也可以先把换行符替换成空格,再用trim处理,适合低版本Hive不想写正则的场景:
该方案的局限性是会把字符串中间的换行也替换成空格,如果需要保留中间换行的话不要用这个方案。SELECT trim(replace(replace(your_column, '\n', ' '), '\r', ' ')) AS cleaned_str FROM your_table;
内容的提问来源于stack exchange,提问作者Dennis Huang
相关产品推荐
相关产品推荐

