すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:FeatureStore SDK for Go

最終更新日:Jul 14, 2026

FeatureStore SDK for Go を使用すると、モデル推論中にオンラインデータストアから特徴量データを取得できます。これには、オフライン特徴量、リアルタイム特徴量、シーケンス特徴量が含まれます。

前提条件

開始する前に、以下を準備してください。

  • FeatureStore プロジェクト、特徴量エンティティ、特徴量ビュー、およびモデル特徴量が作成され、オンラインストアとオフラインストア間でデータが同期されていること。詳細については、「FeatureStore プロジェクトの構成」をご参照ください。

  • AccessKey ID と AccessKey Secret。詳細については、「AccessKey ペアの作成」をご参照ください。

  • ご利用のアプリケーションが VPC 内で実行されていること。FeatureStore クライアントは VPC 経由でオンラインデータストアに接続します。たとえば、Hologres は特定の VPC 経由でのみアクセス可能です。

AccessKey ID と AccessKey Secret は、コードにハードコーディングする代わりに環境変数として保存してください。詳細については、「環境変数の構成」をご参照ください。

SDK のインストール

go get github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2

はじめに

ステップ 1: FeatureStore クライアントの初期化

API

func NewFeatureStoreClient(regionId, accessKeyId, accessKeySecret, projectName string, opts ...ClientOption) (*FeatureStoreClient, error)
パラメータ説明
regionIdインスタンスが存在するリージョン
accessKeyIdストレージサービスへのアクセスに使用される AccessKey ID
accessKeySecretストレージサービスへのアクセスに使用される AccessKey Secret
projectNamePlatform for AI (PAI) コンソールで作成された FeatureStore プロジェクトの名前

accessId := os.Getenv("AccessId")
accessKey := os.Getenv("AccessKey")

client, err := featurestore.NewFeatureStoreClient("cn-beijing", accessId, accessKey, "project_name")

ステップ 2: 特徴量ビューからの特徴量データの取得

GetOnlineFeatures を使用して、ジョイン ID (プライマリキー) で特徴量ビューから特徴量をフェッチします。

API

GetOnlineFeatures(joinIds []interface{}, features []string, alias map[string]string) ([]map[string]interface{}, error)
パラメータ説明
joinIds取得する特徴量のジョイン ID (プライマリキー)
features取得する特徴量名。[]string{"*"} を使用して、特徴量ビュー内のすべての特徴量を取得します。
alias取得した特徴量のエイリアス。シーケンス特徴量ビューには適用されません。

// 名前でプロジェクトを取得
project, err := client.GetProject("project_name")
if err != nil {
    // t.Fatal(err)
}

// 名前で特徴量ビューを取得
user_feature_view := project.GetFeatureView("feature_view_name")
if user_feature_view == nil {
    // t.Fatal("特徴量ビューが存在しません")
}

// 2つのキーの特徴量を取得
features, err := user_feature_view.GetOnlineFeatures([]interface{}{"key1", "key2"}, []string{"*"}, nil)

応答: オフラインまたはリアルタイムの特徴量ビュー

応答内の各要素は、1つのジョイン ID に対応します。オンラインデータストアにデータがないフィールドは、空の文字列を返します。

[
    {
        "city": "Hefei",
        "follow_cnt": 1,
        "gender": "male",
        "user_id": "100043186"
    },
    {
        "city": "",
        "follow_cnt": 5,
        "gender": "male",
        "user_id": "100060369"
    }
]

応答: シーケンス特徴量ビュー

シーケンス特徴量は、セミコロン区切りの文字列として返されます。各サフィックスフィールド (__event__event_time__item_id__playtime__ts) は、特徴量シーケンスと同じ順序で対応する属性値を保持します。

次の例では、このシーケンス特徴量構成を使用します。

オフラインシーケンス特徴量フィールドイベント名シーケンス長オンラインシーケンス特徴量名
click_seq_50_seqclick50click_seq_50_seq
expr_seq_100_seqexpr100expr_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"
  }
]

ステップ 3:モデル特徴量から特徴量データを取得

各モデル特徴量は、複数の特徴量エンティティに関連付けられます。GetOnlineFeatures を使用して、すべてのエンティティの特徴量を一度に取得するか、GetOnlineFeaturesWithEntity を使用して特定のエンティティの特徴量のみを取得します。

API

// すべてのエンティティの特徴量を取得
GetOnlineFeatures(joinIds map[string][]interface{}) ([]map[string]interface{}, error)

// 特定のエンティティの特徴量を取得
GetOnlineFeaturesWithEntity(joinIds map[string][]interface{}, featureEntityName string) ([]map[string]interface{}, error)
パラメーター説明
joinIds結合 ID 名とその値のマップです。モデル特徴量に対して構成されたすべての結合 ID を指定します。
featureEntityName取得対象の特徴量を含む特徴量エンティティの名前です。

モデル特徴量は複数の特徴量エンティティに関連付けられます。以下の例では、モデル特徴量の構成に一致する 2 つの結合 ID — user_id および item_id — を指定しています。

// プロジェクト名でプロジェクトを取得
project, err := client.GetProject("fs_test_ots")
if err != nil {
    // t.Fatal(err)
}

// モデル特徴量名でモデル特徴量を取得
model_feature := project.GetModelFeature("rank")
if model_feature == nil {
    // t.Fatal("model feature not exist")
}

// 構成済みのすべての結合 ID の特徴量を取得
features, err := model_feature.GetOnlineFeatures(map[string][]interface{}{"user_id": {"100000676", "100004208"}, "item_id": {"238038872", "264025480"}})

特定のエンティティの特徴量のみを取得するには、次のようにします。

features, err := model_feature.GetOnlineFeaturesWithEntity(map[string][]interface{}{"user_id": {"100000676", "100004208"}}, "user")

レスポンス:シーケンス特徴量を含まないモデル特徴量

[
    {
        "age": 26,
        "city": "Shenyang",
        "gender": "male",
        "user_id": "100000676"
    },
    {
        "age": 23,
        "city": "Xi'an",
        "gender": "male",
        "user_id": "100004208"
    }
]

レスポンス:シーケンス特徴量を含むモデル特徴量

モデル特徴量を登録する際、モデルトレーニング用のオフラインシーケンス特徴量を含めることができます。これらのシーケンス特徴量はオンラインデータストアに同期され、通常の特徴量とともに返されます。

シーケンスエンティティは通常ユーザーです。以下の例では、このシーケンス特徴量の構成を使用しています。

オフラインシーケンス特徴量フィールドイベント名シーケンス長オンラインシーケンス特徴量名
click_seq_50_seqclick50click_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"
  }
]