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