public FeatureResult doGetFeatures()

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;
    }