喵星之旅-屯粮的松鼠-kettle部署作业批量修改绝对路径

为什么会自动生成绝对路径

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
文章目录
  1. 为什么会自动生成绝对路径
  2. 参数化路径
  3. 批量脚本改
|