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

Platform For AI:FeatureStore SDK for Go

最終更新日:Aug 01, 2024

このトピックでは、FeatureStore SDK for Goを使用して、オフライン機能、リアルタイム機能、シーケンス機能などのオンラインデータストアからデータを読み取る方法について説明します。

前提条件

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

  • AccessKey IDとAccessKey secretが取得されます。 詳細については、「AccessKey の作成」をご参照ください。

    環境変数を使用して、AccessKey IDとAccessKeyシークレットを保存することを推奨します。 詳細については、「手順2: 環境変数の設定」をご参照ください。

FeatureStore SDK for Goのインストール

次のコマンドを実行して、FeatureStore SDK for Goをインストールします。

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

FeatureStoreクライアントの初期化

API

// Initialize the FeatureStore client. 
// regionId specifies the region where the instance resides.
// accessKeyId specifies the AccessKey ID that is used to access the storage services. To obtain an AccessKey ID, visit the official website of Alibaba Cloud or contact an administrator. 
// accessKeySecret specifies the AccessKey secret that is used to access the storage services. To obtain an AccessKey secret, visit the official website of Alibaba Cloud or contact an administrator. 
// projectName specifies the name of the FeatureStore project that you created in the Platform for AI (PAI) console.
func NewFeatureStoreClient(regionId, accessKeyId, accessKeySecret, projectName string, opts ...ClientOption) (*FeatureStoreClient, error)
説明

Go用SDKがオンラインストアに直接接続できるようにするには、FeatureStoreクライアントを仮想プライベートクラウド (VPC) で実行する必要があります。 たとえば、SDK For Goは、特定のVPC経由でのみHologresインスタンスまたはGraphComputeインスタンスにアクセスできます。

サンプルコード

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

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

フィーチャビューからフィーチャデータを取得する

API

// Retrieve feature data from a feature view based on the join ID, feature name, and feature alias.
GetOnlineFeatures(joinIds []interface{}, features []string, alias map[string]string) ([]map[string]interface{}, error)

Parameters

パラメーター

説明

joinIds

取得する機能の結合ID (主キー) を指定します。

features

取得するフィーチャの名前を指定します。 []string{"*"} は、フィーチャビュー内のすべてのフィーチャを取得するように指定します。

alias

取得するフィーチャのエイリアスを指定します。 このパラメーターは、シーケンスフィーチャビューには適用されません。

サンプルコード

// get project by name
project, err := client.GetProject("project_name")
if err != nil {
    // t.Fatal(err)
}

// get featureview by name
user_feature_view := project.GetFeatureView("feature_view_name")
if user_feature_view == nil {
    // t.Fatal("feature view not exist")
}

// get online features
features, err := user_feature_view.GetOnlineFeatures([]interface{}{"key1", "key2"}, []string{"*"}, nil)
  • Success response: オフラインまたはリアルタイムの機能ビューからデータを取得

    [
        {
            "city":"Hefei",
            "follow_cnt":1,
            "gender":"male",
            "user_id":"100043186"
        },
        {
            "city":"",
            "follow_cnt":5,
            "gender":"male",
            "user_id":"100060369"
        }
    ]
  • 成功応答: シーケンスフィーチャビューからデータを取得

    • この例で使用されるシーケンス機能の設定を次の表に示します。

      オフラインシーケンス機能フィールド

      イベント名

      シーケンスの長さ

      オンラインシーケンス機能名

      click_seq_50_seq

      クリック

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

モデルフィーチャからフィーチャデータを取得する

API

// Retrieve feature data from model features based on the join ID and feature entity.
GetOnlineFeatures(joinIds map[string][]interface{}) ([]map[string]interface{}, error) 
// Retrieve feature data about a specific entity from model features based on the join ID.
GetOnlineFeaturesWithEntity(joinIds map[string][]interface{}, featureEntityName string) ([]map[string]interface{}, error)

Parameters

パラメーター

説明

joinIds

結合IDのキーと値のペアのコレクション。 キーは結合IDの名前で、値は結合IDの値です。

featureEntityName

フィーチャデータを取得するフィーチャエンティティの名前を指定します。

サンプルコード

各モデル特徴は、複数の特徴エンティティに関連付けることができる。 複数の結合IDを指定して、対応するフィーチャを取得できます。

次のサンプルコードでは、user_iditem_idの2つのjoin idを指定しています。 設定したすべての結合IDを指定する必要があります。

// get project by name
project, err := client.GetProject("fs_test_ots")
if err != nil {
    // t.Fatal(err)
}

// get ModelFeature by name
model_feature := project.GetModelFeature("rank")
if model_feature == nil {
    // t.Fatal("model feature not exist")
}

// get online features
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"
        }
    ]
  • 成功応答: モデルフィーチャ (シーケンスフィーチャを含む) からデータを取得

    モデルフィーチャを登録するときに、モデルトレーニングに使用するオフラインシーケンスフィーチャを指定できます。 指定されたオフラインシーケンス機能は、オンラインデータストアに同期されます。 次に、Go用のFeatureStore SDKを使用して、対応するオンラインシーケンス機能を取得できます。

    一般に、配列特徴の実体はユーザである。 次のサンプルコードでは、user_iditem_idの2つのjoin idを指定しています。 設定したすべての結合IDを指定する必要があります。

    • この例で使用されるシーケンス機能の設定を次の表に示します。

      オフラインシーケンス機能フィールド

      イベント名

      シーケンスの長さ

      オンラインシーケンス機能名

      click_seq_50_seq

      クリック

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