public SequenceFeatureView()

in src/main/java/com/aliyun/openservices/paifeaturestore/domain/SequenceFeatureView.java [34:237]


    public SequenceFeatureView(com.aliyun.openservices.paifeaturestore.model.FeatureView featureView, Project project, FeatureEntity featureEntity) {
        this.featureView = featureView;
        this.project = project;
        this.featureEntity = featureEntity;
        Gson gson = new Gson();
        this.config=this.jsonToSeqConfig(featureView.getConfig());
        for (FeatureViewRequestFields field : this.featureView.getFields()) {
            if (field.isIsPrimaryKey()) {
                this.userIdField = field.getName();
                break;
            }
        }

        if (StringUtils.isEmpty(this.config.getRegistrationMode())) {
            this.config.setRegistrationMode(ConstantValue.Seq_Registration_Mode_Full_Sequence);
        }
        for (FeatureViewRequestFields field : this.featureView.getFields()) {
            if (field.isIsPartition()) {
                continue;
            } else {
                this.behaviorFields.add(field.getName());
            }
        }

        if (this.config.getRegistrationMode().equals(ConstantValue.Seq_Registration_Mode_Full_Sequence)) {
            for (SeqConfig seqConfig : this.config.getSeqConfigs()) {
                offOnlineSeqMap.put(seqConfig.getOfflineSeqName(), seqConfig.getOnlineSeqName());
            }
            List<SeqConfig> uniqueSeqConfigs = new ArrayList<>();
            Set<String> seenConfig = new HashSet<>();
            for (SeqConfig seqConfig : this.config.getSeqConfigs()) {
                if (!seenConfig.contains(seqConfig.getOnlineSeqName())) {
                    uniqueSeqConfigs.add(seqConfig);
                    seenConfig.add(seqConfig.getOnlineSeqName());
                }
            }
            this.config.setSeqConfigs(uniqueSeqConfigs.toArray(new SeqConfig[0]));
        }

        String[] s1={"user_id","item_id","event"};
        String[] s2={"user_id","item_id","event","timestamp"};
        int i=0;
        if (this.config.getDeduplicationMethod().length==s1.length) {
            for (String methodname:this.config.getDeduplicationMethod()) {
                if (!methodname.equals(s1[i])) {
                    throw new RuntimeException("deduplication_method invalid");
                }
                i++;
            }
            this.config.setDeduplicationMethodNum(1);
        } else if (this.config.getDeduplicationMethod().length==s2.length) {
            for (String methodname:this.config.getDeduplicationMethod()) {
                if (!methodname.equals(s2[i])) {
                    throw new RuntimeException("deduplication_method invalid");
                }
                i++;
            }
            this.config.setDeduplicationMethodNum(2);
        } else {
            throw new RuntimeException("deduplication_method invalid");
        }

        DaoConfig daoConfig = new DaoConfig();
        daoConfig.datasourceType = project.getProject().getOnlineDatasourceType();
        daoConfig.primaryKeyField=this.userIdField;

        Map<String, FSType> fieldTypeMap2 = new HashMap<>();
        for (FeatureViewRequestFields field : featureView.getFields()) {
            if (field.isIsPrimaryKey()) {
                fieldTypeMap2.put(field.getName(), field.getType());
            } else if (field.isIsPartition()) {
                continue;
            } else {
                fieldTypeMap2.put(field.getName(), field.getType());
            }
        }
        daoConfig.fieldTypeMap = fieldTypeMap2;

        if (null != featureView.getWriteToFeaturedb() &&  featureView.getWriteToFeaturedb() || project.getProject().getOnlineDatasourceType().equals(DatasourceType.Datasource_Type_FeatureDB)) {
            //throw  new RuntimeException("sequence feature view not support featuredb yet");
            daoConfig.datasourceType = DatasourceType.Datasource_Type_FeatureDB;
            daoConfig.featureDBName = project.getFeatureDBName();
            daoConfig.featureDBDatabase = project.getProject().getInstanceId();
            daoConfig.featureDBSchema = project.getProject().getProjectName();
            if (this.config.getReferencedFeatureViewId() == 0) {
                daoConfig.featureDBTable = featureView.getName();
            } else {
                daoConfig.featureDBTable = this.config.getReferencedFeatureViewName();
            }
            daoConfig.fields = this.behaviorFields;
        }else {
            if (this.config.getReferencedFeatureViewId() == 0) {
                switch (project.getProject().getOnlineDatasourceType()) {
                    case Datasource_Type_Hologres:
                        daoConfig.hologresName = project.getOnlineStore().getDatasourceName();
                        daoConfig.hologresSeqOfflineTableName = project.getOnlineStore().getSeqOfflineTableName(this);
                        daoConfig.hologresSeqOnlineTableName = project.getOnlineStore().getSeqOnlineTableName(this);
                        break;
                    case Datasource_Type_IGraph:
                        if (!StringUtils.isEmpty(featureView.getConfig())) {
                            Map map = gson.fromJson(featureView.getConfig(), Map.class);
                            if (map.containsKey("save_original_field")) {
                                if (map.get("save_original_field") instanceof Boolean) {
                                    daoConfig.saveOriginalField = (Boolean) map.get("save_original_field");
                                }
                            }
                        }

                        daoConfig.iGraphName = project.getOnlineStore().getDatasourceName();
                        daoConfig.groupName = project.getProject().getProjectName();
                        daoConfig.igraphEdgeName = project.getOnlineStore().getSeqOnlineTableName(this);
                        Map<String, String> fieldMap = new HashMap<>();
                        Map<String, FSType> fieldTypeMap = new HashMap<>();
                        for (FeatureViewRequestFields field : featureView.getFields()) {
                            if (field.isIsPrimaryKey()) {
                                fieldMap.put(field.getName(), field.getName());
                                fieldTypeMap.put(field.getName(), field.getType());
                            } else if (field.isIsPartition()) {
                                continue;
                            } else {
                                String name;
                                if (daoConfig.saveOriginalField) {
                                    name = field.getName();
                                } else {
                                    name = String.format("f%d", field.getPosition());
                                }

                                fieldMap.put(name, field.getName());
                                fieldTypeMap.put(name, field.getType());
                            }
                        }

                        daoConfig.fieldMap = fieldMap;
                        daoConfig.fieldTypeMap = fieldTypeMap;
                        break;
                    case Datasource_Type_TableStore:
                        daoConfig.otsName = project.getOnlineStore().getDatasourceName();
                        daoConfig.otsSeqOnlineTableName = project.getOnlineStore().getSeqOnlineTableName(this);
                        daoConfig.otsSeqOfflineTableName = project.getOnlineStore().getSeqOfflineTableName(this);
                        break;
                    default:
                        break;
                }
            } else {
                SequenceFeatureView referencedFeatureView = project.getSeqFeatureView(this.config.getReferencedFeatureViewName());
                if (referencedFeatureView == null) {
                    throw  new RuntimeException("referenced feature view not found");
                }
                switch (project.getProject().getOnlineDatasourceType()) {
                    case Datasource_Type_Hologres:
                        daoConfig.hologresName = project.getOnlineStore().getDatasourceName();
                        daoConfig.hologresSeqOfflineTableName = project.getOnlineStore().getSeqOfflineTableName(referencedFeatureView);
                        daoConfig.hologresSeqOnlineTableName = project.getOnlineStore().getSeqOnlineTableName(referencedFeatureView);
                        break;
                    case Datasource_Type_IGraph:
                        if (!StringUtils.isEmpty(referencedFeatureView.getFeatureView().getConfig())) {
                            Map map = gson.fromJson(referencedFeatureView.getFeatureView().getConfig(), Map.class);
                            if (map.containsKey("save_original_field")) {
                                if (map.get("save_original_field") instanceof Boolean) {
                                    daoConfig.saveOriginalField = (Boolean) map.get("save_original_field");
                                }
                            }
                        }

                        daoConfig.iGraphName = project.getOnlineStore().getDatasourceName();
                        daoConfig.groupName = project.getProject().getProjectName();
                        daoConfig.igraphEdgeName = project.getOnlineStore().getSeqOnlineTableName(referencedFeatureView);
                        Map<String, String> fieldMap = new HashMap<>();
                        Map<String, FSType> fieldTypeMap = new HashMap<>();
                        for (FeatureViewRequestFields field : featureView.getFields()) {
                            if (field.isIsPrimaryKey()) {
                                fieldMap.put(field.getName(), field.getName());
                                fieldTypeMap.put(field.getName(), field.getType());
                            } else if (field.isIsPartition()) {
                                continue;
                            } else {
                                String name;
                                if (daoConfig.saveOriginalField) {
                                    name = field.getName();
                                } else {
                                    name = String.format("f%d", field.getPosition());
                                }

                                fieldMap.put(name, field.getName());
                                fieldTypeMap.put(name, field.getType());
                            }
                        }

                        daoConfig.fieldMap = fieldMap;
                        daoConfig.fieldTypeMap = fieldTypeMap;
                        break;
                    case Datasource_Type_TableStore:
                        daoConfig.otsName = project.getOnlineStore().getDatasourceName();
                        daoConfig.otsSeqOnlineTableName = project.getOnlineStore().getSeqOnlineTableName(referencedFeatureView);
                        daoConfig.otsSeqOfflineTableName = project.getOnlineStore().getSeqOfflineTableName(referencedFeatureView);
                        break;
                    default:
                        break;
                }

            }
        }
        featureViewDao = FeatureViewDaoFactory.getFeatureViewDao(daoConfig);
    }