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

Platform For AI:FeatureStore のベストプラクティス

最終更新日:Oct 01, 2025

このトピックでは、他の Alibaba Cloud プロダクトを使用せずに、FeatureStore ソフトウェア開発キット (SDK) を使用して推奨システムの特徴を管理する方法について説明します。

背景情報

推奨システムは、ユーザーの興味や嗜好に基づいて、パーソナライズされたコンテンツやプロダクトを提案します。推奨システムにおける重要なステップは、ユーザーとアイテムの特徴を抽出し、構成することです。このドキュメントでは、FeatureStore を使用して推奨システムを構築し、異なるバージョンの FeatureStore SDK を使用して特徴データを管理する方法を示します。

FeatureStore の詳細については、「FeatureStore の概要」をご参照ください。

構成または使用中に質問がある場合は、DingTalk グループ (ID: 34415007523) に参加してテクニカルサポートを受けることができます。

前提条件

開始する前に、次の準備を完了してください。

依存プロダクト

特定の操作

Platform for AI (PAI)

  • PAI サービスが有効化され、PAI ワークスペースが作成されていること。詳細については、「PAI を有効化し、デフォルトのワークスペースを作成する」をご参照ください。

  • Alibaba Cloud アカウントの AccessKey ID と AccessKey シークレットが取得されていること。詳細については、「AccessKey の作成」をご参照ください。

    ローカル環境変数を構成して、AccessKey ID と AccessKey シークレットを保存します。詳細については、「環境変数の構成」をご参照ください。

MaxCompute

FeatureDB

DataWorks

1. データの準備

データテーブルの同期

一般的な推奨シナリオでは、ユーザー特徴テーブルアイテム特徴テーブルラベルテーブルの 3 つのデータテーブルを準備する必要があります。

練習のために、pai_online_project MaxCompute プロジェクトにサンプルのユーザー、アイテム、ラベルテーブルを準備しました。ユーザーテーブルとアイテムテーブルには、それぞれパーティションあたり約 100,000 のデータエントリが含まれ、MaxCompute で約 70 MB のストレージを占有します。ラベルテーブルには、パーティションあたり約 450,000 のデータエントリが含まれ、MaxCompute で約 5 MB のストレージを占有します。

DataWorks で SQL コマンドを実行して、pai_online_project プロジェクトから独自の MaxCompute プロジェクトにユーザー、アイテム、ラベルテーブルを同期します。次の手順に従ってください:

  1. DataWorks コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[データ開発と O&M] > [データ開発] をクリックします。

  3. 作成した DataWorks ワークスペースを選択し、[Data Studio に移動] をクリックします。

  4. [作成] にカーソルを合わせ、[ノードの作成] > [MaxCompute] > MaxCompute SQL を選択します。表示されるダイアログボックスで、ノードパラメーターを構成します。

    パラメーター

    推奨値

    エンジンインスタンス

    作成した MaxCompute エンジンを選択します。

    ノードタイプ

    MaxCompute SQL

    パス

    ビジネスフロー/ワークフロー/MaxCompute

    名前

    カスタム名を入力します。

  5. [OK] をクリックします。

  6. 新しいノードエリアで、次の SQL コマンドを実行して、pai_online_project プロジェクトから独自の MaxCompute プロジェクトにユーザー、アイテム、ラベルテーブルを同期します。[リソースグループ] には、作成した専用リソースグループを選択します。

    ユーザーテーブルの同期: rec_sln_demo_user_table_preprocess_all_feature_v1 (クリックして詳細を表示)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_user_table_preprocess_all_feature_v1
    like pai_online_project.rec_sln_demo_user_table_preprocess_all_feature_v1
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    INSERT OVERWRITE TABLE rec_sln_demo_user_table_preprocess_all_feature_v1 PARTITION (ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_user_table_preprocess_all_feature_v1
    WHERE ds >= '20231022' and ds <='20231024';

    コマンドを実行すると、次の 3 つのパーティションでデータが利用可能になります:

    • ds=20231022

    • ds=20231023

    • ds=20231024

    アイテムテーブルの同期: rec_sln_demo_item_table_preprocess_all_feature_v1 (クリックして詳細を表示)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_item_table_preprocess_all_feature_v1
    like pai_online_project.rec_sln_demo_item_table_preprocess_all_feature_v1
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    INSERT OVERWRITE TABLE rec_sln_demo_item_table_preprocess_all_feature_v1 PARTITION(ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_item_table_preprocess_all_feature_v1
    WHERE ds >= '20231022' and ds <='20231024';

    コマンドを実行すると、次の 3 つのパーティションでデータが利用可能になります:

    • ds=20231022

    • ds=20231023

    • ds=20231024

    ラベルテーブルの同期: rec_sln_demo_label_table (クリックして詳細を表示)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_label_table
    like pai_online_project.rec_sln_demo_label_table
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    INSERT OVERWRITE TABLE rec_sln_demo_label_table PARTITION (ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_label_table
    WHERE ds >= '20231022' and ds <='20231024';

    コマンドを実行すると、次の 3 つのパーティションでデータが利用可能になります:

    • ds=20231022

    • ds=20231023

    • ds=20231024

これらの手順を完了すると、ワークスペースでユーザーテーブル rec_sln_demo_user_table_preprocess_all_feature_v1、アイテムテーブル rec_sln_demo_item_table_preprocess_all_feature_v1、およびラベルテーブル rec_sln_demo_label_table を表示できます。これら 3 つのテーブルは、以降の操作で例として使用されます。

データソースの構成

FeatureStore は通常、オフラインストア (MaxCompute) とオンラインストア (FeatureDB、Hologres、または TableStore) の 2 つのデータソースを必要とします。このトピックでは、MaxComputeFeatureDB を例として使用します。

  1. PAI コンソールにログインします。左側のナビゲーションウィンドウで、[データ準備] > [FeatureStore] をクリックします。

  2. ワークスペースを選択し、[FeatureStore に入る] をクリックします。

  3. MaxCompute データソースを構成します。

    1. [データソース] タブで、[データソースの作成] をクリックします。表示されるダイアログボックスで、MaxCompute データソースのパラメーターを構成します。

      パラメーター

      推奨値

      タイプ

      MaxCompute

      名前

      カスタム名を入力します。

      MaxCompute プロジェクト名

      作成した MaxCompute プロジェクトを選択します。

    2. 権限付与文をコピーします。次に、今すぐ移動 をクリックして DataWorks に移動します。DataWorks で文を実行して、必要な権限を付与します。

      説明

      権限付与操作には、アカウントに管理者権限が必要です。詳細については、「コマンドを使用してユーザー権限を管理する」または「コンソールでユーザー権限を管理する」をご参照ください。

    3. 構成が完了したら、[送信] をクリックします。

  4. FeatureDB データソースを構成します。

    1. すでに FeatureDB データソースを作成している場合は、このステップをスキップできます。

    2. [データソース] タブで、[データソースの作成] をクリックします。表示されるダイアログボックスで、FeatureDB データソースのパラメーターを構成します。

      パラメーター

      推奨値

      タイプ

      FeatureDB (初めて使用する場合は、画面の指示に従って FeatureDB を有効化します)

      名前

      カスタム名はサポートされていません。デフォルト値は feature_db です。

      ユーザー名

      ユーザー名を設定します。

      パスワード

      パスワードを設定します。

      高速 VPC 接続 (オプション)

      構成が成功すると、VPC 内で FeatureStore SDK を使用して、PrivateLink 接続を介して FeatureDB に直接アクセスできます。これにより、データの読み取りおよび書き込みパフォーマンスが向上し、アクセス待機時間が短縮されます。

      VPC

      オンライン FeatureStore サービスが配置されている VPC を選択します。

      ゾーンと vSwitch

      ゾーンと vSwitch を選択します。オンラインサービスマシンが配置されているゾーンの vSwitch を選択してください。ビジネスの高可用性と安定性を確保するために、少なくとも 2 つのゾーンで vSwitch を選択することをお勧めします。

    3. 構成が完了したら、[送信] をクリックします。

2. FeatureStore プロジェクトの作成と登録

FeatureStore プロジェクトは、コンソールまたは SDK を使用して作成および登録できます。トレーニングセットのエクスポートやデータの同期など、後続の操作には SDK が必要であるため、初期設定にコンソールを使用する場合でも、FeatureStore Python SDK をインストールする必要があります。

方法 1: コンソールを使用する

  1. FeatureStore プロジェクトの作成

    1. PAI コンソールにログインします。左側のナビゲーションウィンドウで、[データ準備] > [FeatureStore] をクリックします。

    2. ワークスペースを選択し、[FeatureStore に入る] をクリックします。

    3. [プロジェクトの作成] をクリックします。表示されるダイアログボックスで、プロジェクトパラメーターを構成します。

      パラメーター

      推奨値

      名前

      カスタム名を入力します。このトピックでは、fs_demo を例として使用します。

      説明

      カスタムの説明を入力します。

      オフラインストア

      作成した MaxCompute データソースを選択します。

      オンラインストア

      作成した FeatureDB データソースを選択します。

    4. [送信] をクリックして、FeatureStore プロジェクトを作成します。

  2. 特徴エンティティの作成

    1. FeatureStore の [プロジェクトリスト] ページで、プロジェクト名をクリックしてプロジェクト詳細ページを開きます。

    2. [特徴エンティティ] タブで、[特徴エンティティの作成] をクリックします。表示されるダイアログボックスで、ユーザー特徴エンティティのパラメーターを構成します。

      パラメーター

      推奨値

      特徴エンティティ名

      カスタム名を入力します。このトピックでは、user を例として使用します。

      Join Id

      user_id

    3. [送信] をクリックします。

    4. [特徴エンティティの作成] をクリックします。表示されるダイアログボックスで、アイテム特徴エンティティのパラメーターを構成します。

      パラメーター

      推奨値

      特徴エンティティ名

      カスタム名を入力します。このトピックでは、item を例として使用します。

      Join Id

      item_id

    5. [送信] をクリックして、特徴エンティティを作成します。

  3. 特徴ビューの作成

    1. プロジェクト詳細ページの [特徴ビュー] タブで、[特徴ビューの作成] をクリックします。表示されるダイアログボックスで、ユーザー特徴ビューのパラメーターを構成します。

      パラメーター

      推奨値

      ビュー名

      カスタム名を入力します。このトピックでは、user_table_preprocess_all_feature_v1 を例として使用します。

      タイプ

      オフライン

      書き込み方法

      オフラインテーブルを使用

      データソース

      作成した MaxCompute データソースを選択します。

      特徴テーブル

      準備したユーザーテーブルを選択します: rec_sln_demo_user_table_preprocess_all_feature_v1

      特徴フィールド

      user_id プライマリキーを選択します。

      オンライン特徴テーブルに同期

      はい

      特徴エンティティ

      user

      特徴ライフサイクル (秒)

      デフォルト値を保持します。

    2. [送信] をクリックします。

    3. [特徴ビューの作成] をクリックします。表示されるダイアログボックスで、アイテム特徴ビューを構成します。

      パラメーター

      推奨値

      ビュー名

      カスタム名を入力します。このトピックでは、item_table_preprocess_all_feature_v1 を例として使用します。

      タイプ

      オフライン

      書き込み方法

      オフラインテーブルを使用

      データソース

      作成した MaxCompute データソースを選択します。

      特徴テーブル

      準備したアイテムテーブルを選択します: rec_sln_demo_item_table_preprocess_all_feature_v1

      特徴フィールド

      item_id プライマリキーを選択します。

      オンライン特徴テーブルに同期

      はい

      特徴エンティティ

      item

      特徴ライフサイクル (秒)

      デフォルト値を保持します。

    4. 構成が完了したら、[送信] をクリックして特徴ビューを作成します。

  4. ラベルテーブルの作成

    1. プロジェクト詳細ページの [ラベルテーブル] タブで、[ラベルテーブルの作成] をクリックします。表示されるダイアログボックスで、ラベルテーブル情報を構成します。

      パラメーター

      推奨値

      データソース

      作成した MaxCompute データソースを選択します。

      テーブル名

      準備したラベルテーブルを選択します: rec_sln_demo_label_table

    2. [送信] をクリックします。

  5. モデル特徴の作成

    1. プロジェクト詳細ページの [モデル特徴] タブで、[モデル特徴の作成] をクリックします。表示されるダイアログボックスで、モデル特徴パラメーターを構成します。

      パラメーター

      推奨値

      モデル特徴名

      カスタム名を入力します。このトピックでは、fs_rank_v1 を例として使用します。

      特徴の選択

      作成したユーザーとアイテムの特徴ビューを選択します。

      ラベルテーブル名

      作成したラベルテーブルを選択します: rec_sln_demo_label_table

    2. [送信] をクリックして、モデル特徴を作成します。

    3. モデル特徴リストページで、モデルの右側にある [詳細] をクリックします。

    4. 表示される [モデル特徴詳細] ダイアログボックスの [基本情報] タブで、[エクスポートされたテーブル名] を表示できます。これは fs_demo_fs_rank_v1_trainning_set です。このテーブルは、後続の特徴生成とモデルトレーニングに使用されます。

  6. FeatureStore Python SDK をインストールします。詳細については、「FeatureStore を使用して推奨システムの特徴を管理する」をご参照ください。

方法 2: FeatureStore Python SDK を使用する

  1. DataWorks コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[リソースグループ] をクリックします。

  3. [専用リソースグループ] タブで、[目的][データスケジューリング] のリソースグループを見つけます。そのスケジュールリソースの横にある image.png アイコンをクリックし、[O&M アシスタント] を選択します。

  4. [コマンドの作成] をクリックします。表示されるダイアログボックスで、コマンドパラメーターを構成します。

    パラメーター

    推奨値

    コマンド名

    カスタム名を入力します。このトピックでは、install を例として使用します。

    コマンドタイプ

    手動入力 (pip コマンドを使用してサードパーティパッケージをインストールすることはできません)

    コマンド内容

    /home/tops/bin/pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple https://feature-store-py.oss-cn-beijing.aliyuncs.com/package/feature_store_py-2.0.2-py3-none-any.whl

    タイムアウト

    カスタム時間を設定します。

  5. [作成] をクリックしてコマンドを作成します。

  6. [コマンドの実行] をクリックします。表示されるダイアログボックスで、[実行] をクリックします。

  7. [更新] をクリックして最新の実行ステータスを表示できます。ステータスが [成功] に変わると、インストールは完了です。

SDK の使用に関する詳細な手順については、「DSW ギャラリー」をご参照ください。

3. データ同期ノードの実行

サービスを公開する前に、定期的にデータ同期ノードを実行して、オフラインストアからオンラインストアにデータを同期する必要があります。その後、オンラインサービスはオンラインストアからリアルタイムでデータを読み取ります。この例では、ユーザーとアイテムの特徴テーブルの定期的な同期タスクを構成する方法を示します。

  1. DataWorks コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[データ開発と O&M] > [データ開発] をクリックします。

  3. 作成した DataWorks ワークスペースを選択し、[データ開発に入る] をクリックします。

  4. ユーザーテーブルの定期的な同期を構成します。

    1. [新規] にカーソルを合わせ、[新規ノード] > [MaxCompute] > [PyODPS 3] を選択します。

    2. 次の内容をスクリプトにコピーして、user_table_preprocess_all_feature_v1 の定期的な同期を完了します。

      from feature_store_py.fs_client import FeatureStoreClient
      import datetime
      from feature_store_py.fs_datasource import MaxComputeDataSource
      import sys
      from odps.accounts import StsAccount
      
      cur_day = args['dt']
      print('cur_day = ', cur_day)
      
      access_key_id = o.account.access_id
      access_key_secret = o.account.secret_access_key
      sts_token = None
      endpoint = 'paifeaturestore-vpc.cn-beijing.aliyuncs.com'
      if isinstance(o.account, StsAccount):
          sts_token = o.account.sts_token
      fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, security_token=sts_token, endpoint=endpoint)
      cur_project_name = 'fs_demo'
      project = fs.get_project(cur_project_name)
      
      feature_view_name = 'user_table_preprocess_all_feature_v1'
      batch_feature_view = project.get_feature_view(feature_view_name)
      task = batch_feature_view.publish_table(partitions={'ds':cur_day}, mode='Overwrite', offline_to_online=True)
      task.wait()
      task.print_summary()
      
    3. 右側のナビゲーションウィンドウで、[スケジューリング構成] をクリックします。表示されるダイアログボックスで、スケジューリングパラメーターを構成します。

      パラメーター

      推奨値

      スケジューリングパラメーター

      パラメーター名

      dt

      パラメーター値

      $[yyyymmdd-1]

      リソースプロパティ

      スケジューリングリソースグループ

      作成した専用リソースグループを選択します。

      スケジューリング依存関係

      作成したユーザーテーブルを選択します。

    4. ノードを構成してテストした後、ノード構成を保存して送信します。

    5. データバックフィル操作を実行します。詳細については、「データテーブルの同期」をご参照ください。

  5. アイテムテーブルの定期的な同期を構成します。

    1. [新規] にカーソルを合わせ、[新規ノード] > [MaxCompute] > [PyODPS 3] を選択します。表示されるダイアログボックスで、ノードパラメーターを構成します。

    2. [確認] をクリックします。

    3. 次の内容をスクリプトにコピーします。

      item_table_preprocess_all_feature_v1 の定期同期 (クリックして詳細を表示)

      from feature_store_py.fs_client import FeatureStoreClient
      import datetime
      from feature_store_py.fs_datasource import MaxComputeDataSource
      import sys
      from odps.accounts import StsAccount
      
      cur_day = args['dt']
      print('cur_day = ', cur_day)
      
      access_key_id = o.account.access_id
      access_key_secret = o.account.secret_access_key
      sts_token = None
      endpoint = 'paifeaturestore-vpc.cn-beijing.aliyuncs.com'
      if isinstance(o.account, StsAccount):
          sts_token = o.account.sts_token
      fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, security_token=sts_token, endpoint=endpoint)
      cur_project_name = 'fs_demo'
      project = fs.get_project(cur_project_name)
      
      feature_view_name = 'item_table_preprocess_all_feature_v1'
      batch_feature_view = project.get_feature_view(feature_view_name)
      task = batch_feature_view.publish_table(partitions={'ds':cur_day}, mode='Overwrite', offline_to_online=True)
      task.wait()
      task.print_summary()
    4. 右側のナビゲーションウィンドウで、[スケジューリング構成] をクリックします。表示されるダイアログボックスで、スケジューリングパラメーターを構成します。

      パラメーター

      推奨値

      スケジューリングパラメーター

      パラメーター名

      dt

      パラメーター値

      $[yyyymmdd-1]

      リソースプロパティ

      スケジューリングリソースグループ

      作成した専用リソースグループを選択します。

      スケジューリング依存関係

      作成したアイテムテーブルを選択します。

    5. ノードを構成してテストした後、ノード構成を保存して送信します。

    6. データバックフィル操作を実行します。詳細については、「データテーブルの同期」をご参照ください。

  6. 同期が完了したら、Hologres で最新の同期された特徴データを表示できます。

4. トレーニングセットスクリプトのエクスポート

  1. DataWorks コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[データ開発と O&M] > [データ開発] をクリックします。

  3. 作成した DataWorks ワークスペースを選択し、[データ開発に入る] をクリックします。

  4. [新規] にカーソルを合わせ、[新規ノード] > [MaxCompute] > [PyODPS 3] を選択します。表示されるダイアログボックスで、ノードパラメーターを構成します。

    パラメーター

    推奨値

    エンジンインスタンス

    作成した MaxCompute エンジンを選択します。

    ノードタイプ

    PyODPS 3

    パス

    ビジネスフロー/ワークフロー/MaxCompute

    名前

    カスタム名を入力します。

  5. [確認] をクリックします。

  6. 次の内容をスクリプトにコピーします。

    from feature_store_py.fs_client import FeatureStoreClient
    from feature_store_py.fs_project import FeatureStoreProject
    from feature_store_py.fs_datasource import LabelInput, MaxComputeDataSource, TrainingSetOutput
    from feature_store_py.fs_features import FeatureSelector
    from feature_store_py.fs_config import LabelInputConfig, PartitionConfig, FeatureViewConfig
    from feature_store_py.fs_config import TrainSetOutputConfig, EASDeployConfig
    import datetime
    import sys
    from odps.accounts import StsAccount
    
    cur_day = args['dt']
    print('cur_day = ', cur_day)
    offset = datetime.timedelta(days=-1)
    pre_day = (datetime.datetime.strptime(cur_day, "%Y%m%d") + offset).strftime('%Y%m%d')
    print('pre_day = ', pre_day)
    
    
    access_key_id = o.account.access_id
    access_key_secret = o.account.secret_access_key
    sts_token = None
    endpoint = 'paifeaturestore-vpc.cn-beijing.aliyuncs.com'
    if isinstance(o.account, StsAccount):
        sts_token = o.account.sts_token
    fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, security_token=sts_token, endpoint=endpoint)
    cur_project_name = 'fs_demo'
    project = fs.get_project(cur_project_name)
    
    
    label_partitions = PartitionConfig(name = 'ds', value = cur_day)
    label_input_config = LabelInputConfig(partition_config=label_partitions)
    
    user_partitions = PartitionConfig(name = 'ds', value = pre_day)
    feature_view_user_config = FeatureViewConfig(name = 'user_table_preprocess_all_feature_v1',
    partition_config=user_partitions)
    
    item_partitions = PartitionConfig(name = 'ds', value = pre_day)
    feature_view_item_config = FeatureViewConfig(name = 'item_table_preprocess_all_feature_v1',
    partition_config=item_partitions)
    feature_view_config_list = [feature_view_user_config, feature_view_item_config]
    train_set_partitions = PartitionConfig(name = 'ds', value = cur_day)
    train_set_output_config = TrainSetOutputConfig(partition_config=train_set_partitions)
    
    
    model_name = 'fs_rank_v1'
    cur_model = project.get_model(model_name)
    task = cur_model.export_train_set(label_input_config, feature_view_config_list, train_set_output_config)
    task.wait()
    print("task_summary = ", task.task_summary)
  7. 右側のナビゲーションウィンドウで、[スケジューリング構成] をクリックします。表示されるダイアログボックスで、スケジューリングパラメーターを構成します。

    パラメーター

    推奨値

    スケジューリングパラメーター

    パラメーター名

    dt

    パラメーター値

    $[yyyymmdd-1]

    リソースプロパティ

    スケジューリングリソースグループ

    作成した専用リソースグループを選択します。

    スケジューリング依存関係

    作成したユーザーテーブルとアイテムテーブルを選択します。

  8. ノードを構成してテストした後、ノード構成を保存して送信します。

  9. データバックフィル操作を実行します。詳細については、「データテーブルの同期」をご参照ください。

5. SDK のインストールと使用

Python SDK

詳細については、「FeatureStore Python SDK を使用して推奨システムを構築する」をご参照ください。

Go SDK

FeatureStore Go SDK はオープンソースです。詳細については、「aliyun-pai-featurestore-go-sdk」をご参照ください。

  1. インストール

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

    go get github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2
  2. 使用方法

    1. 次のコマンドを実行して、クライアントを初期化します。

      accessId := os.Getenv("AccessId") 
      accessKey := os.Getenv("AccessKey") 
      regionId := "cn-hangzhou" 
      projectName := "fs_test_ots" 
      
      client, err := NewFeatureStoreClient(regionId, accessId, accessKey, projectName)
      説明

      SDK はオンラインデータソースに直接接続します。したがって、クライアントは VPC 環境で実行する必要があります。たとえば、Hologres は指定された VPC からの接続を要求します。

    2. 特徴ビューから特徴データを取得します。

      // 名前でプロジェクトを取得
      project, err := client.GetProject("fs_test_ots") 
      if err != nil {     
      	// t.Fatal(err) 
      } 
      // 名前で特徴ビューを取得
      user_feature_view := project.GetFeatureView("user_fea") 
      if user_feature_view == nil {     
      	// t.Fatal("feature view not exist") 
      } 
      
      // オンライン特徴を取得
      features, err := user_feature_view.GetOnlineFeatures([]interface{}{"100043186", "100060369"}, []string{"*"}, nil)

      ここで、[]string{"*"} は、特徴ビュー内のすべての特徴を取得することを意味します。取得したい特徴の名前を指定することもできます。

      返されるデータのサンプルは次のとおりです:

      [     
      {         
      "city":"Hefei",    "follow_cnt":1,         "gender":"male",         "user_id":"100043186"    
       },     {                     
       "city":"",         "follow_cnt":5,         "gender":"male",         "user_id":"100060369"     
      } 
      ]
    3. モデル特徴から特徴データを取得します。

      モデル特徴は、複数の特徴エンティティに関連付けることができます。複数の join ID を提供して、対応する特徴をまとめて取得できます。

      この例では、join_iduser_iditem_id の 3 つの join ID を使用します。特徴をフェッチするときは、各 join ID に値を指定する必要があります。

      // 名前でプロジェクトを取得
      project, err := client.GetProject("fs_test_ots") 
      if err != nil {     
      	// t.Fatal(err) 
      }
      
      // 名前で ModelFeature を取得
      model_feature := project.GetModelFeature("rank") 
      if model_feature == nil {     
      	// t.Fatal("model feature not exist") 
      } 
      
      // オンライン特徴を取得
      features, err := model_feature.GetOnlineFeatures(map[string][]interface{}{"user_id": {"100000676", "100004208"}, "item_id":{"238038872", "264025480"}} )

      返されるデータのサンプルは次のとおりです:

      [     
      {         
      "age":26,         "author":100015828,         "category":"14",         "city":"Shenyang",         "duration":63,         "gender":"male",         "item_id":"238038872",         "user_id":"100000676"    
       },     {         
      "age":23,         "author":100015828,         "category":"15",         "city":"Xi'an",         "duration":22,         "gender":"male",         "item_id":"264025480",         "user_id":"100004208"    
       }
       ]
      
      

      特徴エンティティを指定して、対応するすべての特徴を取得することもできます。

      返されるデータのサンプルは次のとおりです:

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

Java SDK

FeatureStore Java SDK はオープンソースです。詳細については、「aliyun-pai-featurestore-java-sdk」をご参照ください。

このセクションでは、Hologres データソースを例として使用します。

  1. 次のコードを実行して、環境変数をロードし、サービスを初期化します。

    public static String accessId = "";
    public static String accessKey = "";
    // リージョンに基づいてホストを構成します
    public static String host = "";
    // 構成済みのローカル環境変数から accessId と accessKey を取得します
    static {
        accessId = System.getenv("ACCESS_KEY_ID");
        accessKey = System.getenv("ACCESS_KEY_SECRET");
    }
  2. regionIdaccessIdaccessKey、およびプロジェクト名を構成する構成クラスを作成します。

    Configuration cf = new Configuration("cn-hangzhou",Constants.accessId,Constants.accessKey,"ele28");
    cf.setDomain(Constants.host);// 注: デフォルト環境は VPC 環境です
  3. クライアントを初期化します。

    ApiClient apiClient = new ApiClient(cf);
    // FS クライアント
    FeatureStoreClient featureStoreClient = new FeatureStoreClient(apiClient);
  4. プロジェクトを取得します。この例では、ele28 という名前のプロジェクトを使用します。

    Project project=featureStoreClient.getProject("ele28");
    if(project==null){
        throw new RuntimeException("Project not found");
    }
  5. プロジェクトの特徴ビューを取得します。この例では、mc_test という名前の特徴ビューを使用します。

    FeatureView featureView=project.getFeatureView("mc_test");
    if (featureView == null) {
        throw  new RuntimeException("FeatureView not found");
    }
  6. 特徴ビューに基づいてオンライン特徴データを取得します。

    Map<String,String> m1=new HashMap<>();
    m1.put("gender","gender1"); // エイリアスを作成                                                                                                                                                                                                 user_id='100027781'(FS_INT64) age='28'(FS_INT64) city='null'(FS_STRING) item_cnt='0'(FS_INT64) follow_cnt='0'(FS_INT64) follower_cnt='2'(FS_INT64) register_time='1697641608'(FS_INT64) tags='0'(FS_STRING) gender1='female'(FS_STRING) ---------------

    オンライン特徴を取得するには、String[]{"*"} はすべてのプロパティを取得します。特定のプロパティを指定して、情報の一部のみを取得することもできます。

    FeatureResult featureResult1=featureView.getOnlineFeatures(new String[]{"100017768","100027781","100072534"},new String[]{"*"},m1);

    特徴情報を出力します。

    while(featureResult1.next()){
        System.out.println("---------------");
        // 特徴名
        for(String m:featureResult1.getFeatureFields()){
            System.out.print(String.format("%s=%s(%s) ",m,featureResult1.getObject(m),featureResult1.getType(m)));
        }
        System.out.println("---------------");
    }   

    次のデータが返されます。

    ---------------
    user_id='100017768'(FS_INT64)  age='28'(FS_INT64)  city='Dongguan'(FS_STRING) item_cnt='1'(FS_INT64)  follow_cnt='1'(FS_INT64)  follower_cnt='0'(FS_INT64) register_time='1697202320'(FS_INT64)  tags='1,2'(FS_STRING)  gender1='female'(FS_STRING) 
    ---------------
  7. モデルを取得します。

    Model model=project.getModelFeature("model_t1");
    if(model==null){
        throw new RuntimeException("Model not found");
    }
    1. モデル特徴からデータを取得します。

      このモデル特徴は、user_id と item_id の 2 つの join ID を使用します。提供する値の数は、join ID の数と一致する必要があります。この例では、各 join ID に 1 つの値を指定します。

      Map<String, List<String>> m2=new HashMap<>(); 
      m2.put("user_id",Arrays.asList("101683057"));
      m2.put("item_id",Arrays.asList("203665415"));
    2. モデル特徴からユーザー特徴エンティティに関連するすべての特徴データを取得します。

      FeatureResult featureResult2 = model.getOnlineFeaturesWithEntity(m2,"user");

      次のデータが返されます。

      ---------------
      user_id='101683057' age='28' city='Shenzhen' follower_cnt='234' follow_cnt='0' gender='male' item_cnt='0' register_time='1696407642' tags='2' item_id='203665415' author='132920407' category='14' click_count='0' duration='18.0' praise_count='10' pub_time='1698218997' title='#Idiom Story' 
      ---------------

Cpp SDK

FeatureStore C++ SDK は現在、EasyRec Processor に統合されています。特徴抽出、キャッシュ管理、読み取り操作に特化して最適化されており、大規模な推奨シナリオ向けにパフォーマンス専有型で低待機時間のソリューションを提供します。

  • メモリ使用量: 複雑で大規模な特徴データを扱う場合、メモリ消費量が大幅に削減されます。特徴負荷が高いほど、メモリの節約効果は大きくなります。

  • 特徴プル時間: オンラインストア (FeatureDB や Hologres など) から特徴をプルする代わりに、SDK は MaxCompute から Elastic Algorithm Service (EAS) キャッシュに直接プルします。これにより、特徴の読み込み時間が大幅に短縮されます。さらに、MaxCompute は安定性と拡張性に優れているため、スケールアウト操作中のオンラインストアの負荷が軽減されます。

  • モデルスコアリング時間: この SDK を使用すると、モデルスコアリングの TP100 パフォーマンスメトリックが向上し、応答時間が安定し、タイムアウト要求が大幅に削減されます。これらの改善により、推奨サービスの全体的な信頼性とユーザーエクスペリエンスが向上します。

リファレンス