Utilisation de vues de fonctions

Note

L’API Snowflake Feature Store est disponible dans le paquet Snowpark ML Python (snowflake-ml-python) v1.5.0 et ultérieure.

Une vue de fonctionnalités encapsule la transformation de données brutes en une ou plusieurs fonctionnalités associées. Toutes les fonctionnalités d’une vue de fonctionnalités sont actualisées selon le même calendrier. Les boutiques de fonctionnalités sont soutenues par une table de fonctionnalités qui stocke les fonctionnalités.

Snowflake Feature Store prend en charge deux types différents de vues de fonctionnalités :

  • Vue des fonctionnalités gérées par Snowflake : la table des fonctionnalités est automatiquement actualisée à partir des données brutes par Snowflake selon un calendrier que vous spécifiez. Une vue de fonctionnalité est considérée comme gérée par Snowflake si vous fournissez un calendrier pour l’actualiser.

  • Vue de fonctionnalités externes : si vous ne fournissez pas de calendrier pour l’actualisation de la vue des fonctionnalités, elle est considérée comme externe. Vous êtes responsable de la maintenance de la table des fonctionnalités, de la mise à jour des fonctionnalités à partir des données brutes selon les besoins, par exemple à l’aide d’un outil tel que dbt.

La classe snowflake.ml.feature_store.FeatureView est l’API Python qui interagit avec les vues de fonctionnalités. Le constructeur FeatureView accepte un DataFrame Snowpark qui contient la logique de génération des fonctionnalités. Le DataFrame fourni doit contenir les colonnes join_keys spécifiées dans les entités associées à la vue de la fonctionnalité. Un nom de colonne d’horodatage est nécessaire si votre vue des fonctionnalités comprend des fonctionnalités de séries temporelles.

Voir la référence d’API Feature Store pour plus de détails sur l’API Python.

Création d’une vue de fonctionnalité gérée par Snowflake

Une vue de fonctionnalité gérée par Snowflake utilise une table dynamique comme la table des fonctionnalités. Les fonctionnalités sont extraites des données sources selon un calendrier que vous spécifiez, en gérant les nouvelles données de manière efficace et incrémentielle. L’illustration ci-dessous montre le flux de données depuis leur source, via les transformations de fonctionnalités, dans une table de fonctionnalités.

Une vue de fonctionnalités gérée dans le Snowflake Feature Store

Pour créer une vue de fonctionnalités gérée par Snowflake, utilisez un code comme le bloc Python suivant, où entity est l”entité avec laquelle les fonctionnalités sont associées, et my_df est le DataFrame Snowpark qui contient votre logique de transformation de fonctionnalités en fonction de vos données sources.

Le réglage du paramètre refresh_freq désigne la vue des fonctionnalités comme étant gérée par Snowflake. La valeur peut être un delta temporel (valeur minimale 1 minute), ou une expression cron avec un fuseau horaire (par exemple * * * * * 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

Vous pouvez écrire des transformations de fonctionnalités à l’aide de Snowpark Python ou en SQL. L’API Snowpark Python fournit des fonctions utilitaires permettant de définir des types de fonctions courantes, telles que les agrégations fenêtrées. Voir Fonctionnalités communes et modèles de requête pour des exemples d’utilisation de ces fonctions.

Pour bénéficier d’une actualisation incrémentielle, chaque table source doit avoir le suivi des modifications activé. Si le suivi des modifications n’est pas déjà activé sur une table source, Snowflake tente de l’activer automatiquement lors de la création de la table dynamique de la vue des fonctionnalités. Cela nécessite le droit OWNERSHIP sur la table. Si vous n’êtes pas propriétaire de la table, demandez au propriétaire d’activer le suivi des modifications ou créez la vue des fonctionnalités avec refresh_mode='FULL', qui lit entièrement la table source à chaque actualisation.

Création d’une vue des fonctions externe

Les fonctionnalités générées en dehors de Snowflake Feature Store peuvent être enregistrées en définissant le paramètre refresh_freq sur None lors de la création. Dans cette situation, vous devez créer et gérer vous-même la table des fonctionnalités. La fonctionnalité DataFrame est basée sur la table des fonctionnalités, et non sur la source de données brutes, et contient généralement une projection simple de cette table, sans transformations.

Note

Vous pouvez effectuer des transformations de fonctionnalités dans le DataFrame de fonctionnalité ; ces calculs sont effectués selon les besoins lorsque vous récupérez des données à partir de la vue des fonctionnalités. Cependant, les vues de fonctionnalités externes sont principalement destinées à être utilisées avec des outils tels que dbt que vous utilisez déjà pour effectuer des transformations de fonctionnalités. En général, vous devez utiliser des vues de fonctionnalités gérées par Snowflake si vous souhaitez que Snowflake effectue une transformation de fonctionnalités.

L’illustration ci-dessous montre le flux de données depuis leur source, via la transformation des fonctionnalités par un outil externe (ici dbt), dans une table de fonctionnalités.

Une vue de fonctionnalités gérée dans le Snowflake Feature Store

Les vues de fonctionnalités externes sont implémentées comme des vues sur votre table de fonctionnalités, elles n’entraînent donc aucun coût de stockage supplémentaire.

Le code ci-dessous montre comment créer une vue de fonctionnalité externe.

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

Rendre les vues de fonctionnalités plus détectables

L’ajout de descriptions par fonctionnalité à FeatureView facilite la recherche de fonctionnalités à l’aide de Snowsight Universal Search. L’exemple suivant utilise une méthode attach_feature_desc de vue de fonctionnalité pour fournir une brève description de chaque fonctionnalité incluse dans un dictionnaire 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

Les deux types de vues de fonctionnalités peuvent être enrichis avec des descriptions de fonctionnalités.

Enregistrement des vues de fonctionnalités

Une fois qu’une vue de fonctionnalité a été entièrement définie, vous pouvez l’enregistrer dans la boutique de fonctionnalités à l’aide de la méthode register_feature_view, avec un nom et une version personnalisés. La maintenance incrémentale (pour les types de requête pris en charge) et l’actualisation automatique s’effectuent selon la fréquence d’actualisation spécifiée.

Lorsque la requête fournie ne peut pas être maintenue par une maintenance incrémentale à l’aide d’une table dynamique, la table sera entièrement actualisée à partir de la requête à la fréquence spécifiée. Cela peut entraîner un retard plus important dans l’actualisation des fonctionnalités et des coûts de maintenance plus élevés. Vous pouvez modifier la logique de la requête, en la divisant en plusieurs requêtes plus petites qui prennent en charge la maintenance incrémentielle, ou fournir un entrepôt virtuel plus grand pour la maintenance des tables dynamiques. Consultez Limitations générales pour obtenir les informations les plus récentes sur les limitations des tables dynamiques.

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

La définition d’un pipeline de vues de fonctionnalités est immuable après son enregistrement, ce qui fournit un calcul cohérent des fonctions tant que la vue de fonctionnalités existe.

Récupération des vues de fonctionnalités

Une fois qu’une vue de fonctionnalités a été enregistrée dans le Feature Store, vous pouvez la récupérer lorsque vous en avez besoin à l’aide de la méthode get_feature_view du Feature Store :

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

Découvrir les vues des fonctionnalités

Vous pouvez dresser la liste de toutes les vues de fonctionnalités enregistrées dans le Feature Store, en filtrant éventuellement par nom d’entité ou par nom de vue de fonctionnalité, à l’aide de la méthode list_feature_views. Les informations sur les fonctionnalités correspondantes sont renvoyées sous la forme d’un DataFrame Snowpark. Le code suivant montre un exemple d’obtention d’une liste de vues de fonctionnalités ; fs est une référence à la boutique de fonctionnalités.

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

Les fonctionnalités peuvent également être découvertes à l’aide de l’UI de Snowsight Feature Store (disponible pour certains clients) ou Universal Search.

Mise à jour des vues de fonctionnalités

Vous pouvez mettre à jour certaines propriétés d’une vue de fonctionnalité que vous avez enregistrée dans la boutique de fonctionnalités à l’aide de la méthode update_feature_view de la boutique de fonctionnalités. Les propriétés pouvant être mises à jour sont les suivantes :

  • La fréquence d’actualisation de la vue des fonctionnalités

  • L’entrepôt où les transformations de fonctionnalités s’exécutent

  • La description de la vue des fonctionnalités

Les définitions de fonctionnalités et les colonnes ne peuvent pas être modifiées. Pour modifier les fonctionnalités d’une boutique de fonctionnalités, créez une nouvelle version de la vue des fonctionnalités.

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

Suppression des vues de fonctionnalités

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

Avertissement

La suppression d’une version de vue de fonctionnalités interrompt tous les pipelines qui l’utilisent. Assurez-vous que la version de la vue de fonctionnalités n’est pas utilisée avant de la supprimer.

Considérations relatives aux clients

Les vues de fonctionnalités gérées par Snowflake utilisent des tables dynamiques Snowflake. Voir À propos de la surveillance des tables dynamiques pour des informations sur le contrôle des tables dynamiques et Compréhension du coût des tables dynamiques pour des informations sur les coûts des tables dynamiques. Les vues de fonctionnalités externes utilisent des vues qui n’entraînent pas de frais de stockage supplémentaires.

Limitations connues

  • Le nombre maximal de vues de fonctionnalités gérées par Snowflake et les requêtes de transformation de fonctionnalités dans les vues de fonctionnalités est soumis aux limitations des tables dynamiques.

  • Les requêtes de transformation de fonctionnalités ne sont pas toutes prises en charge par l’actualisation incrémentielle dynamique. Consultez les limitations.

  • Les noms des vues de fonctionnalités sont des identificateurs SQL et sont soumis aux exigences relatives aux identificateurs Snowflake.

  • Les versions des vues de fonctionnalités sont des chaînes et ont une longueur maximale de 128 caractères. Certains caractères ne sont pas autorisés et produiront un message d’erreur.