Partager via


Publier des caractéristiques dans un magasin en ligne

Cet article explique comment publier des caractéristiques sur un magasin en ligne à des fins de mise à disposition en temps réel.

Databricks Feature Store prend en charge ces magasins en ligne :

Fournisseur de magasin en ligne Publier avec l’ingénierie de caractéristiques dans Unity Catalog Publier avec le magasin de fonctionnalités de l'espace de travail Recherche de fonctionnalités dans le service de modèle MLflow hérité Recherche de fonctionnalités dans le service de modèle
Azure Cosmos DB [1] X X (Client du magasin de fonctionnalités v0.5.0 et versions ultérieures) X X
Azure MySQL (serveur unique) X X
Azure SQL Server X

Notes de compatibilité Cosmos DB

Cette section inclut quelques éléments importants à garder à l’esprit lors de l’utilisation du magasin de fonctionnalités Databricks avec Cosmos DB.

Espaces de travail avec Unity Catalog

Dans Databricks Runtime 12.2 LTS ML et versions antérieures, le fournisseur de magasin en ligne Cosmos DB n’est pas compatible avec les espaces de travail Unity Catalog. Unity Catalog et le connecteur Spark Cosmos DB officiel modifient les catalogues Spark. Lorsque vous publiez des fonctionnalités dans Cosmos DB à partir d’un espace de travail Unity Catalog sur un cluster exécutant Databricks Runtime 12.2 LTS ML ou une version antérieure, il peut y avoir un conflit d’écriture qui provoque l’échec de la publication du magasin de fonctionnalités sur Cosmos DB.

Pour utiliser Cosmos DB dans un espace de travail avec Unity Catalog, vous devez utiliser un cluster exécutant Databricks Runtime 13.0 ML ou version ultérieure, ou un cluster exécutant Databricks Runtime 11.3 LTS ML ou version ultérieure avec la stratégie de cluster Sans restriction ou Calcul partagé.

Spark Connector

Pour utiliser Azure Cosmos DB, le compte doit être créé avec l’API Core (SQL) et la méthode de connectivité réseau doit être définie sur Tous les réseaux. Le connecteur OLTP Spark 3 Azure Cosmos DB approprié pour l’API SQL doit être installé sur le cluster. Databricks vous recommande d’installer la dernière version du connecteur pour Spark 3.2 jusqu’à ce qu’un connecteur pour Spark 3.3 soit publié.

Ne créez pas manuellement de base de données ni de conteneur – utilisez publish_table()

Le magasin en ligne Cosmos DB utilise un autre schéma que celui du magasin hors connexion. Plus précisément, dans le magasin en ligne, les clés primaires sont stockées sous forme de clé combinée dans la colonne _feature_store_internal__primary_keys.

Pour vérifier que Feature Store peut accéder au magasin en ligne Cosmos DB, vous devez créer la table dans le magasin en ligne en utilisant publish_table(). Ne créez pas manuellement une base de données ni un conteneur dans Cosmos DB. publish_table() le fait automatiquement pour vous.

Publier des caractéristiques calculées par lots dans un magasin en ligne

Vous pouvez créer et planifier un travail Databricks pour publier régulièrement les caractéristiques mises à jour. Ce travail peut également inclure le code permettant de calculer les caractéristiques mises à jour, ou vous pouvez créer et exécuter des travaux distincts pour calculer et publier les mises à jour de caractéristiques.

Pour les magasins SQL, le code suivant suppose qu’une base de données en ligne nommée « recommender_system » existe déjà dans le magasin en ligne et qu’elle correspond au nom du magasin en mode hors connexion. S’il n’existe aucune table nommée « customer_features » dans la base de données, ce code en crée une. Il suppose également que les caractéristiques sont calculées chaque jour et stockées sous la forme d’une colonne partitionnée _dt.

Le code suivant suppose que vous avez créé des secrets pour accéder à ce magasin en ligne.

Cosmos DB

La prise en charge de Cosmos DB est disponible dans toutes les versions du client de catalogue Unity et dans le client du Magasin de fonctionnalités v0.5.0 et versions ultérieures.

import datetime
from databricks.feature_engineering.online_store_spec import AzureCosmosDBSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
online_store = AzureCosmosDBSpec(
  account_uri='<account-uri>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Magasins SQL

import datetime
from databricks.feature_engineering.online_store_spec import AzureMySqlSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
online_store = AzureMySqlSpec(
  hostname='<hostname>',
  port='<port>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Publier des caractéristiques en streaming dans un magasin en ligne

Pour envoyer en streaming sans interruption des caractéristiques au magasin en ligne, définissez streaming=True.

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  streaming=True
)

Publier des caractéristiques sélectionnées dans un magasin en ligne

Pour publier uniquement des caractéristiques sélectionnées dans le magasin en ligne, utilisez l’argument features pour spécifier le(s) nom(s) de la ou des caractéristiques à publier. Les clés primaires et les clés d’horodatage sont toujours publiées. Si vous ne spécifiez pas l’argument features, ou si la valeur est None, toutes les caractéristiques de la table de caractéristiques hors connexion sont publiées.

Remarque

La table hors connexion entière doit être une table de fonctionnalités valide même si vous publiez uniquement un sous-ensemble de fonctionnalités dans un magasin en ligne. Si la table hors connexion contient des types de données non pris en charge, vous ne pouvez pas publier un sous-ensemble de fonctionnalités de cette table dans un magasin en ligne.

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  features=["total_purchases_30d"]
)

Publier une table de caractéristiques dans une base de données spécifique

Dans la spécification du magasin en ligne, spécifiez le nom de la base de données (database_name) et le nom de la table (table_name). Si vous ne spécifiez pas ces paramètres, le nom de la table de caractéristiques et le nom de la base de données hors connexion sont utilisés. database_name doit déjà exister dans le magasin en ligne.

online_store = AzureMySqlSpec(
  hostname='<hostname>',
  port='<port>',
  database_name='<database-name>',
  table_name='<table-name>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

Remplacer une table de caractéristiques en ligne existante ou des lignes spécifiques

Utilisez mode='overwrite' dans l’appel publish_table. La table en ligne est entièrement remplacée par les données de la table hors connexion.

Notes

Azure Cosmos DB ne prend pas en charge le mode de remplacement.

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  mode='overwrite'
)

Pour remplacer uniquement certaines lignes, utilisez l’argument filter_condition :

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Supprimer une table publiée d’un magasin en ligne

Avec le client du magasin de fonctionnalités v0.12.0 et versions ultérieures, vous pouvez utiliser drop_online_table pour supprimer une table publiée d’un magasin en ligne. Lorsque vous supprimez une table publiée avec drop_online_table, la table est supprimée de votre fournisseur de magasin en ligne et les métadonnées du magasin en ligne sont supprimées de Databricks.

fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
  name='recommender_system.customer_features',
  online_store = online_store
)

Notes

  • drop_online_table supprime la table publiée du magasin en ligne. Elle ne supprime pas la table de fonctionnalités dans Databricks.
  • Avant de supprimer une table publiée, vous devez vous assurer qu’elle n’est pas utilisée pour la recherche de fonctionnalité de service de modèle et qu’elle n’a pas d’autres dépendances en aval. La suppression est irréversible et peut entraîner l’échec des dépendances.
  • Pour vérifier la présence de dépendances, envisagez de faire pivoter les clés de la table publiée que vous envisagez de supprimer pendant un jour avant d’exécuter drop_online_table.