
com.huaweicloud.dws.client.executor.CopyExecutor Maven / Gradle / Ivy
package com.huaweicloud.dws.client.executor;
import com.huawei.gauss200.jdbc.core.BaseConnection;
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.util.JdbcUtil;
import com.huaweicloud.dws.client.util.LogUtil;
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
import java.util.List;
import java.util.stream.Collectors;
/**
* @ProjectName: dws-connector
* @ClassName: CopyExecutor
* @Description: copy执行器
* @Date: 2023/1/17 17:45
* @Version: 1.0
*/
@Slf4j
public class CopyExecutor {
public void execute(List records, Connection connection, String table, DwsConfig config) throws DwsClientException {
if (records == null || records.isEmpty()) {
LogUtil.withLogSwitch(config, () -> log.info("It is intended to execute copy, but the data is null and returned directly"));
return;
}
long startTime = System.currentTimeMillis();
Record first = records.get(0);
TableSchema schema = first.getTableSchema();
List insertColumns = schema.getColumnNames().stream().filter(first::isSet).collect(Collectors.toList());
TableConfig tableConfig = config.getTableConfig(schema.getTableName());
String copySql = JdbcUtil.getCopyFromStdinStatement(table, insertColumns, tableConfig);
String buffer = JdbcUtil.buildCopyBuffer(records, config, tableConfig);
LogUtil.withLogSwitch(config, () -> log.info("Copy data to dws, and sql is {}, data size {} and byte size {}", copySql, records.size(), buffer.length()));
// copy到临时表 或者直接到目标表
try {
JdbcUtil.executeCopy((BaseConnection) connection, copySql, buffer);
log.info("copy successful. table = {}, use time = {}, data size = {}",
schema.getTableName().getFullName(), System.currentTimeMillis() - startTime, records.size());
} catch (Exception e) {
log.error("execute copy fail. sql = {}", copySql, e);
throw DwsClientException.fromException(e);
}
LogUtil.withLogSwitch(config, () -> log.info("Copy data to dws successful,use time {}", System.currentTimeMillis() - startTime));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy