当表数据量比较大的时候(1000w),要考虑分表。这里记录使用Kettle(一个ETL工具)进行分表的操作。

1.预估数据量

假定某个表的的数据量是2500万,那就需要分3个表存储。

2.创建表

这里假定表名为b_company,需要分3个表。

1
2
3
create table if not exists b_company_0 like b_company;
create table if not exists b_company_1 like b_company;
create table if not exists b_company_2 like b_company;

执行上面的脚本。

打开Kettle,根据一定的规则(这里以ID划分,根据实际业务),将hash(id)=0的insert到b_company_0,其他的以此类推。

a.新建转换–>DB连接–>新建(新建数据库);
b.切换到“核心对象”Tab,选择输入、转换和输出的控件;
如图:

表输入用来制定数据来源,内容如下:

这里用了java脚本来实现根据ID生成一列table_name

表输出这里使用了动态表名(根据一行数据的table_name字段)

然后在数据库字段这里,点击“获取字段”,然后去掉table_name,因为我们是用它来确定某行数据应该存储到哪个表的。

kttle 新建作业执行多个转换job按并行和顺序执行

参考:https://blog.csdn.net/saga_gallon/article/details/78410902

特别注意
如果表数据量大,用的windows10系统,默认情况下锁屏后网络会中断,会导致Kettle执行不成功。
到网络和共享中心–>以太网–>Microsoft网络客户端(选中)–>配置–>电源管理–>运行计算机关闭此设备以节省电源(不要勾选)。

或者,直接到控制面板建电源管理中不然计算机进入休眠。位置:控制面板\硬件和声音\电源选项\编辑计划设置。