in src/main/java/com/aliyun/openservices/paifeaturestore/dao/FeatureViewHologresDao.java [63:139]
public FeatureResult getFeatures(String[] keys, String[] selectFields) {
FeatureStoreResult featureResult = new FeatureStoreResult();
List<Map<String, Object>> featuresList = new ArrayList<>();
List<Field> fields = new ArrayList<>();
for (String f : selectFields) {
fields.add(field(String.format("\"%s\"", f)));//添加要显示的字段
}
DSLContext dsl = DSL.using(SQLDialect.POSTGRES);
Query query=dsl
.select(fields)
.from(table(table))
.where(field(String.format("\"%s\"",this.primaryKeyField)).in(keys));
String sql = query.getSQL();
try (Connection connection = this.datasource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
int pos = 1;
for (String key : keys) {
if (this.fieldTypeMap.get(this.primaryKeyField) == FSType.FS_STRING) {
statement.setString(pos++, key);
} else if (this.fieldTypeMap.get(this.primaryKeyField) == FSType.FS_INT64) {
statement.setLong(pos++, Long.valueOf(key));
} else if (this.fieldTypeMap.get(this.primaryKeyField) == FSType.FS_INT32) {
statement.setInt(pos++, Integer.valueOf(key));
} else {
statement.setString(pos++, key);
}
}
try (ResultSet result = statement.executeQuery()) {//Execute query statement
while (result.next()) {
Map<String, Object> featureMap = new HashMap<>();
for (String featureName : selectFields) {
if (null == result.getObject(featureName)) {
featureMap.put(featureName, null);
continue;
}
switch (this.fieldTypeMap.get(featureName)) {
case FS_STRING:
featureMap.put(featureName, result.getString(featureName));
break;
case FS_FLOAT:
featureMap.put(featureName, result.getFloat(featureName));
break;
case FS_INT32:
featureMap.put(featureName, result.getInt(featureName));
break;
case FS_INT64:
featureMap.put(featureName, result.getLong(featureName));
break;
case FS_DOUBLE:
featureMap.put(featureName, result.getDouble(featureName));
break;
case FS_BOOLEAN:
featureMap.put(featureName, result.getBoolean(featureName));
break;
case FS_TIMESTAMP:
featureMap.put(featureName, result.getTimestamp(featureName));
break;
}
}
featuresList.add(featureMap);
}
}
} catch (Exception e) {
log.error("getFeatures from hologres error", e);
throw new RuntimeException(e);
}
featureResult.setFeatureFields(selectFields);
featureResult.setFeatureFieldTypeMap(this.fieldTypeMap);
featureResult.setFeatureDataList(featuresList);
return featureResult;
}