in src/main/java/com/aliyun/openservices/paifeaturestore/dao/FeatureViewTableStoreDao.java [94:170]
public FeatureResult doGetFeatures(List<String> keys, String[] selectFields) {
List<Map<String, Object>> featureDataList = new ArrayList<>();
BatchGetRowRequest batchGetRowRequest = new BatchGetRowRequest();
MultiRowQueryCriteria multiRowQueryCriteria = new MultiRowQueryCriteria(this.table);
for (String key : keys) {
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
switch (this.fieldTypeMap.get(this.primaryKeyField)) {
case FS_STRING:
primaryKeyBuilder.addPrimaryKeyColumn(this.primaryKeyField, PrimaryKeyValue.fromString(key));
break;
case FS_INT32:
case FS_INT64:
primaryKeyBuilder.addPrimaryKeyColumn(this.primaryKeyField, PrimaryKeyValue.fromLong(Long.valueOf(key)));
break;
default:
throw new RuntimeException("primary key type is not supported by OTS");
}
multiRowQueryCriteria.addRow(primaryKeyBuilder.build());
multiRowQueryCriteria.setMaxVersions(1);
multiRowQueryCriteria.addColumnsToGet(selectFields);
}
multiRowQueryCriteria.setTableName(this.table);
batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria);
BatchGetRowResponse getRowResponse = this.syncClient.batchGetRow(batchGetRowRequest);
for (BatchGetRowResponse.RowResult rowResult : getRowResponse.getBatchGetRowResult(this.table)) {
Map<String, Object> featureMap = new HashMap<>();
if (!rowResult.isSucceed() || rowResult.getRow() == null ) {
continue;
}
switch (this.fieldTypeMap.get(this.primaryKeyField)) {
case FS_STRING:
featureMap.put(this.primaryKeyField, rowResult.getRow().getPrimaryKey().getPrimaryKeyColumn(this.primaryKeyField).getValue().asString());
break;
case FS_INT32:
case FS_INT64:
featureMap.put(this.primaryKeyField, rowResult.getRow().getPrimaryKey().getPrimaryKeyColumn(this.primaryKeyField).getValue().asLong());
break;
}
for (String featureName : selectFields) {
List<Column> columns = rowResult.getRow().getColumn(featureName);
if (columns == null || columns.size() == 0) {
continue;
}
switch (this.fieldTypeMap.get(featureName)) {
case FS_STRING:
case FS_TIMESTAMP:
featureMap.put(featureName, columns.get(0).getValue().asString());
break;
case FS_FLOAT:
case FS_DOUBLE:
featureMap.put(featureName, columns.get(0).getValue().asDouble());
break;
case FS_INT32:
case FS_INT64:
featureMap.put(featureName, columns.get(0).getValue().asLong());
break;
case FS_BOOLEAN:
featureMap.put(featureName, columns.get(0).getValue().asBoolean());
break;
}
}
featureDataList.add(featureMap);
}
FeatureStoreResult featureResult = new FeatureStoreResult();
//featureResult.setFeatureFields(selectFields);
//featureResult.setFeatureFieldTypeMap(this.fieldTypeMap);
featureResult.setFeatureDataList(featureDataList);
return featureResult;
}