因为公司数仓报表使用的数据表是T+1增量导入的,每天花在增量导入上的时间很长,影响了报表的输出, 所以领导想要使用TiDB来替换数仓中的表,开启实时同步,就可以省掉增量导入的时间。 这就涉及到历史数据导入TiDB的问题,目前tidb推荐使用TiDB-lightning来进行批量导入,由于它是直接写入TiKv,所以在导入期间需要停掉TiDB的服务,并且只能使用csv文件,权衡之后还是否掉了。 最后还是打算使用Sqoop的方式,直接从hive导入到TiDB,步骤是: 1、先用Sqoop将某天的全量导入到TiDB中,此过程有可能很长,视数据量而定。 2、把同步拉起直至第二天表增量导入到hive。 3、此时停下同步,把全量的主键用Sqoop数据导入到hive,然后与hive中的表做去重,去重后的数据再次导入到TiDB 4、在同步数据失效前重新拉起同步。   如果过程中有错误或者sqoop任务挂掉,或者第3步导入时长太长,只能提前拉起同步,则有可能导致导入时主键冲突问题。 此时可以使用Sqoop的增量模式,sqoop文档在这里 通过 --update-key 来指定数据更新的主键 如果TiDb中的有一张表: [info] CREATE TABLE foo( id INT NOT NULL PRIMARY KEY, msg VARCHAR(32), bar INT); [/info] Hive中有数据为 [info] 0,this is a test,42 1,some more data,100 ... [/info] 执行 sqoop-export --table foo --update-key id --export-dir /path/to/data --connect …   相当于:

[info]

UPDATE foo SET msg='this is a test', bar=42 WHERE id=0;

UPDATE foo SET msg='some more data', bar=100 WHERE id=1;

[/info]

通过这样就能够增量的从hive导入TiDB