Todos los productos
Search
Centro de documentos

Platform For AI:FeatureStore SDK para Go

Última actualización: Sep 04, 2026

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

regionId

La región donde reside la instancia

accessKeyId

El AccessKey ID usado para acceder a los servicios de almacenamiento

accessKeySecret

El AccessKey secret usado para acceder a los servicios de almacenamiento

projectName

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

joinIds

Los join IDs (claves primarias) de las funciones por recuperar

features

Los nombres de las funciones por recuperar. Use []string{"*"} para recuperar todas las funciones de la vista de funciones

alias

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

joinIds

Un mapa de nombres de join ID a sus valores. Especifique todos los join IDs configurados para la función de modelo

featureEntityName

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"
  }
]