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

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

package com.huaweicloud.dws.client.executor;

import com.huaweicloud.dws.client.DwsConfig;
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.util.JdbcUtil;
import com.huaweicloud.dws.client.util.LogUtil;
import lombok.extern.slf4j.Slf4j;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @ProjectName: dws-connector
 * @ClassName: UpdateExecutor
 * @Description: 基于主键更新实现
 * @Date: 2023/3/15 11:44
 * @Version: 1.0
 */
@Slf4j
public class UpdateExecutor {

    public void execute(List records, Connection connection, DwsConfig config) throws DwsClientException {
        if (records == null || records.isEmpty()) {
            return;
        }
        long start = System.currentTimeMillis();
        Record first = records.get(0);
        TableSchema schema = first.getTableSchema();
        List keys = schema.getPrimaryKeyNames();
        List columns = schema.getColumnNames().stream().filter(c -> first.isSet(c) && !keys.contains(c)).collect(Collectors.toList());
        String sql = JdbcUtil.getUpdateStatement(schema.getTableName().getFullName(), columns, keys);
        LogUtil.withLogSwitch(config, () -> log.info("update sql {}", sql));
        List list = new LinkedList<>();
        list.addAll(columns);
        list.addAll(keys);
        try {
            JdbcUtil.executeBatchRecordSql(records, connection, schema, list, sql, config);
            log.info("update successful. table = {}, use time = {}, data size = {}",
                    schema.getTableName().getFullName(), System.currentTimeMillis() - start, records.size());
        } catch (SQLException e) {
            log.error("update executor execute fail. sql = {}, error = {}", sql, e.getMessage());
            throw DwsClientException.fromException(e);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy