use of com.alibaba.otter.node.etl.load.loader.db.DbLoadData.TableLoadData in project otter by alibaba.
the class DbLoadAction method doLoad.
private void doLoad(final DbLoadContext context, DbLoadData loadData) {
// 优先处理delete,可以利用batch优化
List<List<EventData>> batchDatas = new ArrayList<List<EventData>>();
for (TableLoadData tableData : loadData.getTables()) {
if (useBatch) {
// 优先执行delete语句,针对uniqe更新,一般会进行delete + insert的处理模式,避免并发更新
batchDatas.addAll(split(tableData.getDeleteDatas()));
} else {
// 优先执行delete语句,针对uniqe更新,一般会进行delete + insert的处理模式,避免并发更新
for (EventData data : tableData.getDeleteDatas()) {
batchDatas.add(Arrays.asList(data));
}
}
}
if (context.getPipeline().getParameters().isDryRun()) {
doDryRun(context, batchDatas, true);
} else {
doTwoPhase(context, batchDatas, true);
}
batchDatas.clear();
// 处理下insert/update
for (TableLoadData tableData : loadData.getTables()) {
if (useBatch) {
// 执行insert + update语句
batchDatas.addAll(split(tableData.getInsertDatas()));
// 每条记录分为一组,并行加载
batchDatas.addAll(split(tableData.getUpadateDatas()));
} else {
// 执行insert + update语句
for (EventData data : tableData.getInsertDatas()) {
batchDatas.add(Arrays.asList(data));
}
for (EventData data : tableData.getUpadateDatas()) {
batchDatas.add(Arrays.asList(data));
}
}
}
if (context.getPipeline().getParameters().isDryRun()) {
doDryRun(context, batchDatas, true);
} else {
doTwoPhase(context, batchDatas, true);
}
batchDatas.clear();
}
Aggregations