当前位置: 首页 > news >正文

kettle9.0 多库多表同步数据

一、需求:有30个库,每个库有53张表,需要将表中数据完整的同步到另一个库中,做备份用

1、主作业:读取数据库表信息,循环每个库。

image

image

 

2、次作业:读取库中的所有表,循环每个表。

image

 

image

 

image

 

image

 

// 作业级读取变量:用 parent_job.getVariable()(Kettle 9.0 作业级兼容写法)
var syncType = parent_job.getVariable("SYNC_TYPE", "increment");

// 运行后看日志中是否能看到"当前SYNC_TYPE=xxx",确认变量读取正确
if (syncType == "increment") {
// 增量:返回true → 走成功分支
true;
} else {
// 全量:返回false → 走失败分支
false;
}

image

 

3、单表作业:读取表中信息,根据数据的特点用来区分是全量同步还是增量同步。

image

 

 

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {

Object[] rowData = getRow();
if (rowData == null) {
setOutputDone();
return false;
}

// 读取转换级变量(适配Kettle 9.0)
String tableName = getTrans().getVariable("TABLE_NAME", "");
String fieldList = getTrans().getVariable("FIELD_LIST", "");
String pkField = "id";

// 空值校验:表名/字段列表为空时跳过
if (tableName.trim().isEmpty() || fieldList.trim().isEmpty()) {
logError("表名或字段列表为空,跳过当前行处理");
putRow(data.outputRowMeta, rowData);
return true;
}

// 拆分字段列表
String[] sourceFields = fieldList.trim().isEmpty() ? new String[0] : fieldList.split(",");

StringBuilder fields = new StringBuilder();
StringBuilder values = new StringBuilder();
StringBuilder updates = new StringBuilder();

// 遍历字段拼接SQL(仅处理源/目标表一致的字段)
for (int i = 0; i < sourceFields.length; i++) {
String fieldName = sourceFields[i].trim();
if (fieldName.isEmpty()) continue;

// 获取字段值和元数据
int idx = getInputRowMeta().indexOfValue(fieldName);
Object val = (idx >= 0) ? rowData[idx] : null;
ValueMetaInterface meta = (idx >= 0) ? getInputRowMeta().getValueMeta(idx) : null;

// 拼接字段名
fields.append("`").append(fieldName).append("`");

// 拼接字段值(兼容不同数据类型)
if (val == null) {
values.append("NULL");
} else if (meta != null && (meta.isNumeric() || meta.isInteger() || meta.isBigNumber())) {
values.append(val.toString());
} else if (meta != null && meta.isBoolean()) {
boolean b = "1".equals(val.toString()) || "true".equalsIgnoreCase(val.toString());
values.append(b ? "1" : "0");
} else {
String rawStr = val.toString();
String cleanStr = rawStr.replaceAll("[^\\u0000-\\uFFFF]", ""); // 移除 Emoji 等
String escapedStr = cleanStr.replace("\\", "\\\\").replace("'", "''");
values.append("'").append(escapedStr).append("'");
}

// 拼接更新子句(排除主键字段)
if (!fieldName.equalsIgnoreCase(pkField)) {
updates.append("`").append(fieldName).append("` = VALUES(`").append(fieldName).append("`)");
}

// 最后一个字段不加逗号,避免SQL语法错误
if (i < sourceFields.length - 1) {
fields.append(",");
values.append(",");
if (!fieldName.equalsIgnoreCase(pkField)) {
updates.append(",");
}
}
}

// 生成最终的INSERT/UPDATE SQL
String sql = "INSERT INTO `" + tableName + "` (" + fields.toString() + ") VALUES (" + values.toString() + ") ON DUPLICATE KEY UPDATE " + updates.toString();

// 输出SQL到下一个步骤
Object[] outputRow = createOutputRow(rowData, data.outputRowMeta.size());
get(Fields.Out, "dynamic_sql").setValue(outputRow, sql);
putRow(data.outputRowMeta, outputRow);

return true;
}

 全量同步的时候,需要查询所有的数据,在表输出的时候需要勾选裁剪表,这个代表插入数据之前先清空数据。

image

 

http://www.zskr.cn/news/79764.html

相关文章:

  • 2025年靠谱的光伏直流汇流箱/光伏汇流箱厂家最新权威推荐排行榜
  • 从意义行为原生到技术实现:现实情境编译器作为AI元人文的范式革命
  • 2025年质量好的箱涵管道清淤机器人/煤矿井下清淤机器人厂家最新权威推荐排行榜
  • 2025年热门的牛羊肉贴体膜/贴体膜厂家最新实力排行
  • 软件工程学习日志2025.12.9
  • 2025年口碑好的网架工程/徐州煤棚网架厂家选购指南与推荐
  • 2025年热门的格栅机耙齿用户口碑最好的厂家榜
  • 英语自学工具进化论:告别哑巴英语,走向真实对话时代
  • 学英语,最好的软件其实是“组合拳”哪些英语软件最有效?
  • 2025年英语自学软件精选:免费高效,轻松开启学习之旅
  • 详细介绍:[Column] Perplexity 如何构建 AI 版 Google | 模型无关架构 | Vespa AI检索
  • 2025中国薪酬管理系统测评与选型指南:数字化转型下的企业决策
  • Oracle中行转列、列转行
  • 2025年比较好的注塑机边粉碎机/粉碎机厂家推荐及选择参考
  • Day58(28)-F:\vs_ai_work\vue-tlias-management
  • 2025年口碑好的电解电镀高压直流继电器厂家推荐及选购参考榜
  • Spring AI使用JSON Schema导致模型调用速度极慢
  • vue2项目引入vue-lazyload实现图片懒加载
  • 大学生必备APP精选:助力学业与生活的实用工具
  • 博弈论模型中的学习与算法设计
  • 2025年地毯品牌最新推荐榜,聚焦企业技术创新、原料品质与市场口碑深度解析羊毛,无胶,可拆洗双层,客厅,卧室,中古风,儿童房,可拆洗,床边,无胶防水地毯公司推荐
  • 中美跨境国际快递配送清单:轻小件低价寄,带电_特货合规清关
  • Elasticsearch:如何为 Elastic Stack 部署 E5 模型 - 下载及隔离环境 - 详解
  • Flutter 应该如何实现 iOS 26 的 Liquid Glass
  • IIS反向代理
  • Prefect 产品使用说明
  • 揭秘姜胖胖韩式烤肉连锁加盟:高知名度与好口碑背后的秘密
  • 全流程跟踪!留学中介排行榜TOP10把控申请节奏
  • 网卡混杂模式解析:从网络诊断到 Kubernetes 网络模型
  • 2025 中小学生 AI 学习机选购指南:松鼠 AI 登顶!这 4 款高性价比之选闭眼入