func NewBaseFeatureView()

in domain/base_feature_view.go [23:132]


func NewBaseFeatureView(view *api.FeatureView, p *Project, entity *FeatureEntity) *BaseFeatureView {
	featureView := &BaseFeatureView{
		FeatureView:   view,
		Project:       p,
		FeatureEntity: entity,
	}
	for _, field := range view.Fields {
		if field.IsEventTime {
			featureView.eventTimeField = *field
			featureView.featureFields = append(featureView.featureFields, field.Name)
		} else if field.IsPartition {
			continue
		} else if field.IsPrimaryKey {
			featureView.primaryKeyField = *field
		} else {
			featureView.featureFields = append(featureView.featureFields, field.Name)
		}
	}

	daoConfig := dao.DaoConfig{
		DatasourceType:    p.OnlineDatasourceType,
		PrimaryKeyField:   featureView.primaryKeyField.Name,
		EventTimeField:    featureView.eventTimeField.Name,
		TTL:               int(featureView.Ttl),
		SaveOriginalField: false,
	}

	if view.WriteToFeatureDB || p.OnlineDatasourceType == constants.Datasource_Type_FeatureDB {
		daoConfig.DatasourceType = constants.Datasource_Type_FeatureDB
		daoConfig.FeatureDBDatabaseName = p.InstanceId
		daoConfig.FeatureDBSchemaName = p.ProjectName
		daoConfig.FeatureDBTableName = featureView.Name
		daoConfig.FeatureDBSignature = p.Signature

		fieldTypeMap := make(map[string]constants.FSType, len(view.Fields))
		for _, field := range view.Fields {
			if field.IsPartition {
				continue
			} else {
				fieldTypeMap[field.Name] = field.Type
			}
		}
		daoConfig.FieldTypeMap = fieldTypeMap
		daoConfig.Fields = featureView.featureFields
	} else {
		switch p.OnlineDatasourceType {
		case constants.Datasource_Type_Hologres:
			daoConfig.HologresTableName = p.OnlineStore.GetTableName(featureView)
			daoConfig.HologresName = p.OnlineStore.GetDatasourceName()
		case constants.Datasource_Type_IGraph:
			if view.Config != "" {
				configM := make(map[string]interface{})
				if err := json.Unmarshal([]byte(view.Config), &configM); err == nil {
					if save_original_field, exist := configM["save_original_field"]; exist {
						if val, ok := save_original_field.(bool); ok {
							daoConfig.SaveOriginalField = val
						}
					}
				}
			}
			daoConfig.IGraphName = p.OnlineStore.GetDatasourceName()
			daoConfig.GroupName = p.ProjectName
			daoConfig.LabelName = p.OnlineStore.GetTableName(featureView)
			fieldMap := make(map[string]string, len(view.Fields))
			fieldTypeMap := make(map[string]constants.FSType, len(view.Fields))
			for _, field := range view.Fields {
				if field.IsPrimaryKey {
					fieldMap[field.Name] = field.Name
					fieldTypeMap[field.Name] = field.Type
				} else if field.IsPartition {
					continue
				} else {
					var name string
					if daoConfig.SaveOriginalField {
						name = field.Name
					} else {
						name = fmt.Sprintf("f%d", field.Position)
					}

					fieldMap[name] = field.Name
					fieldTypeMap[name] = field.Type
				}
			}
			daoConfig.FieldMap = fieldMap
			daoConfig.FieldTypeMap = fieldTypeMap
		case constants.Datasource_Type_TableStore:
			daoConfig.TableStoreTableName = p.OnlineStore.GetTableName(featureView)
			daoConfig.TableStoreName = p.OnlineStore.GetDatasourceName()
			fieldTypeMap := make(map[string]constants.FSType, len(view.Fields))
			for _, field := range view.Fields {
				if field.IsPrimaryKey {
					fieldTypeMap[field.Name] = field.Type
				} else if field.IsPartition {
					continue
				} else {
					fieldTypeMap[field.Name] = field.Type
				}
			}
			daoConfig.FieldTypeMap = fieldTypeMap

		default:

		}
	}

	featureViewDao := dao.NewFeatureViewDao(daoConfig)
	featureView.featureViewDao = featureViewDao

	return featureView
}