Hive Regex Serde匹配含空格文件名的正则调整问题
解决Hive Regex Serde匹配含空格文件名的问题
原正则表达式用\S+匹配文件名,只能识别无空格的字符串,无法处理含空格的文件名。结合你的表结构特征——permission、owner、blockSize、blockCount这四个字段均为无空格字符串,我们可以通过定位前后无空格字段的边界来正确匹配含空格的文件名。
修改后的正则表达式及执行语句
hive > alter table my_table SET SERDEPROPERTIES ("input.regex" = "(\\S+)\\s+(\\S+)\\s+(.+?)\\s+(\\S+)\\s+(\\S+)");
正则各部分说明
(\\S+)\\s+:匹配第一个字段permission(无空格)及后续空格(\\S+)\\s+:匹配第二个字段owner(无空格)及后续空格(.+?)\\s+:以非贪婪模式匹配任意内容(包含空格),直到遇到后续无空格的blockSize字段前的空格,这部分对应文件名filename(\\S+)\\s+:匹配第四个字段blockSize(无空格)及后续空格(\\S+):匹配第五个字段blockCount(无空格)
精准匹配优化(可选)
如果blockSize和blockCount是纯数字类型,可将对应的\\S+替换为\\d+,进一步提升匹配精准度:
hive > alter table my_table SET SERDEPROPERTIES ("input.regex" = "(\\S+)\\s+(\\S+)\\s+(.+?)\\s+(\\d+)\\s+(\\d+)");
内容的提问来源于stack exchange,提问作者Nickswaggy
相关产品推荐
相关产品推荐

