All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.huaweicloud.dws.client.executor.CopyUpdateExecutor Maven / Gradle / Ivy

package com.huaweicloud.dws.client.executor;

import com.huaweicloud.dws.client.DwsConfig;
import com.huaweicloud.dws.client.TableConfig;
import com.huaweicloud.dws.client.exception.DwsClientException;
import com.huaweicloud.dws.client.model.Record;
import com.huaweicloud.dws.client.model.TableSchema;
import com.huaweicloud.dws.client.model.WriteMode;
import com.huaweicloud.dws.client.worker.ConnectionProvider;
import lombok.extern.slf4j.Slf4j;

import java.sql.Connection;
import java.util.List;

/**
 * @ProjectName: dws-connector
 * @ClassName: CopyUpdateExecutor
 * @Description: copy update 实现
 * @Date: 2023/3/15 12:00
 * @Version: 1.0
 */
@Slf4j
public class CopyUpdateExecutor extends CopyMergeExecutor {

    private final UpdateFromExecutor updateFromExecutor = new UpdateFromExecutor();
    private final UpdateExecutor updateExecutor = new UpdateExecutor();

    public CopyUpdateExecutor(ConnectionProvider connectionProvider) {
        super(connectionProvider);
    }

    @Override
    public void execute(List records, Connection connection, DwsConfig config) throws DwsClientException {
        Record first = records.get(0);
        TableSchema schema = first.getTableSchema();
        TableConfig tableConfig = config.getTableConfig(schema.getTableName());
        boolean useUpdate = WriteMode.UPDATE_AUTO.equals(tableConfig.getWriteMode()) && records.size() < tableConfig.getCopyWriteBatchSize();
        if (WriteMode.UPDATE.equals(tableConfig.getWriteMode()) || useUpdate) {
            // 当指定用update时 或者自动模式下数据量较小时采用update方式入库
            updateExecutor.execute(records, connection, config);
            return;
        }
        // 走copy到临时表 然后从临时表update入库
        super.execute(records, connection, config);
    }

    @Override
    protected void storeTarget(List records, Connection connection, DwsConfig config, TableSchema schema, String copyTable) throws DwsClientException {
        updateFromExecutor.execute(records, connection, config, schema.getTableName().getFullName(), copyTable);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy