機能ビューの操作

注釈

Snowflake Feature Store API は、Snowpark ML Pythonパッケージ(snowflake-ml-python)v1.5.0以降で利用可能です。

機能ビュー は、生データを1つまたは複数の関連する フィーチャー に変換します。機能ビューの全てのフィーチャーは同じスケジュールでリフレッシュします。フィーチャー・ストアは、フィーチャーを格納する フィーチャー・テーブル によってバックアップされています。

Snowflake Feature Storeは、2種類の機能ビューをサポートしています。

  • Snowflake-managed feature view: フィーチャテーブルは、指定したスケジュールでSnowflakeによって生データから自動的にリフレッシュされます。機能ビューは、それを更新するためのスケジュールを提供する場合、Snowflakeで管理されているとみなされます。

  • 外部機能ビュー: 機能ビューを更新するスケジュールを提供しない場合、外部と見なされます。 dbt のようなツールを使って、必要に応じて生データからフィーチャーを更新し、フィーチャーテーブルを管理する責任があります。

snowflake.ml.feature_store.FeatureView というクラスは、機能ビューを操作するための Python API です。 FeatureView コンストラクタは、機能生成ロジックを含むSnowpark DataFrame を受け入れます。提供された DataFrame には、機能ビューに関連付けられたエンティティで指定された join_keys 列が含まれている必要があります。機能ビューに時系列機能が含まれる場合は、タイムスタンプ列名が必要です。

Python API の詳細については、 フィーチャーストア API リファレンス をご覧ください。

Snowflakeで管理された機能ビューの作成

Snowflake が管理する機能ビューでは、フィーチャーテーブルとして ダイナミックテーブル を使用します。指定したスケジュールでソースデータからフィーチャーを抽出し、新しいデータを効率的かつインクリメンタルに処理します。下図は、データのソースから特徴変換を経て、特徴テーブルに入るまでの流れを示しています。

Snowflake Feature Storeの管理された機能ビュー

Snowflakeで管理された機能ビューを作成するには、以下のPythonブロックのようなコードを使用します。 entity は、フィーチャが関連付けられている エンティティ で、 my_df は、ソースデータに基づくフィーチャー変換ロジックを含むSnowpark DataFrame です。

refresh_freq パラメータを設定すると、機能ビューが Snowflake 管理に指定されます。リフレッシュ頻度は、時間差(最小値 1 minute)、またはタイムゾーンを含む cron 式(例: * * * * * America/Los_Angeles)にすることができます。

from snowflake.ml.feature_store import FeatureView

managed_fv = FeatureView(
    name="MY_MANAGED_FV",
    entities=[entity],
    feature_df=my_df,                   # Snowpark DataFrame containing feature transformations
    timestamp_col="ts",                 # optional timestamp column name in the dataframe
    refresh_freq="5 minutes",           # how often feature data refreshes
    desc="my managed feature view"      # optional description
)
Copy

特徴変換は、Snowpark Python または SQL で記述できます。Snowpark Python APIは ユーティリティ関数 を提供し、ウィンドウ集計などの一般的な関数タイプを定義します。これらの関数の使用例については、 一般的な機能とクエリのパターン をご参照ください。

インクリメンタル リフレッシュの対象となるには、各ソース テーブルで 変更追跡が有効になっている必要があります 。変更追跡がソーステーブルでまだ有効になっていない場合、Snowflake は機能ビューの動的テーブルを作成するときに自動的に有効にしようとします。これにはテーブルの OWNERSHIP が求められます。テーブルを所有していない場合は、所有者に変更追跡を有効にするよう依頼するか、 refresh_mode='FULL' を使用して機能ビューを作成し、更新ごとにソーステーブルを完全に読み取ります。

外部機能ビューの作成

Snowflake Feature Store以外で生成されたフィーチャーは、作成時に refresh_freq パラメータを None に設定することで登録できます。この場合、フィーチャーテーブルを自分で作成し、管理する必要があります。フィーチャー DataFrame は、生データソースではなく、フィーチャーテーブルに基づいており、通常、変換を伴わない、このテーブルからの単純な投影を含んでいます。

注釈

DataFrame機能ビューからデータを取得する際に、必要に応じて計算が行われます。この計算は機能ビューからデータを復元する時に行われます。ただし、外部機能ビューは、 dbt のような、フィーチャー変換を実行するために既に使用しているツールでの使用を主な目的としています。一般的に、Snowflake にフィーチャ変換を実行させたい場合は、 Snowflake-managed featureビュー を使用する必要があります。

下図は、データのソースから、外部ツール(ここではdbt)によるフィーチャー変換を経て、フィーチャーテーブルになるまでの流れを示しています。

Snowflake Feature Storeの管理された機能ビュー

外部機能ビューは、フィーチャーテーブル上の ビュー として実装されるため、追加のストレージコストは発生しません。

以下のコードは、外部機能ビューの作成方法を示しています。

external_fv = FeatureView(
    name="MY_EXTERNAL_FV",
    entities=[entity],
    feature_df=my_df,                   # Snowpark DataFrame referencing the feature table
    timestamp_col="ts",                 # optional timestamp column name in the dataframe
    refresh_freq=None,                  # None means the feature view is external
    desc="my external feature view"     # optional description
)
Copy

機能ビューをより発見しやすくする

FeatureView に機能ごとの説明を追加することで、 Snowsight Universal Search を使った機能の検索が容易になります。次の例では、機能ビューの attach_feature_desc メソッドを使って、Python辞書に含まれる各特徴の短い説明を提供します。

external_fv = external_fv.attach_feature_desc(
    {
        "SENDERID": "Sender account ID for the transaction",
        "RECEIVERID": "Receiver account ID for the transaction",
        "IBAN": "International Bank Identifier for the receiver bank",
        "AMOUNT": "Amount of the transaction"
    }
)
Copy

どちらの種類の特徴ビューも、特徴記述で充実させることができます。

機能ビューの登録

機能ビューが完全に定義されたら、フィーチャーストアの register_feature_view メソッドを使用して、名前とバージョンをカスタマイズしてフィーチャーストアに登録することができます。増分メンテナンス(サポートされているクエリタイプの場合)と自動リフレッシュは、指定されたリフレッシュ頻度に基づいて行われます。

動的テーブルを使用した増分メンテナンスで提供されたクエリを維持できない場合、指定された頻度でクエリからテーブルが完全にリフレッシュされます。そのため、機能リフレッシュの遅れが大きくなり、メンテナンスコストが高くなる可能性があります。クエリロジックを変更し、クエリを複数の小さなクエリに分割して増分メンテナンスをサポートしたり、より大きな仮想ウェアハウスをプロビジョニングして動的なテーブルメンテナンスをサポートしたりできます。動的テーブルの制限に関する最新情報については、 一般的な制限 をご参照ください。

registered_fv: FeatureView = fs.register_feature_view(
    feature_view=managed_fv,    # feature view created above, could also use external_fv
    version="1",
    block=True,         # whether function call blocks until initial data is available
    overwrite=False,    # whether to replace existing feature view with same name/version
)
Copy

機能ビューパイプライン定義は、登録された後は不変であり、機能ビューが存在する限り一貫した機能コンピューティングを提供します。

機能ビューの取得

機能ビューをフィーチャーストアに登録すると、フィーチャーストアの get_feature_view メソッドを使用して、必要なときにそこから機能ビューを取得できます。

retrieved_fv: FeatureView = fs.get_feature_view(
    name="MY_MANAGED_FV",
    version="1"
)
Copy

機能ビューの検出

list_feature_views メソッドを使用すると、フィーチャ ストアに登録されているすべての機能ビューを、エンティティ名または機能ビュー名でフィルタリングしながら一覧表示できます。一致する機能に関する情報は、Snowpark DataFrameとして返されます。次のコードは、機能ビューのリストを取得する例です。 fs は、フィーチャーストアへの参照です。

fs.list_feature_views(
    entity_name="<entity_name>",                # optional
    feature_view_name="<feature_view_name>",    # optional
).show()
Copy

また、Snowsight Feature Store UI またはUniversal Searchを使用して、機能を検索することもできます。

機能ビューの更新

フィーチャストアの update_feature_view メソッドを使用して、フィーチャストアに登録した機能ビューのプロパティを更新できます。更新可能なプロパティは以下の通りです。

  • 機能ビューの更新頻度

  • フィーチャートランスフォームが実行されるウェアハウス

  • 機能ビューの説明

フィーチャー定義と列は変更できません。フィーチャーストアの機能を変更するには、新しいバージョンの機能ビューを作成します。

When you call update_feature_view, specify the feature view version to be updated by providing its name and version. The additional parameters specify the properties to be updated; you can specify just the ones you want to change. The following code shows an example of changing feature view properties; :code:fs is a reference to the feature store.

fs.update_feature_view(
    name="<name>",
    version="<version>",
    refresh_freq="<new_fresh_freq>",    # optional
    warehouse="<new_warehouse>",        # optional
    desc="<new_description>",           # optional
)
Copy

機能ビューの削除

You can delete a feature view from the feature store with the feature store's delete_feature_view method. The following code shows an example of deleting a feature view; :code:fs is a reference to the feature store.

fs.delete_feature_view(
    feature_view="<name>",
    version="<version>",
)
Copy

警告

機能ビューのバージョンを削除すると、それを使用しているパイプラインがすべて壊れます。削除する前に、機能ビューのバージョンが使用中でないことを確認してください。

コストの考慮事項

Snowflake 管理の機能ビューは、Snowflake ダイナミックテーブルを使用します。動的テーブルの監視については 動的テーブルのモニタリングについて を、動的テーブルのコストについては 動的テーブルのコストを理解する をご参照ください。外部機能ビューは、追加のストレージコストが発生しないビューを使用します。

既知の制限

  • Snowflake管理対象機能ビューの最大数および機能ビュー内の機能変換クエリは、 動的テーブルの制限 に従います。

  • すべての機能変換クエリが動的増分リフレッシュでサポートされているわけではありません。 制限事項 をご参照ください。

  • 機能ビュー名は SQL 識別子であり、 Snowflakeの識別子要件 に従います。

  • 機能ビューのバージョンは文字列で、最大長は128文字です。一部の文字は許可されていないため、エラーメッセージが表示されます。