TDsql增量merge导入load_data

TDsql增量merge导入load_data

项目组最近用了腾讯的TencentDB分布式数据库作为传统关系型数据库来保存少量应用数据。因此需要开发相对应的ETL功能代码,根据新数据库特性,使用自带的工具load_data作为导入的工具


准备表

使用load_data导入的表,必须要有主键,不然replace或者说mode3替换模式无法识别,最终导致导入的时候会数据重复

Create table default.testA(
Id decimal(1),
Name varchar(10),
Primary key(id)
);

准备数据

Insert into default.testA values(1,’tony’);
Insert into default.testA values(2,’tom’);
Insert into default.testA values(3,’tata’);
Insert into default.testA values(4,’tang’);

在这里插入图片描述


准备测试文件

  1. 新增一条不重复的文件按记录
    /home/zhouchen/testFileAdd.txt
    5|tim

  2. 新增四条记录,分别是需要更新,插入,去重
    /home/zhouchen/testFileMerge.txt
    1|chew
    5|tim
    6|tingting
    6|tingting


自增导入

load_data mode3 --ip=${TDSQL_HOST} --port=${TDSQL_PORT} --user=${TDSQL_USER} --password=${TDSQL_PSWD} --db_name=default.testA
–file= /home/zhouchen/testFileAdd.txt
–field_terminated=”|”
–lines_terminated=”\n”
–chunk_size=512
–replace_duplicates=true
–skip_error=true

参数说明:

  • mode0:load_data的原理是分割数据,然后导入数据,mode0是先分割数据不进行导入。
  • mode0:只分割数据,不进行导入,一般用于调试。
  • mode1:分割数据,然后对应load data语句中IGNORE模式导入数据,正式导入数据使用 mode1 指令。
  • mode2:在mode1基础上,忽略导入行错误,继续导入。
  • mode3:分割数据,然后对应load data语句中REPLACE模式导入数据。
  • mode4:在mode2基础上,忽略导入行错误,继续导入。
  • chunk_size: 导入块大小(KB),默认值为与文件大小相关的一个分段函数,当设置的chunk_size<=1280k时,其都是以128k运行的
  • replace_duplicates: 是否开启替换模式,替换已存在的记录
  • skip_error: 是否跳过错误,即当发生错误时,是停止导入(0)还是跳过错误(1)

导入结果:
在这里插入图片描述


merge导入

load_data mode3 --ip=${TDSQL_HOST} --port=${TDSQL_PORT} --user=${TDSQL_USER} --password=${TDSQL_PSWD}
–file= /home/zhouchen/testFileAdd.txt
–field_terminated=”|”
–lines_terminated=”\n”
–chunk_size=512
–replace_duplicates=true
–skip_error=true

导入结果:
在这里插入图片描述


总结

使用TDsql自带的load_data导入数据的时候,使用replace模式配置skip_error可以实现merge导入:

  1. 根据id主键update数据1的name值为chew;
  2. 去重两条id为5的数据;
  3. 新增导入id为5的数据和id为6的数据;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值