Utiliser les tables de fonctionnalités dans le Magasin de fonctionnalités de Workspace (hérité)
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.
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é).
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
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 :
- É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.
- Créez une table de fonctionnalités en instanciant un
FeatureStoreClientet en utilisantcreate_table(v0.3.6 et versions ultérieures) oucreate_feature_table(v0.3.5 et versions antérieures). - 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.
- V0.3.6 and above
- V0.3.5 and below
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'
)
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_feature_table(
name='recommender_system.customer_features',
keys='customer_id',
schema=customer_features_df.schema,
description='Customer features'
)
# An alternative is to use `create_feature_table` and specify the `features_df` argument.
# This code automatically saves the features to the underlying Delta table.
# customer_feature_table = fs.create_feature_table(
# ...
# features_df=customer_features_df,
# ...
# )
# To use a composite key, pass all keys in the create_feature_table call
# customer_feature_table = fs.create_feature_table(
# ...
# 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'
)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_feature_table(
name='recommender_system.customer_features',
keys='customer_id',
schema=customer_features_df.schema,
description='Customer features'
)
# An alternative is to use `create_feature_table` and specify the `features_df` argument.
# This code automatically saves the features to the underlying Delta table.
# customer_feature_table = fs.create_feature_table(
# ...
# features_df=customer_features_df,
# ...
# )
# To use a composite key, pass all keys in the create_feature_table call
# customer_feature_table = fs.create_feature_table(
# ...
# 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.
Pour mettre à jour une table de fonctionnalités enregistrée, vous devez utiliser l'API Python du Magasin de fonctionnalités.
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_tableavec 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_tableavec 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.
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.
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.
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.
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.
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.
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.
-
Dans la barre latérale, sous IA/ML , cliquez sur Fonctionnalités pour afficher l'interface utilisateur du Magasin de fonctionnalités.
-
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.

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.
# 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.
-
Cliquez sur
si ce n’est pas déjà ouvert. Le tableau des balises apparaît.

-
Cliquez dans les champs **Nom** et **Valeur** et saisissez la clé et la valeur de votre balise.
-
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 .

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
from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()
customer_feature_table = fs.create_table(
...
tags={"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2", ...},
...
)
Ajoutez, mettez à jour et supprimez des balises à l'aide de l'API Python du Magasin de fonctionnalités
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.
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.
La commande suivante supprime les sources de données de tous types (« table », « chemin » et « personnalisé ») qui correspondent aux noms de sources.
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.
- 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
-
Sur la page de la table de fonctionnalités, cliquez sur
à 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.

-
Dans la boîte de dialogue Supprimer le tableau de fonctionnalités, cliquez sur **Supprimer** pour confirmer.
-
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.
fs.drop_table(
name='recommender_system.customer_features'
)