use of com.aliyun.openservices.ots.model.GetRangeResult in project DataX by alibaba.
the class OtsReaderSlaveProxy method generateRequestItem.
private RequestItem generateRequestItem(OTSClientAsync ots, OTSConf conf, RowPrimaryKey begin, RowPrimaryKey end, Direction direction, List<String> columns) throws Exception {
RangeRowQueryCriteria criteria = generateRangeRowQueryCriteria(conf.getTableName(), begin, end, direction, columns);
GetRangeRequest request = new GetRangeRequest();
request.setRangeRowQueryCriteria(criteria);
OTSFuture<GetRangeResult> future = ots.getRange(request);
return new RequestItem(criteria, future);
}
use of com.aliyun.openservices.ots.model.GetRangeResult in project DataX by alibaba.
the class OtsReaderSlaveProxy method read.
public void read(RecordSender sender, Configuration configuration) throws Exception {
LOG.info("read begin.");
OTSConf conf = GsonParser.jsonToConf(configuration.getString(OTSConst.OTS_CONF));
OTSRange range = GsonParser.jsonToRange(configuration.getString(OTSConst.OTS_RANGE));
Direction direction = GsonParser.jsonToDirection(configuration.getString(OTSConst.OTS_DIRECTION));
OTSServiceConfiguration configure = new OTSServiceConfiguration();
configure.setRetryStrategy(new DefaultNoRetry());
OTSClientAsync ots = new OTSClientAsync(conf.getEndpoint(), conf.getAccessId(), conf.getAccesskey(), conf.getInstanceName(), null, configure, null);
RowPrimaryKey token = range.getBegin();
List<String> columns = Common.getNormalColumnNameList(conf.getColumns());
RequestItem request = null;
do {
LOG.debug("Next token : {}", GsonParser.rowPrimaryKeyToJson(token));
if (request == null) {
request = generateRequestItem(ots, conf, token, range.getEnd(), direction, columns);
} else {
RequestItem req = request;
GetRangeResult result = RetryHelper.executeWithRetry(new GetRangeCallable(ots, req.getCriteria(), req.getFuture()), conf.getRetry(), conf.getSleepInMilliSecond());
if ((token = result.getNextStartPrimaryKey()) != null) {
request = generateRequestItem(ots, conf, token, range.getEnd(), direction, columns);
}
rowsToSender(result.getRows(), sender, conf.getColumns());
}
} while (token != null);
ots.shutdown();
LOG.info("read end.");
}
use of com.aliyun.openservices.ots.model.GetRangeResult in project DataX by alibaba.
the class GetFirstRowPrimaryKeyCallable method call.
@Override
public RowPrimaryKey call() throws Exception {
RowPrimaryKey ret = new RowPrimaryKey();
GetRangeRequest request = new GetRangeRequest();
request.setRangeRowQueryCriteria(criteria);
GetRangeResult result = ots.getRange(request);
List<Row> rows = result.getRows();
if (rows.isEmpty()) {
// no data
return null;
}
Row row = rows.get(0);
Map<String, PrimaryKeyType> pk = meta.getPrimaryKey();
for (String key : pk.keySet()) {
ColumnValue v = row.getColumns().get(key);
if (v.getType() == ColumnType.INTEGER) {
ret.addPrimaryKeyColumn(key, PrimaryKeyValue.fromLong(v.asLong()));
} else {
ret.addPrimaryKeyColumn(key, PrimaryKeyValue.fromString(v.asString()));
}
}
return ret;
}
Aggregations