You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hive中如何用正则表达式提取字段里的DataProgram与ModelYear

使用Hive regex_extract提取DataProgram和ModelYear

当然可以用regex_extract实现这个需求!这恰好是正则表达式在Hive中提取结构化文本字段的典型场景,我结合你的示例数据给你具体的实现方案:

先拆解字段规律

从你给出的两个示例:

数据1: GD391P_JIK_2019MY_PRISM_DEPSpec.csv
数据2: T811P_2020MY_AA_DEPSpec.csv

能看出两个关键规律:

  • ModelYear:总是四位数字,后面紧跟MY(比如2019、2020)
  • DataProgram:是文件名开头到_YYYYMY之前的所有内容(比如GD391P_JIK、T811P)

具体的regex_extract实现

1. 提取ModelYear

我们可以用正则匹配“四位数字+MY”的组合,捕获其中的四位数字:

regex_extract(filename, '(\\d{4})MY', 1) AS ModelYear
  • 正则解释:(\\d{4}) 捕获连续四位数字,MY 匹配固定后缀,1 表示取第一个捕获组的内容。

2. 提取DataProgram

我们需要匹配从文件名开头到_YYYYMY之前的所有内容,用非贪婪匹配来确保不会多取:

regex_extract(filename, '^(.*?)_\\d{4}MY', 1) AS DataProgram
  • 正则解释:
    • ^ 匹配字符串开头
    • (.*?) 非贪婪匹配任意字符(直到遇到后面的_\\d{4}MY就停止)
    • _\\d{4}MY 匹配分隔符(下划线+四位数字+MY)
    • 1 取第一个捕获组的内容

完整Hive SQL示例

把这两个提取逻辑整合到查询中:

SELECT
  filename,
  regex_extract(filename, '^(.*?)_\\d{4}MY', 1) AS DataProgram,
  regex_extract(filename, '(\\d{4})MY', 1) AS ModelYear
FROM your_table_name;

测试你的示例数据,得到的结果会是:

filenameDataProgramModelYear
GD391P_JIK_2019MY_PRISM_DEPSpec.csvGD391P_JIK2019
T811P_2020MY_AA_DEPSpec.csvT811P2020

完全符合你的需求!如果后续有其他类似的文本提取需求,只要找到固定的分隔规律,用regex_extract都能轻松解决。

内容的提问来源于stack exchange,提问作者Irthiza Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:19:40