Aller au contenu principal

Publier des fonctionnalités dans un magasin en ligne tiers

Publiez des tables de fonctionnalités vers un magasin en ligne tiers pour rendre les fonctionnalités disponibles pour un service à faible latence et en temps réel. Vous pouvez publier des fonctionnalités batch ou en streaming, un sous-ensemble sélectionné de fonctionnalités, ou vers une base de données spécifique.

Le Magasin de fonctionnalités Databricks prend en charge ces magasins en ligne :

Fournisseur de boutique en ligne

Publier avec Feature Engineering dans Unity Catalog

Publier avec l'ancien Magasin de fonctionnalités du Workspace

Recherche de fonctionnalités dans Model Serving

Amazon DynamoDB

X

X (client Magasin de fonctionnalités v0.3.8 et versions ultérieures)

X

Amazon Aurora (compatible MySQL)

X

Amazon RDS MySQL

X

Fournisseur de boutique en ligne

Publier avec Feature Engineering dans Unity Catalog

Publier avec l'ancien Magasin de fonctionnalités du Workspace

Recherche de fonctionnalités dans Model Serving

Amazon DynamoDB

X

X (client Magasin de fonctionnalités v0.3.8 et versions ultérieures)

X

Amazon Aurora (compatible MySQL)

X

Amazon RDS MySQL

X

remarque

La boutique en ligne DynamoDB utilise un schéma différent de la boutique hors ligne. Plus précisément, dans le magasin en ligne, les clés primaires sont stockées comme une clé combinée dans la colonne _feature_store_internal__primary_keys.

Pour vous assurer que le Magasin de fonctionnalités peut accéder au magasin en ligne DynamoDB, vous devez créer la table dans le magasin en ligne en utilisant publish_table(). Ne créez pas manuellement de table dans DynamoDB. publish_table() s'en charge automatiquement pour vous.

Publier les fonctionnalités calculées par batch dans un magasin en ligne

Vous pouvez créer et planifier un Job Databricks pour publier régulièrement les fonctionnalités mises à jour. Ce Job peut également inclure le code pour calculer les fonctionnalités mises à jour, ou vous pouvez créer et exécuter des Jobs séparés pour calculer et publier les mises à jour de fonctionnalités.

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 correspond au nom du magasin hors ligne. S’il n’y a pas de table nommée « customer_features » dans la base de données, ce code en crée une. Il suppose également que les fonctionnalités sont calculées chaque jour et stockées sous forme de colonne partitionnée _dt.

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

Si vous utilisez DynamoDB, Databricks recommande que vous fournissiez une authentification avec une permission d'écriture via un profil d'instance attaché à un cluster Databricks.

La prise en charge de DynamoDB est disponible dans toutes les versions du client Feature Engineering in Unity Catalog et du client Magasin de fonctionnalités v0.3.8 et ultérieures.

remarque

La publication dans DynamoDB nécessite un cluster compute classique avec mode d’accès dédié (anciennement utilisateur unique). Cela s'applique à la publication par batch et en streaming (streaming=True), que vous vous authentifiiez avec un profil d'instance ou avec des secrets. Le mode d'accès standard et le compute Serverless ne sont pas pris en charge, car le chemin de publication écrit dans DynamoDB à l'aide de l'API Spark RDD, qui n'est pas disponible dans ces environnements.

Python
import datetime
from databricks.feature_engineering.online_store_spec import AmazonDynamoDBSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store

# do not pass `write_secret_prefix` if you intend to use the instance profile attached to the cluster.
online_store = AmazonDynamoDBSpec(
region='<region>',
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'
)

Publier des fonctionnalités streaming dans un magasin en ligne

Pour Stream continuellement des fonctionnalités vers le magasin en ligne, définissez streaming=True.

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

Le streaming vers DynamoDB nécessite un cluster de compute classique avec le mode d’accès dédié (anciennement utilisateur unique). Voir Publier des fonctionnalités calculées par lot dans un magasin en ligne.

Publier les fonctionnalités sélectionnées dans un magasin en ligne

Pour publier uniquement les fonctionnalités sélectionnées dans le magasin en ligne, utilisez l'argument features pour spécifier le ou les noms de fonctionnalités à publier. Les clés primaires et les clés de timestamp sont toujours publiées. Si vous ne spécifiez pas l'argument features ou si la valeur est None, toutes les fonctionnalités de la table de fonctionnalités hors ligne sont publiées.

remarque

La table hors ligne complète doit être une table de caractéristiques valide, même si vous ne publiez qu'un sous-ensemble de caractéristiques dans un magasin en ligne. Si la table hors ligne contient des types de données non pris en charge, vous ne pouvez pas publier un sous-ensemble de caractéristiques de cette table vers un magasin en ligne.

Python
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 vers une base de données spécifique

Dans le spec 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 parameters, le nom de la base de données hors ligne et le nom de la table de fonctionnalités sont utilisés. database_name doit déjà exister dans le magasin en ligne.

Python
online_store = AmazonRdsMySqlSpec(
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 fonctionnalités en ligne existante ou des lignes spécifiques

Utilisez mode='overwrite' dans l'appel publish_table. La table en ligne est complètement écrasée par les données de la table hors ligne.

remarque

Amazon DynamoDB ne prend pas en charge le mode d'écrasement.

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

Pour écraser seulement certaines lignes, utilisez l'argument filter_condition :

Python
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 Magasin de fonctionnalités v0.12.0 et versions ultérieures, vous pouvez utiliser drop_online_table pour supprimer une table publiée d’une boutique en ligne. Lorsque vous supprimez une table publiée avec drop_online_table, la table est supprimée de votre fournisseur de boutique en ligne et les métadonnées de la boutique en ligne sont retirées de Databricks.

Python
fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
name='recommender_system.customer_features',
online_store = online_store
)
remarque
  • drop_online_table supprime la table publiée du magasin en ligne. Il ne supprime pas la table de fonctionnalités dans Databricks.
  • Avant de supprimer une table publiée, vous devez vous assurer que la table n'est pas utilisée pour la recherche de fonctionnalités du Model Serving et n'a pas d'autres dépendances en aval. La suppression est irréversible et pourrait entraîner l'échec des dépendances.
  • Pour vérifier les dépendances, envisagez de faire pivoter les clés de la table publiée que vous prévoyez de supprimer pendant une journée avant d’exécuter drop_online_table.