title: ETL-使用kettle批量复制sqlserver数据到mysql数据库
date: 2023-11-21 10:21:53
tags: ETL
cover: https://gulimall-ayu.oss-cn-chengdu.aliyuncs.com/blog/QQ%E5%9B%BE%E7%89%8720231121133353.png
1、安装sqlserver数据库
#安装之前我们准备好挂载文件夹:/opt/module/mssql
#并且修改文件夹所有者: chown -R 10001:0 ./opt/module/mssql
docker run \
--name mssql \
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_SA_PASSWORD=XLYqwe123' \
-p 1433:1433 \
-v /opt/module/mssql:/var/opt/mssql \
--restart=always \
-d mcr.microsoft.com/mssql/server:2017-latest
#进入容器命令:
docker exec -it 容器id /bin/bash
#登录命令:
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "XLYqwe123"
#然后我们就可以创建一些表用来模拟传输数据
2、下载kettle
kettle在外网下载起来非常慢,这是我使用的版本
链接:https://pan.baidu.com/s/142eHrLx5AjmGxwCEbabfCw?pwd=uqmh
提取码:uqmh
3、业务分析
现在一共是四百多张表在sqlserver里面,直接用navicat的传输工具要报错,
在kettle里面是这样解决的,先根据sqlserver的表生成mysql的建表语句(ddl),然后
在将sqlserver的表格数据插入过去。
4、详细流程
流程完全是copy的这个文章:
https://blog.csdn.net/xuyang2059/article/details/124431556?spm=1001.2014.3001.5502
总共涉及到两个工作流,4个转换算子
(1)转换1:获取sqlserver所有表格名字,将记录复制到结果

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_NAME;


(2)转换2:从结果设置变量

