Spark SQL正则提取文件名中brand、日期等元数据字段问题求助
修正后的完整查询代码
SELECT x,y,z, -- 适配有无横杠的两种文件名场景提取brand regexp_extract(INPUT_FILE_NAME(), '^(?:[^/-]+-)?([^/_]+)_', 1) AS brand, -- 提取文件名中下划线后的8位数字日期 regexp_extract(INPUT_FILE_NAME(), '_([0-9]{8})\\.tab', 1) AS FILE_DATE, -- 提取文件后缀作为SOURCE_DETAILS regexp_extract(INPUT_FILE_NAME(), '\\.([^.]+)$', 1) AS SOURCE_DETAILS, -- 提取不带后缀的完整文件名 regexp_extract(INPUT_FILE_NAME(), '(.+)\\.[^.]+$', 1) AS Name
问题修复说明
- brand提取适配:采用可选非捕获组匹配横杠前缀,有横杠时取横杠后下划线前的分类值,无横杠时直接取下划线前的品牌名,覆盖所有示例场景
- FILE_DATE逻辑修正:原有正则是从路径的
modified_dttm参数取值,不符合文件名内置日期的需求,修正后直接提取文件名中固定位置的8位日期,和示例输出规则完全对齐 - SOURCE_DETAILS空值修复:原有正则匹配逻辑和需求不符,修正后直接提取文件后缀,可稳定返回
tab值 - NAME字段优化:修正后正则匹配最后一个
.之前的全部内容,自动剔除文件后缀,不会保留后缀前的点
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

