Aller au contenu principal

Utiliser les tables de fonctionnalités dans le Magasin de fonctionnalités de Workspace (hérité)

remarque

Cette documentation couvre le magasin de fonctionnalités du Workspace. Databricks recommande d'utiliser le Feature Engineering dans Unity Catalog. Le magasin de fonctionnalités du Workspace sera obsolète à l'avenir.

Pour plus d'informations sur l'utilisation des tables de fonctionnalités dans Unity Catalog, consultez Tables de fonctionnalités dans Unity Catalog.

Cette page décrit comment créer et utiliser des tables de fonctionnalités dans le Magasin de fonctionnalités du Workspace.

remarque

Si votre Workspace est activé pour Unity Catalog, toute table gérée par Unity Catalog qui a une clé primaire est automatiquement une table de fonctionnalités que vous pouvez utiliser pour l’entraînement et l’inférence de modèles. Toutes les fonctionnalités de Unity Catalog, telles que la sécurité, la traçabilité, le balisage et l'accès inter-Workspace, sont automatiquement disponibles pour la table de fonctionnalités. Pour des informations sur l’utilisation des tables de fonctionnalités dans un Workspace activé pour Unity Catalog, consultez Tables de fonctionnalités dans Unity Catalog.

Pour des information sur le suivi du lineage et de la fraîcheur des fonctionnalités, consultez Explorer les fonctionnalités et le lineage (hérité).

remarque

Les noms de bases de données et de tables de fonctionnalités peuvent contenir uniquement des caractères alphanumériques et des traits de soulignement (_).

Créer une base de données pour les tables de fonctionnalités

Avant de créer des tables de fonctionnalités, vous devez créer une base de données pour les stocker.

%sql CREATE DATABASE IF NOT EXISTS <database-name>

Les tables de fonctionnalités sont stockées en tant que tables Delta. Lorsque vous créez une table de fonctionnalités avec create_table (client Magasin de fonctionnalités v0.3.6 et supérieur) ou create_feature_table (v0.3.5 et inférieur), vous devez spécifier le nom de la base de données. Par exemple, cet argument crée une table Delta nommée customer_features dans la base de données recommender_system.

name='recommender_system.customer_features'

Lorsque vous publiez une table de fonctionnalités dans un magasin en ligne, les noms de table et de base de données default sont ceux spécifiés lors de la création de la table ; vous pouvez spécifier des noms différents en utilisant la méthode publish_table.

L'interface utilisateur du Magasin de fonctionnalités Databricks affiche le nom de la table et de la base de données dans le magasin en ligne, ainsi que d'autres métadonnées.

Créer une table de fonctionnalités dans le Magasin de fonctionnalités Databricks

remarque

Vous pouvez également enregistrer une table Delta existante en tant que table de fonctionnalités. Consultez Enregistrer une table Delta existante en tant que table de fonctionnalités.

Les étapes de base pour créer une table de fonctionnalités sont :

  1. Écrivez les fonctions Python pour calculer les fonctionnalités. La sortie de chaque fonction doit être un DataFrame Apache Spark avec une clé primaire unique. La clé primaire peut se composer d'une ou plusieurs colonnes.
  2. Créez une table de fonctionnalités en instanciant un FeatureStoreClient et en utilisant create_table (v0.3.6 et versions ultérieures) ou create_feature_table (v0.3.5 et versions antérieures).
  3. Remplissez la table de fonctionnalités à l'aide de write_table.

Pour plus de détails sur les commandes et les paramètres utilisés dans les exemples suivants, consultez la référence de l'API Python du Magasin de fonctionnalités.

Python
from databricks.feature_store import feature_table

def compute_customer_features(data):
''' Feature computation code returns a DataFrame with 'customer_id' as primary key'''
pass

# create feature table keyed by customer_id
# take schema from DataFrame output by compute_customer_features
from databricks.feature_store import FeatureStoreClient

customer_features_df = compute_customer_features(df)

fs = FeatureStoreClient()

customer_feature_table = fs.create_table(
name='recommender_system.customer_features',
primary_keys='customer_id',
schema=customer_features_df.schema,
description='Customer features'
)

# An alternative is to use `create_table` and specify the `df` argument.
# This code automatically saves the features to the underlying Delta table.

# customer_feature_table = fs.create_table(
# ...
# df=customer_features_df,
# ...
# )

# To use a composite key, pass all keys in the create_table call

# customer_feature_table = fs.create_table(
# ...
# primary_keys=['customer_id', 'date'],
# ...
# )

# Use write_table to write data to the feature table
# Overwrite mode does a full refresh of the feature table

fs.write_table(
name='recommender_system.customer_features',
df = customer_features_df,
mode = 'overwrite'
)

Enregistrer une table Delta existante en tant que table de caractéristiques

Avec la version 0.3.8 et ultérieure, vous pouvez enregistrer une table Delta existante en tant que table de fonctionnalités. La table Delta doit exister dans le métastore.

Python
fs.register_table(
delta_table='recommender.customer_features',
primary_keys='customer_id',
description='Customer features'
)

Contrôler l'accès aux tables de fonctionnalités

Consultez le contrôle d'accès (hérité).

Mettre à jour une table de fonctionnalités

Vous pouvez mettre à jour une table de fonctionnalités en ajoutant de nouvelles fonctionnalités ou en modifiant des lignes spécifiques en fonction de la clé primaire.

Les métadonnées de table de fonctionnalité suivantes ne peuvent pas être mises à jour :

  • Clé principale
  • Clé de partition
  • Nom ou type d'une fonctionnalité existante

Ajouter de nouvelles fonctionnalités à une table de fonctionnalités existante

Vous pouvez ajouter de nouvelles fonctionnalités à une table de fonctionnalités existante de l'une des deux manières suivantes :

  • Mettez à jour la fonction de calcul de fonctionnalités existante et exécutez write_table avec le DataFrame retourné. Ceci met à jour le schéma de la table de fonctionnalités et merge les nouvelles valeurs de fonctionnalités en fonction de la clé primaire.
  • Créez une nouvelle fonction de calcul de fonctionnalité pour calculer les nouvelles valeurs de fonctionnalité. Le DataFrame retourné par cette nouvelle fonction de calcul doit contenir les clés primaires et les clés de partition (si définies) de la table de fonctionnalités. Exécutez write_table avec le DataFrame pour écrire les nouvelles fonctionnalités dans la table de fonctionnalités existante, en utilisant la même clé primaire.

Mettre à jour uniquement des lignes spécifiques dans une table de fonctionnalités

Utilisez mode = "merge" dans write_table. Les lignes dont la clé primaire n'existe pas dans le DataFrame envoyé dans l'appel write_table restent inchangées.

Python
fs.write_table(
name='recommender.customer_features',
df = customer_features_df,
mode = 'merge'
)

Planifier un job pour mettre à jour une table de fonctionnalités

Pour garantir que les fonctionnalités des tables de fonctionnalités disposent toujours des valeurs les plus récentes, Databricks vous recommande de créer un Job exécutant un Notebook pour mettre à jour votre table de fonctionnalités régulièrement, par exemple quotidiennement. Si vous avez déjà un Job non planifié, vous pouvez le convertir en Job planifié pour vous assurer que les valeurs de la fonctionnalité sont toujours à jour. See Lakeflow Jobs.

Le code de mise à jour d'une table de fonctionnalités utilise mode='merge', comme indiqué dans l'exemple suivant.

Python
fs = FeatureStoreClient()

customer_features_df = compute_customer_features(data)

fs.write_table(
df=customer_features_df,
name='recommender_system.customer_features',
mode='merge'
)

Stocker les valeurs passées des fonctionnalités quotidiennes

Définissez une table de fonctionnalités avec une clé primaire composite. Incluez la date dans la clé primaire. Par exemple, pour une table de fonctionnalités store_purchases, vous pourriez utiliser une clé primaire composite (date, user_id) et une clé de partition date pour des lectures efficaces.

Python
fs.create_table(
name='recommender_system.customer_features',
primary_keys=['date', 'customer_id'],
partition_columns=['date'],
schema=customer_features_df.schema,
description='Customer features'
)

Vous pouvez ensuite créer du code pour lire à partir de la table de fonctionnalités en filtrant date à la période d'intérêt.

Vous pouvez également créer une table de fonctionnalités de série chronologique en spécifiant la colonne date comme clé de Timestamp à l’aide de l’argument timestamp_keys.

Python
fs.create_table(
name='recommender_system.customer_features',
primary_keys=['date', 'customer_id'],
timestamp_keys=['date'],
schema=customer_features_df.schema,
description='Customer time series features'
)

Cela permet les recherches à des points spécifiques du temps lorsque vous utilisez create_training_set ou score_batch. Le système effectue une jointure temporelle basée sur le timestamp, en utilisant le timestamp_lookup_key que vous spécifiez.

Pour maintenir la table de fonctionnalités à jour, configurez un Job planifié régulièrement pour écrire des fonctionnalités, ou Stream de nouvelles valeurs de fonctionnalité dans la table de fonctionnalités.

Créer un pipeline de calcul de fonctionnalités en streaming pour mettre à jour les fonctionnalités

Pour créer un pipeline de calcul de caractéristiques en streaming, passez un DataFrame en streaming comme argument à write_table. Cette méthode renvoie un StreamingQuery objet.

Python
def compute_additional_customer_features(data):
''' Returns Streaming DataFrame
'''
pass # not shown

customer_transactions = spark.readStream.load("dbfs:/events/customer_transactions")
stream_df = compute_additional_customer_features(customer_transactions)

fs.write_table(
df=stream_df,
name='recommender_system.customer_features',
mode='merge'
)

Lire depuis une table de fonctionnalités

Utilisez read_table pour lire les valeurs des fonctionnalités.

Python
fs = feature_store.FeatureStoreClient()
customer_features_df = fs.read_table(
name='recommender.customer_features',
)

Rechercher et parcourir les tables de fonctionnalités

Utilisez l’interface utilisateur du Magasin de fonctionnalités pour rechercher ou parcourir les tables de fonctionnalités.

  1. Dans la barre latérale, sous IA/ML , cliquez sur Fonctionnalités pour afficher l'interface utilisateur du Magasin de fonctionnalités.

  2. Dans le champ de recherche, saisissez tout ou partie du nom d’une table de fonctionnalités, d’une fonctionnalité ou d’une source de données utilisée pour le calcul des fonctionnalités. Vous pouvez également saisir tout ou partie de la clé ou de la valeur d'un tag. Le texte de recherche ne fait pas la distinction entre majuscules et minuscules.

    Exemple de recherche de fonctionnalité

Obtenir les métadonnées de la table de fonctionnalités

L'API pour obtenir les métadonnées de la table de fonctionnalités dépend de la version de Databricks Runtime que vous utilisez. Avec la version v0.3.6 ou une version supérieure, utilisez get_table. Avec la version v0.3.5 et antérieures, utilisez get_feature_table.

Python
# this example works with v0.3.6 and above
# for v0.3.5, use `get_feature_table`
from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()
fs.get_table("feature_store_example.user_feature_table")

Gérer les balises de tables de fonctionnalités

Les tags sont des paires clé-valeur que vous pouvez créer et utiliser pour rechercher des tables de fonctionnalités. Vous pouvez créer, modifier et supprimer des tags à l'aide de l'interface utilisateur (UI) du magasin de fonctionnalités ou de l'API Python du magasin de fonctionnalités.

Travailler avec les tags de table de fonctionnalités dans l'interface utilisateur

Utilisez l'interface utilisateur du Magasin de fonctionnalités pour rechercher ou parcourir les tables de fonctionnalités. Pour accéder à l'interface utilisateur, dans la barre latérale, sous IA/ML , cliquez sur Fonctionnalités .

Ajoutez une balise à l'aide de l'interface utilisateur du Magasin de fonctionnalités.

  1. Cliquez sur Icône du tag si ce n’est pas déjà ouvert. Le tableau des balises apparaît.

    baliser la table

  2. Cliquez dans les champs **Nom** et **Valeur** et saisissez la clé et la valeur de votre balise.

  3. Cliquez sur **Ajouter**.

Modifier ou supprimer une étiquette à l'aide de l'interface du Magasin de fonctionnalités.

Pour modifier ou supprimer un tag existant, utilisez les icônes de la colonne Actions .

actions de tag

Travailler avec les balises de table de fonctionnalités à l'aide de l'API Python du Magasin de fonctionnalités.

Sur les clusters exécutant v0.4.1 et versions ultérieures, vous pouvez créer, modifier et supprimer des balises à l'aide de l'API Python du Magasin de fonctionnalités.

Exigences

Client du Magasin de fonctionnalités v0.4.1 et versions ultérieures.

Créer une table de fonctionnalités avec une balise à l'aide de l'API Python du Magasin de fonctionnalités

Python
from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()

customer_feature_table = fs.create_table(
...
tags={&quot;tag_key_1&quot;: &quot;tag_value_1&quot;, &quot;tag_key_2&quot;: &quot;tag_value_2&quot;, ...},
...
)

Ajoutez, mettez à jour et supprimez des balises à l'aide de l'API Python du Magasin de fonctionnalités

Python
from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()

# Upsert a tag
fs.set_feature_table_tag(table_name="my_table", key="quality", value="gold")

# Delete a tag
fs.delete_feature_table_tag(table_name="my_table", key="quality")

Mettre à jour les sources de données d'une table de fonctionnalités

Le Magasin de fonctionnalités suit automatiquement les sources de données utilisées pour compute les fonctionnalités. Vous pouvez également mettre à jour manuellement les sources de données en utilisant l'API Python du Magasin de fonctionnalités.

Exigences

Client du Magasin de fonctionnalités v0.5.0 et versions ultérieures

Ajouter des sources de données à l'aide de l'API Python du Magasin de fonctionnalités

Voici quelques exemples de commandes. Pour plus de détails, consultez la documentation de l'API.

Python
from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()

# Use `source_type="table"` to add a table in the metastore as data source.
fs.add_data_sources(feature_table_name="clicks", data_sources="user_info.clicks", source_type="table")

# Use `source_type="path"` to add a data source in path format.
fs.add_data_sources(feature_table_name="user_metrics", data_sources="dbfs:/FileStore/user_metrics.json", source_type="path")

# Use `source_type="custom"` if the source is not a table or a path.
fs.add_data_sources(feature_table_name="user_metrics", data_sources="user_metrics.txt", source_type="custom")

Supprimer les sources de données à l’aide de l’API Python du Magasin de fonctionnalités

Pour plus de détails, consultez la documentation de l'API.

remarque

La commande suivante supprime les sources de données de tous types (« table », « chemin » et « personnalisé ») qui correspondent aux noms de sources.

Python
from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()
fs.delete_data_sources(feature_table_name="clicks", sources_names="user_info.clicks")

Supprimer une table de fonctionnalités

Vous pouvez supprimer une table de fonctionnalités à l’aide de l’interface utilisateur du Magasin de fonctionnalités ou de l’ API Python du Magasin de fonctionnalités.

remarque
  • La suppression d'une table de fonctionnalités peut entraîner des défaillances imprévues chez les producteurs en amont et les consommateurs en aval (modèles, Endpoint et Job planifiés). Vous devez supprimer les boutiques en ligne publiées avec votre fournisseur cloud.
  • Lorsque vous supprimez une table de fonctionnalités à l'aide de l'API, la table Delta sous-jacente est également supprimée. Lorsque vous supprimez une table de fonctionnalités de l’interface utilisateur, vous devez supprimer la table Delta sous-jacente séparément.

Supprimer une table de fonctionnalités à l'aide de l'interface utilisateur

  1. Sur la page de la table de fonctionnalités, cliquez sur Bouton Bas à droite du nom de la table de fonctionnalités et sélectionnez Supprimer . Si vous n'avez pas l'autorisation CAN MANAGE pour la table des fonctionnalités, vous ne verrez pas cette option.

    Sélectionnez supprimer dans le menu déroulant

  2. Dans la boîte de dialogue Supprimer le tableau de fonctionnalités, cliquez sur **Supprimer** pour confirmer.

  3. Si vous souhaitez également supprimer la table Delta sous-jacente, exécutez la commande suivante dans un notebook.

    SQL
    %sql DROP TABLE IF EXISTS <feature-table-name>;

Supprimer une table de fonctionnalités à l'aide de l'API Python du Magasin de fonctionnalités

Avec le client Magasin de fonctionnalités v0.4.1 et versions ultérieures, vous pouvez utiliser drop_table pour supprimer une table de fonctionnalités. Lorsque vous supprimez une table avec drop_table, la table Delta sous-jacente est également supprimée.

Python
fs.drop_table(
name='recommender_system.customer_features'
)
Sur cette page