如何替换 hive 列中的特殊字符?

Posted

技术标签:

【中文标题】如何替换 hive 列中的特殊字符?【英文标题】:How to Replace special characters in hive columns? 【发布时间】:2020-07-15 14:27:16 【问题描述】:

我在 hive 中有一个要求,需要用 _ 替换非字母数字字符。 列中的数据是“Pranav_Wagde_job_1163_W.Pranav Ltr-Resume 04.07.2016.pdf”

SELECT FILENAME, REGEXP_REPLACE(FILENAME,"[^0-9a-zA-Z._]", "_"), FROM HIVEDB.FILEDATA WHERE FILENAME='Pranav Wagde_job_1163_W.Pranav Ltr-Resume 04.07.2016.pdf';

输出是

Pranav_Wagde_job_1163_W.Pranav Ltr-Resume 04.07.2016.pdf

我无法替换文件名中的点。 如何替换数据中除文件扩展名之外的所有点?

【问题讨论】:

【参考方案1】:

如果支持正向前瞻,您可以添加替换 | 匹配所有点,除了右边有 1 个以上单词字符后跟字符串末尾的点。

(?:[^0-9a-zA-Z._]|\.(?!\w+$))

Regex demo

【讨论】:

获取输出为 ___________________________________________________________。 @Pranav 尝试双重转义点 \\.(?:[^0-9a-zA-Z._]|[.](?!\w+$)) regex101.com/r/Sd68ae/1 谢谢第四只鸟。您的 RegExp 正在使用您在超链接中提供的工具,但不幸的是它在 hive 中不起作用。我得到一个输出为```Pranav_Wagde_job_1163_W_Pranav_Ltr_Resume_04_07_2016_pdf ``` 尝试将另一个反斜杠加倍,例如\\w+ @Pranav 整个模式是(?:[^0-9a-zA-Z._]|\\.(?!\\w+$))

以上是关于如何替换 hive 列中的特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SSIS 从列中删除特殊字符 " 和 '

hive怎样取出字段包含的所有特殊字符

hive特殊字符的替换

hive替换文件中特殊字符

hive中 regexp_replace的用法,替换特殊字符问题

替换 Hive 表中所有列中的字符