public FeatureResult getFeatures()

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