
com.huaweicloud.dws.client.op.Operate Maven / Gradle / Ivy
package com.huaweicloud.dws.client.op;
import com.huaweicloud.dws.client.action.PutAction;
import com.huaweicloud.dws.client.collector.ActionCollector;
import com.huaweicloud.dws.client.exception.DwsClientException;
import com.huaweicloud.dws.client.exception.InvalidException;
import com.huaweicloud.dws.client.model.OperationType;
import com.huaweicloud.dws.client.model.Record;
import com.huaweicloud.dws.client.model.TableSchema;
import com.huaweicloud.dws.client.util.AssertUtil;
import com.huaweicloud.dws.client.util.LogUtil;
import com.huaweicloud.dws.client.worker.ExecutionPool;
import lombok.extern.slf4j.Slf4j;
import java.util.Collections;
import java.util.List;
/**
* @ProjectName: dws-connector
* @ClassName: Operate
* @Description: 操作接口定义
* @Date: 2023/1/16 9:27
* @Version: 1.0
*/
@Slf4j
public abstract class Operate {
protected final Record record;
protected final ActionCollector collector;
protected Operate(TableSchema schema, ActionCollector collector, OperationType type) {
this.record = new Record(schema, type, collector.getConfig());
this.collector = collector;
}
/**
* 获取当前操作对应的record
*/
public Record getRecord() {
return this.record;
}
/**
* 设置字段 columnName的字为value, 如果ignoreUpdate == true
* 那么该字段只有在insert时写入数据库,主键冲突时该字段不更新
*/
public Operate setObject(String columnName, Object value, boolean ignoreUpdate) {
Integer index = record.getTableSchema().getColumnIndex(columnName);
AssertUtil.nonNull(index, new InvalidException("can not found column " + columnName));
record.setValue(index, value, ignoreUpdate);
return this;
}
/**
* 直接设置值,缺少校验会提升大数据量时的性能
* @param index
* @param value
* @return
*/
public Operate setObject(int index, Object value, boolean ignoreUpdate) {
record.setValue(index, value, ignoreUpdate);
return this;
}
/**
* 相当于 setObject(String columnName, Object value, boolean ignoreUpdate) 接口 ignoreUpdate=false
*/
public Operate setObject(String columnName, Object value) {
return setObject(columnName, value, false);
}
/**
* 异步提交入库
*/
public void commit() throws DwsClientException {
AssertUtil.isTrue(record.getColumnBit().length() != 0, new InvalidException("must set column"));
collector.collector(record);
collector.getPool().tryException();
}
/**
* 同步提交
*/
public void syncCommit() throws DwsClientException {
List records = Collections.singletonList(record);
PutAction action = new PutAction(records, collector.getConfig());
ExecutionPool pool = collector.getPool();
pool.tryException();
while (!collector.getPool().submit(action)) {
LogUtil.withLogSwitch(collector.getConfig(), () -> log.warn("try submit."));
}
// 等待结果响应后返回
action.getResult();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy