如何用Pentaho Data Integration从压缩包子层级提取XLSX并增量加载
Pentaho Kettle读取压缩包内两级子目录XLSX文件方案
一、一次性全量加载流程
解决Get File Names无法遍历压缩包内目录的核心是先解压再遍历,步骤如下:
- 用
Get File Names步骤定位目标压缩包,过滤后缀为.zip(RAR格式需额外安装Kettle插件)。 - 添加
Unzip步骤,将压缩包解压到临时目录(如${JAVA_TMPDIR}/kettle_temp_unzip),勾选Extract all files保留原目录结构。 - 再次使用
Get File Names步骤,目标路径设为临时目录,勾选Include subfolders,过滤文件后缀为.xlsx;如需严格限制两级子目录,可通过正则匹配路径(如.*\/.*\/.*\.xlsx)。 - 用
Microsoft Excel Input步骤读取上一步获取的XLSX文件,配置表头、数据起始行等参数。 - 通过
Table Output步骤将数据写入目标数据库,完成字段映射与数据库连接配置。 - 最后用
Delete file步骤清理临时目录,避免冗余文件占用空间。
二、后续增量加载(仅取前一天文件)
需结合文件/压缩包的日期标识实现,分两种场景:
场景1:压缩包按日期命名(如data_20240520.zip)
- 在
Get File Names步骤中,设置文件名过滤规则为data_${DATE-1, 'yyyyMMdd'}.zip,或通过File age过滤,选择"Modified date is between",时间范围设为前一天00:00至23:59。 - 后续解压、遍历、读取、加载、清理步骤与全量加载一致。
场景2:压缩包内XLSX文件按日期命名(如report_20240520.xlsx)
- 先解压目标压缩包,再在
Get File Names步骤中,用文件名过滤规则*${DATE-1, 'yyyyMMdd'}*.xlsx筛选前一天的文件,同时可配合File age参数双重校验。 - 读取与加载步骤同前,建议新增"加载日志表"记录已加载的文件路径,通过
Filter rows步骤排除重复文件。
注意事项
- 若压缩包含中文路径/文件名,需确保Kettle配置文件(
kettle.properties)中设置file.encoding=UTF-8避免乱码。 - 临时目录建议用动态路径(如
${USER_DIR}/temp_unzip_${DATE}),防止多实例运行冲突。 - RAR格式需在Pentaho Marketplace下载并安装RAR插件,否则
Unzip步骤无法处理。
内容的提问来源于stack exchange,提问作者Matheus Sampaio
相关产品推荐
相关产品推荐

