El FeatureStore SDK para Go permite recuperar datos de funciones desde almacenes de datos en línea durante la inference del modelo, incluidas funciones sin conexión, funciones en tiempo real y funciones de secuencia.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un proyecto de FeatureStore, entidades de funciones, vistas de funciones y funciones de modelo creados, con datos sincronizados entre los almacenes en línea y sin conexión. Consulte Configure FeatureStore projects.
Un AccessKey ID y un AccessKey secret. Consulte Create an AccessKey pair.
Su aplicación ejecutándose dentro de una Virtual Private Cloud (VPC). El cliente de FeatureStore se conecta a los almacenes de datos en línea mediante una VPC; por ejemplo, Hologres solo es accesible a través de una VPC específica.
Almacene su AccessKey ID y AccessKey secret como variables de entorno en lugar de codificarlos directamente en el código. Consulte Configure environment variables.
Instalar el SDK
go get github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2
Primeros pasos
Paso 1: Inicializar el cliente de FeatureStore
API
func NewFeatureStoreClient(regionId, accessKeyId, accessKeySecret, projectName string, opts ...ClientOption) (*FeatureStoreClient, error)
|
Parameter |
Description |
|
|
La región donde reside la instancia |
|
|
El AccessKey ID usado para acceder a los servicios de almacenamiento |
|
|
El AccessKey secret usado para acceder a los servicios de almacenamiento |
|
|
El nombre del proyecto de FeatureStore creado en la consola de Platform for AI (PAI) |
Ejemplo
accessId := os.Getenv("AccessId")
accessKey := os.Getenv("AccessKey")
client, err := featurestore.NewFeatureStoreClient("cn-beijing", accessId, accessKey, "project_name")
Paso 2: Recuperar datos de funciones desde una vista de funciones
Use GetOnlineFeatures para obtener funciones de una vista de funciones mediante el join ID (clave primaria).
API
GetOnlineFeatures(joinIds []interface{}, features []string, alias map[string]string) ([]map[string]interface{}, error)
Parámetro | Descripción | |
| Los join IDs (claves primarias) de las funciones por recuperar | |
| Los nombres de las funciones por recuperar. Use | |
| Alias para las funciones recuperadas. No aplica a las vistas de funciones de secuencia | |
Ejemplo
// Get project by name
project, err := client.GetProject("project_name")
if err != nil {
// t.Fatal(err)
}
// Get feature view by name
user_feature_view := project.GetFeatureView("feature_view_name")
if user_feature_view == nil {
// t.Fatal("feature view not exist")
}
// Retrieve features for two keys
features, err := user_feature_view.GetOnlineFeatures([]interface{}{"key1", "key2"}, []string{"*"}, nil)
Respuesta: vista de funciones sin conexión o en tiempo real
Cada elemento de la respuesta corresponde a un join ID. Los campos sin datos en el almacén de datos en línea devuelven una cadena vacía.
[
{
"city": "Hefei",
"follow_cnt": 1,
"gender": "male",
"user_id": "100043186"
},
{
"city": "",
"follow_cnt": 5,
"gender": "male",
"user_id": "100060369"
}
]
Respuesta: vista de funciones de secuencia
Las funciones de secuencia se devuelven como cadenas delimitadas por punto y coma. Cada campo de sufijo (__event, __event_time, __item_id, __playtime, __ts) contiene los valores de atributo correspondientes en el mismo orden que la secuencia de funciones.
El siguiente ejemplo usa esta configuración de funciones de secuencia:
|
Offline sequence feature field |
Event name |
Sequence length |
Online sequence feature name |
|
click_seq_50_seq |
click |
50 |
click_seq_50_seq |
|
expr_seq_100_seq |
expr |
100 |
expr_seq_100 |
[
{
"click_seq_50_seq": "216751275;228787053;220852269;242884721",
"click_seq_50_seq__event": "click;click;click;click",
"click_seq_50_seq__event_time": "1699128398;1699128398;1699118623;1699118623",
"click_seq_50_seq__item_id": "216751275;228787053;220852269;242884721",
"click_seq_50_seq__playtime": "65.40;72.06;104.69;62.74",
"click_seq_50_seq__ts": "389018;389018;398793;398793",
"expr_seq_100": "207474427;216751275;228787053;247136848;270584471;299485479;220852269;242884721;245999124;265863707",
"expr_seq_100__event": "expr;expr;expr;expr;expr;expr;expr;expr;expr;expr",
"expr_seq_100__event_time": "1699128398;1699128398;1699128398;1699128398;1699128398;1699128398;1699118623;1699118623;1699118623;1699118623",
"expr_seq_100__item_id": "207474427;216751275;228787053;247136848;270584471;299485479;220852269;242884721;245999124;265863707",
"expr_seq_100__playtime": "0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00",
"expr_seq_100__ts": "389018;389018;389018;389018;389018;389018;398793;398793;398793;398793",
"user_id": "186569075"
},
{
"click_seq_50_seq": "201741544;236327912;293320498",
"click_seq_50_seq__event": "click;click;click",
"click_seq_50_seq__event_time": "1699178245;1699178245;1699178245",
"click_seq_50_seq__item_id": "201741544;236327912;293320498",
"click_seq_50_seq__playtime": "97.41;70.32;135.21",
"click_seq_50_seq__ts": "339171;339171;339171",
"expr_seq_100": "201741544;224940066;236327912;240253906;247562151;293320498",
"expr_seq_100__event": "expr;expr;expr;expr;expr;expr",
"expr_seq_100__event_time": "1699178245;1699178245;1699178245;1699178245;1699178245;1699178245",
"expr_seq_100__item_id": "201741544;224940066;236327912;240253906;247562151;293320498",
"expr_seq_100__playtime": "0.00;0.00;0.00;0.00;0.00;0.00",
"expr_seq_100__ts": "339171;339171;339171;339171;339171;339171",
"user_id": "186569870"
}
]
Paso 3: Recuperar datos de funciones desde funciones de modelo
Cada función de modelo puede asociarse con varias entidades de funciones. Use GetOnlineFeatures para recuperar todas las funciones de entidad simultáneamente, o bien GetOnlineFeaturesWithEntity para recuperar las funciones de una entidad específica.
API
// Retrieve features for all entities
GetOnlineFeatures(joinIds map[string][]interface{}) ([]map[string]interface{}, error)
// Retrieve features for a specific entity
GetOnlineFeaturesWithEntity(joinIds map[string][]interface{}, featureEntityName string) ([]map[string]interface{}, error)
Parámetro | Descripción | |
| Un mapa de nombres de join ID a sus valores. Especifique todos los join IDs configurados para la función de modelo | |
| El nombre de la entidad de funciones cuyas funciones se van a recuperar | |
Ejemplo
Una función de modelo puede asociarse con varias entidades de funciones. El siguiente ejemplo especifica dos join IDs —user_id y item_id— que coinciden con la configuración de la función de modelo.
// Get project by name
project, err := client.GetProject("fs_test_ots")
if err != nil {
// t.Fatal(err)
}
// Get model feature by name
model_feature := project.GetModelFeature("rank")
if model_feature == nil {
// t.Fatal("model feature not exist")
}
// Retrieve features for all configured join IDs
features, err := model_feature.GetOnlineFeatures(map[string][]interface{}{"user_id": {"100000676", "100004208"}, "item_id": {"238038872", "264025480"}})
Para recuperar funciones únicamente de una entidad específica:
features, err := model_feature.GetOnlineFeaturesWithEntity(map[string][]interface{}{"user_id": {"100000676", "100004208"}}, "user")
Respuesta: funciones de modelo sin funciones de secuencia
[
{
"age": 26,
"city": "Shenyang",
"gender": "male",
"user_id": "100000676"
},
{
"age": 23,
"city": "Xi'an",
"gender": "male",
"user_id": "100004208"
}
]
Respuesta: funciones de modelo con funciones de secuencia
Al registrar funciones de modelo, puede incluir funciones de secuencia sin conexión para el entrenamiento del modelo. Dichas funciones de secuencia se sincronizan con el almacén de datos en línea y se devuelven junto con las funciones regulares.
La entidad de secuencia suele ser el usuario. El siguiente ejemplo usa esta configuración de funciones de secuencia:
|
Offline sequence feature field |
Event name |
Sequence length |
Online sequence feature name |
|
click_seq_50_seq |
click |
50 |
click_seq_50_seq |
[
{
"age": 51,
"author": 147848300,
"category": "7",
"city": "",
"click_count": 0,
"click_seq_50_seq": "216751275;228787053;220852269;242884721",
"click_seq_50_seq__event": "click;click;click;click",
"click_seq_50_seq__event_time": "1699128398;1699128398;1699118623;1699118623",
"click_seq_50_seq__item_id": "216751275;228787053;220852269;242884721",
"click_seq_50_seq__playtime": "65.40;72.06;104.69;62.74",
"click_seq_50_seq__ts": "391447;391447;401222;401222",
"duration": 48,
"follow_cnt": 2,
"follower_cnt": 0,
"gender": "female",
"item_cnt": 0,
"item_id": 299485479,
"praise_count": 2,
"pub_time": 1697885713,
"register_time": 1696582012,
"tags": "0",
"title": "#Workout tracking",
"user_id": "186569075"
},
{
"age": 28,
"author": 119734983,
"category": "18",
"city": "",
"click_count": 0,
"click_seq_50_seq": "201741544;236327912;293320498",
"click_seq_50_seq__event": "click;click;click",
"click_seq_50_seq__event_time": "1699178245;1699178245;1699178245",
"click_seq_50_seq__item_id": "201741544;236327912;293320498",
"click_seq_50_seq__playtime": "97.41;70.32;135.21",
"click_seq_50_seq__ts": "341600;341600;341600",
"duration": 15,
"follow_cnt": 0,
"follower_cnt": 2,
"gender": "male",
"item_cnt": 0,
"item_id": 207474427,
"praise_count": 79,
"pub_time": 1697731285,
"register_time": 1699135393,
"tags": "1",
"title": "#Idiom story",
"user_id": "186569870"
}
]