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

DataX批量导入多张表的自动化实践:从JSON模板到Shell脚本

1. 为什么需要批量导入多张表在实际的数据迁移或ETL项目中经常会遇到需要同时处理多张表的情况。比如最近我接手的一个项目需要将客户的老系统数据迁移到新平台涉及的表多达50多张。如果按照传统方式为每张表单独编写DataX的JSON配置文件再逐个执行不仅效率低下还容易出错。想象一下每次迁移都要手动修改JSON文件中的表名、数据库连接信息等参数50张表就意味着要重复操作50次。更可怕的是如果中途某个参数需要调整比如密码变更或者增加过滤条件那就得把所有文件都修改一遍。这种重复劳动不仅浪费时间还容易因为人为疏忽导致错误。批量导入的核心思路很简单模板化自动化。通过一个JSON模板定义通用的数据结构用Shell脚本动态生成具体的配置文件并执行。这样只需要维护一个模板文件所有表的配置都能自动生成大大提高了工作效率。2. 设计JSON模板的要点2.1 基础模板结构DataX的JSON配置文件主要包含三部分job设置、reader配置和writer配置。我们的模板需要保留这些基本结构同时将可能变化的参数用占位符替代。下面是我常用的模板结构{ job: { setting: { speed: { channel: 5 } }, content: [ { reader: { name: mysqlreader, parameter: { username: {{src_username}}, password: {{src_password}}, column: [*], connection: [ { jdbcUrl: [jdbc:mysql://{{src_host}}:{{src_port}}/{{src_db}}], table: [{{src_table}}] } ], where: {{where}} } }, writer: { name: mysqlwriter, parameter: { batchSize: 2048, batchByteSize: 33554432, username: {{dest_username}}, password: {{dest_password}}, column: [*], writeMode: insert, connection: [ { jdbcUrl: jdbc:mysql://{{dest_host}}:{{dest_port}}/{{dest_db}}, table: [{{dest_table}}] } ] } } } ] } }这个模板中所有双大括号包裹的部分如{{src_username}}都是占位符后续会被Shell脚本替换为实际值。2.2 模板设计技巧参数分组将相关参数放在一起比如源数据库参数都以src_开头目标数据库参数以dest_开头这样在脚本替换时更清晰。灵活的条件过滤where参数特别有用可以实现增量同步。比如只同步某个月的数据wherecreate_time 2023-01-01。性能调优参数channel控制并发数batchSize和batchByteSize影响批量写入性能这些可以根据服务器配置调整。列映射如果需要指定列而不是用*可以在column数组中列出具体列名。3. Shell脚本编写详解3.1 基础脚本结构Shell脚本的主要任务是读取表名列表、替换模板中的占位符、生成配置文件、执行DataX任务。下面是一个完整的示例#!/bin/bash set -e # 数据库连接配置 src_host172.18.45.28 src_port53306 src_dbsource_db src_usernameuser src_passwordpassword dest_host172.18.45.28 dest_port53306 dest_dbtarget_db dest_usernameuser dest_passwordpassword # 数据过滤条件 where11 # 默认不过滤 # 表名映射数组源表名:目标表名 tables( users:users_2023 orders:orders_backup products:products ) # 遍历所有表 for table_pair in ${tables[]}; do IFS: read -ra TABLE $table_pair src_table${TABLE[0]} dest_table${TABLE[1]} # 生成配置文件 sed -e s/{{src_table}}/$src_table/g \ -e s/{{src_username}}/$src_username/g \ -e s/{{src_password}}/$src_password/g \ -e s/{{src_host}}/$src_host/g \ -e s/{{src_port}}/$src_port/g \ -e s/{{src_db}}/$src_db/g \ -e s/{{dest_table}}/$dest_table/g \ -e s/{{dest_username}}/$dest_username/g \ -e s/{{dest_password}}/$dest_password/g \ -e s/{{dest_host}}/$dest_host/g \ -e s/{{dest_port}}/$dest_port/g \ -e s/{{dest_db}}/$dest_db/g \ -e s/{{where}}/$where/g \ template.json job_${dest_table}.json # 执行DataX任务 echo 开始迁移: $src_table $dest_table python /path/to/datax/bin/datax.py job_${dest_table}.json ${dest_table}.log 21 # 检查执行状态 if [ $? -eq 0 ]; then echo 迁移成功日志见 ${dest_table}.log else echo 迁移失败请检查 ${dest_table}.log exit 1 fi done echo 所有表迁移完成3.2 脚本优化技巧错误处理set -e确保脚本在遇到错误时立即退出避免继续执行可能造成的问题。日志记录每个任务的输出都重定向到单独的日志文件方便排查问题。表名映射使用源表:目标表的格式可以灵活处理表名不同的情况。参数化所有配置都在脚本开头集中定义修改起来很方便。进度反馈每个任务开始和结束都有提示信息让执行过程更透明。4. 高级应用与优化4.1 并发执行控制默认情况下脚本是串行执行的即一个表迁移完成后才开始下一个。对于大量表迁移这会很耗时。我们可以使用后台执行实现并发# 在原执行命令后添加 符号 python /path/to/datax/bin/datax.py job_${dest_table}.json ${dest_table}.log 21 但要注意两点并发数不能太高避免压垮数据库需要修改DataX的channel参数控制单个任务的并发度4.2 增量同步实现对于定期执行的迁移任务我们通常只需要同步新增或修改的数据。可以通过以下方式实现时间戳字段在where条件中使用update_time 上次同步时间自增IDwhereid 上次最大ID版本号如果有版本号字段可以基于版本号过滤# 在脚本中添加 last_sync_time2023-01-01 00:00:00 whereupdate_time $last_sync_time4.3 表结构自动同步DataX只迁移数据不处理表结构。如果目标表不存在迁移会失败。可以在脚本中添加表结构同步逻辑# 使用mysqldump导出结构 mysqldump -h$src_host -P$src_port -u$src_username -p$src_password \ --no-data $src_db $src_table temp.sql # 修改表名后导入目标库 sed -i s/$src_table/$dest_table/g temp.sql mysql -h$dest_host -P$dest_port -u$dest_username -p$dest_password \ $dest_db temp.sql4.4 性能监控与调优对于大数据量迁移性能是关键。可以通过以下方式优化调整DataX参数channel增加并发通道数batchSize增大批量提交的记录数batchByteSize增大批量提交的数据量数据库层面迁移期间关闭索引和外键约束增大数据库连接池优化服务器配置网络层面确保源库和目标库之间的网络带宽充足如果跨机房考虑压缩传输5. 实际案例分享最近我用这套方案完成了一个电商系统的数据迁移涉及87张表总数据量约2TB。下面分享一些实战经验5.1 超大表处理对于单表超过100GB的大表直接全量迁移风险很高。我的做法是按时间范围分批迁移如按月使用where条件限制每次迁移的数据量在脚本中添加检查点机制记录已迁移的范围# 分批迁移示例 for month in {1..12}; do wherecreate_time BETWEEN 2023-$month-01 AND 2023-$month-31 # 替换where条件并执行迁移 done5.2 特殊数据类型处理遇到BLOB、TEXT等大字段时DataX默认配置可能不够用。需要在reader和writer中增加配置reader: { name: mysqlreader, parameter: { ... blobTruncate: false, truncateThreshold: 1048576 } }, writer: { name: mysqlwriter, parameter: { ... blobTruncate: false } }5.3 数据一致性验证迁移完成后我通常会运行验证脚本检查数据一致性# 检查行数是否一致 src_count$(mysql -h$src_host -u$src_username -p$src_password $src_db -N -e SELECT COUNT(*) FROM $src_table) dest_count$(mysql -h$dest_host -u$dest_username -p$dest_password $dest_db -N -e SELECT COUNT(*) FROM $dest_table) if [ $src_count -eq $dest_count ]; then echo 数据量一致: $src_count 条 else echo 数据量不一致: 源表$src_count条, 目标表$dest_count条 fi5.4 遇到的坑与解决方案特殊字符问题密码中包含特殊字符时sed替换会出错。解决方案是使用sed -e s~{{src_password}}~$src_password~g用~代替/作为分隔符。内存不足大数据量迁移时DataX可能OOM。需要调整JVM参数export JAVA_OPTS-Xms4g -Xmx8g python /path/to/datax/bin/datax.py ...网络中断长时间迁移可能遇到网络问题。可以添加重试机制max_retries3 retry_count0 until python /path/to/datax/bin/datax.py ... || [ $retry_count -eq $max_retries ]; do retry_count$((retry_count1)) sleep 60 done这套自动化方案已经在我们团队内部推广累计完成了超过200次数据迁移任务平均节省了80%以上的时间。最关键的是它消除了人为操作带来的错误风险让数据迁移变得可靠且可重复。

相关文章:

DataX批量导入多张表的自动化实践:从JSON模板到Shell脚本

1. 为什么需要批量导入多张表? 在实际的数据迁移或ETL项目中,经常会遇到需要同时处理多张表的情况。比如最近我接手的一个项目,需要将客户的老系统数据迁移到新平台,涉及的表多达50多张。如果按照传统方式,为每张表单独…...

Fashion MNIST分类任务中的常见陷阱与优化技巧:从90%到91%的实战经验

Fashion MNIST分类任务中的常见陷阱与优化技巧:从90%到91%的实战经验 当你在Fashion MNIST数据集上训练一个分类模型时,90%的准确率似乎是个不错的起点。但当你发现无论如何调整参数,模型性能始终徘徊在这个水平时,那种挫败感只有…...

如何快速解锁加密音乐文件:Unlock-Music完整免费指南

如何快速解锁加密音乐文件:Unlock-Music完整免费指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https:…...

如何永久保存微信聊天记录?这款开源工具让你完全掌控个人数字记忆

如何永久保存微信聊天记录?这款开源工具让你完全掌控个人数字记忆 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trendi…...

多模态大模型自动化运维方案(企业级POC验证白皮书):覆盖日志/指标/拓扑/工单/视频巡检5维感知

第一章:多模态大模型自动化运维方案概述 2026奇点智能技术大会(https://ml-summit.org) 多模态大模型自动化运维(M3-Ops)是面向AIGC基础设施、智能算力集群与异构AI工作负载的一体化智能治理范式。它融合视觉、文本、时序日志、拓扑图谱与系…...

AI时代Geo优化:官网标签如何铸就信任与流量新高

概述 在人工智能(AI)日益主导信息获取的今天,传统的搜索引擎优化(SEO)正经历一场深刻的变革,逐步演进为生成式引擎优化(Generative Engine Optimization, GEO)。GEO不再仅仅是追求关…...

【国家级AI治理实验室内部方法论】:基于172万图文对+43万音频样本验证的偏见动态监测系统(含GitHub可运行Pipeline)

第一章:多模态大模型偏见检测与消除 2026奇点智能技术大会(https://ml-summit.org) 多模态大模型在图像-文本对齐、跨模态推理等任务中展现出强大能力,但其训练数据固有的社会性偏差常被放大并编码为隐式决策偏好,导致性别刻板印象、种族关联…...

如何在5分钟内为视频添加AI字幕?AutoSubs完整指南揭秘

如何在5分钟内为视频添加AI字幕?AutoSubs完整指南揭秘 【免费下载链接】auto-subs Instantly generate AI-powered subtitles on your device. Works standalone or connects to DaVinci Resolve. 项目地址: https://gitcode.com/gh_mirrors/au/auto-subs 还…...

LVGL v9基础对象(lv_obj)实战:从HTML的div到嵌入式UI的布局核心

LVGL v9基础对象(lv_obj)实战&#xff1a;从HTML的div到嵌入式UI的布局核心 在嵌入式UI开发中&#xff0c;LVGL的基础对象lv_obj如同Web开发中的<div>元素&#xff0c;是构建复杂界面的基石。本文将深入探讨如何利用lv_obj实现类似HTML的布局系统&#xff0c;并通过实战案…...

智能网络边界守护者:OpenWrt访问控制插件深度实践指南

智能网络边界守护者&#xff1a;OpenWrt访问控制插件深度实践指南 【免费下载链接】luci-access-control OpenWrt internet access scheduler 项目地址: https://gitcode.com/gh_mirrors/lu/luci-access-control 在万物互联的时代&#xff0c;家庭网络已不再是简单的上网…...

企业自建防护 vs 第三方高防服务:怎么选才不花冤枉钱?一篇讲透性价比

企业自建防护与第三方高防服务对比成本投入自建防护&#xff1a;需采购硬件设备&#xff08;如防火墙、负载均衡器&#xff09;、软件授权及运维团队&#xff0c;前期投入高&#xff0c;适合长期需求稳定且预算充足的企业。硬件成本可能达数十万至百万级&#xff0c;且需持续支…...

从失败到成功:泰山派Debian镜像制作全记录(含鲁班猫仓库改造技巧)

泰山派Debian镜像制作实战&#xff1a;从官方文档失败到鲁班猫仓库改造的完整指南 当我在深夜第三次尝试按照泰山派官方文档构建Debian镜像时&#xff0c;终端上红色的报错信息格外刺眼。作为嵌入式开发者&#xff0c;我们常常需要为特定开发板定制操作系统镜像&#xff0c;而…...

20张图的保姆级教程,记录使用Verdaccio在Ubuntu服务器上搭建Npm私服

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

边缘智能如何扛住多模态大模型的算力洪峰?——揭秘端侧TinyML+MoE蒸馏+动态模态裁剪的工业级组合拳

第一章&#xff1a;边缘智能如何扛住多模态大模型的算力洪峰&#xff1f;——揭秘端侧TinyMLMoE蒸馏动态模态裁剪的工业级组合拳 2026奇点智能技术大会(https://ml-summit.org) 当视觉、语音、时序传感器与文本信号在边缘设备上并发涌入&#xff0c;传统端侧推理架构常在毫秒…...

Halcon图像处理避坑指南:计算平均亮度前别忘了rgb1_to_gray这一步

Halcon图像处理避坑指南&#xff1a;计算平均亮度前别忘了rgb1_to_gray这一步 在工业视觉检测项目中&#xff0c;准确计算图像的平均亮度是许多算法的基础步骤。然而&#xff0c;不少Halcon初学者在使用intensity算子时&#xff0c;常常忽略了一个关键细节——输入图像的类型。…...

【2026奇点大会核心解码】:多模态虚拟人三大技术断层与企业落地避坑指南

第一章&#xff1a;2026奇点智能技术大会&#xff1a;多模态虚拟人 2026奇点智能技术大会(https://ml-summit.org) 核心突破&#xff1a;跨模态对齐与实时协同生成 本届大会首次公开展示了端到端训练的多模态虚拟人框架「Aurora-7」&#xff0c;其核心创新在于统一时序表征空…...

ZYNQ PS GPIO MIO配置实战:从电压分组到引脚复用的避坑指南

ZYNQ PS GPIO MIO配置实战&#xff1a;从电压分组到引脚复用的避坑指南 在嵌入式系统开发中&#xff0c;Xilinx ZYNQ系列芯片因其独特的ARM处理器FPGA架构而广受欢迎。然而&#xff0c;对于刚接触ZYNQ平台的开发者来说&#xff0c;PS端的GPIO配置尤其是MIO引脚的使用往往充满挑…...

终极本地化LLM评测指南:如何用DeepEval实现数据零泄露的模型评估

终极本地化LLM评测指南&#xff1a;如何用DeepEval实现数据零泄露的模型评估 【免费下载链接】deepeval The LLM Evaluation Framework 项目地址: https://gitcode.com/GitHub_Trending/de/deepeval 你是否担心AI模型测试时的数据隐私泄露&#xff1f;是否厌倦了为云端A…...

从IMU到AHRS:惯性导航系统的核心技术演进与应用实践

1. 从IMU到AHRS&#xff1a;惯性导航系统的技术演进 第一次接触惯性导航系统是在2015年做无人机项目时&#xff0c;当时为了调试一个简单的姿态控制功能&#xff0c;整整花了两周时间才让IMU数据稳定下来。现在回想起来&#xff0c;从原始的IMU数据到稳定的AHRS输出&#xff0c…...

自然语言处理中的预测与生成技术

本期节目邀请了某机构联合创始人兼CEO Ines Montani&#xff0c;与主持人讨论如何使用自然语言处理解决实际问题。内容涵盖生成式任务与预测式任务的区别、构建处理流水线、分解问题、标注训练示例、模型微调、利用大型语言模型进行数据标注和原型开发&#xff0c;以及spaCy NL…...

从雷达抗干扰到智能音箱降噪:深入浅出聊聊MVDR波束形成的实战应用与调参心得

从雷达抗干扰到智能音箱降噪&#xff1a;MVDR波束形成的实战调参指南 在嘈杂的会议室里&#xff0c;智能音箱如何准确捕捉你的声音&#xff1f;自动驾驶汽车如何从复杂环境中识别障碍物反射的雷达信号&#xff1f;这些看似不相关的场景背后&#xff0c;都依赖一项关键技术——M…...

5分钟掌握GeographicLib:高精度地理计算库的终极入门指南

5分钟掌握GeographicLib&#xff1a;高精度地理计算库的终极入门指南 【免费下载链接】geographiclib Main repository for GeographicLib 项目地址: https://gitcode.com/gh_mirrors/ge/geographiclib 想要在GIS、导航或测绘项目中实现厘米级精度的地理计算吗&#xff…...

从141帧到150帧:在RK3588上为YOLOv5s推理提速的三种硬件加速方案实测(附避坑指南)

从141帧到150帧&#xff1a;RK3588上YOLOv5s推理加速的实战优化手册 当我们在RK3588这样的边缘计算设备上部署YOLOv5s时&#xff0c;性能优化往往成为最关键的挑战。最近一个开源项目展示了141帧的基础性能&#xff0c;而通过系统级的硬件加速优化&#xff0c;这个数字可以提升…...

Node-RED连接Redis时,这5个配置细节和性能调优点你注意了吗?

Node-RED连接Redis时&#xff0c;这5个配置细节和性能调优点你注意了吗&#xff1f; 在物联网和自动化流程开发中&#xff0c;Node-RED与Redis的组合堪称黄金搭档。Redis作为高性能的内存数据库&#xff0c;能够为Node-RED提供快速的数据存储和消息传递能力。但当流量激增或数据…...

矩阵-54. 螺旋矩阵

文章目录一、核心解题思路1. 核心思想&#xff1a;边界收缩法&#xff08;模拟顺时针遍历&#xff09;2. 时间 / 空间复杂度二、完整 Java 代码&#xff08;符合大厂机考标准&#xff0c;含控制台输入输出&#xff09;三、注意★★★边界判断的必要性力扣地址&#xff1a; 中等…...

ExplorerPatcher深度技术解析:Windows界面定制的终极系统级解决方案

ExplorerPatcher深度技术解析&#xff1a;Windows界面定制的终极系统级解决方案 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher ExplorerPatch…...

别再手动下载了!用GEE批量导出MODIS MCD12Q1年度土地覆盖数据(附完整代码)

高效获取全球土地覆盖数据&#xff1a;基于GEE的MODIS MCD12Q1全自动处理方案 引言&#xff1a;为什么需要自动化处理土地覆盖数据&#xff1f; 在生态环境监测、气候变化研究和城市规划等领域&#xff0c;MODIS MCD12Q1年度土地覆盖数据是基础性关键数据集。传统手动下载方式不…...

AI驱动零代码浏览器自动化:三步轻松实现跨平台智能操作

AI驱动零代码浏览器自动化&#xff1a;三步轻松实现跨平台智能操作 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 厌倦了每天重复的浏览器操作&#xff1f;填写…...

电量计核心技术解析:从基础原理到智能应用

1. 电量计&#xff1a;电池的"智能管家" 想象一下你的手机电量显示从20%突然跳到5%&#xff0c;或者无人机在飞行中突然断电坠落——这些糟心体验的根源往往在于电量计量不准确。电量计就像电池的"智能管家"&#xff0c;它不仅要回答"还剩多少电&quo…...

2026年人工智能AI原生型公司:面向规模化AI应用的企业架构设计研究报告

原文链接&#xff1a;https://tecdat.cn/?p45493原文出处&#xff1a;拓端抖音号拓端tecdat关于分析师在此对 YouMing Zhang 对本文所作的贡献表示诚挚感谢&#xff0c;他在东北大学完成了信息与计算科学专业的学士学位&#xff0c;专注人工智能领域。擅长机器学习、深度学习算…...