为什么会自动生成绝对路径 Kettle 本地文件模式下,跨文件夹选文件时,默认读取文件系统的绝对路径(这是 7.1 版本的硬逻辑)
参数化路径 作业数量少(≤10 个)的场景:
打开作业 → 双击「Transformation」组件;
把自动生成的绝对路径(如 /home/etl/ETL项目/transformations/order/order_process.ktr);
手动替换为参数化路径:${BASE_DIR}/transformations/order/order_process.ktr;
保存即可,Kettle 会自动解析 ${BASE_DIR}(需先在 kettle.properties 定义)。
批量脚本改 定义全局参数
1 2 3 4 5 6 # 编辑 kettle 全局配置,定义项目根目录参数 vi ~/.kettle/kettle.properties # 添加这一行(替换成你的实际根路径,支持中文): BASE_DIR=/home/etl/ETL项目/etl_project # 保存退出(:wq)
批量替换脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/bin/bash # ************************* 配置区 ************************* # 你的项目根目录(绝对路径,和 BASE_DIR 一致) PROJECT_DIR="/home/etl/ETL项目/etl_project" # 需要替换的内容 注意下面的替换,先把wondows的“\” 替换成了linux的“/” 所以原路经“C:\Users\Administrator”应该写成“C:/Users/Administrator” AB_DIR="文件中绝对路径的前缀" # 要替换的文件类型(.kjb 是作业,.ktr 是转换,都要改就保留) FILE_TYPES=("*.kjb" "*.ktr") # ********************************************************* # 遍历所有作业/转换文件 for FILE_TYPE in "${FILE_TYPES[@]}"; do find ${PROJECT_DIR} -name "${FILE_TYPE}" -type f | while read -r FILE; do # 批量替换绝对路径为参数化路径(转义特殊字符,避免替换失败) sed -i'' "s|\\\|/|g" "${FILE}" sed -i "s|${AB_DIR}|\\\${BASE_DIR}|g" "${FILE}" echo "已处理:${FILE}" done done echo "批量替换完成!所有绝对路径已改为 \${BASE_DIR} 参数化路径"
执行脚本
1 2 3 4 5 6 7 # 1. 把脚本保存为 batch_replace_path.sh vi batch_replace_path.sh # 2. 粘贴上面的脚本,修改 PROJECT_DIR 为你的实际路径 # 3. 赋予执行权限 chmod +x batch_replace_path.sh # 4. 执行脚本 ./batch_replace_path.sh