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 |
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.
- DynamoDB
- SQL stores
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.
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.
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'
)
import datetime
from databricks.feature_store.online_store_spec import AmazonRdsMySqlSpec
online_store = AmazonRdsMySqlSpec(
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 fonctionnalités streaming dans un magasin en ligne
Pour Stream continuellement des fonctionnalités vers le 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
)
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.
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.
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.
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.
Amazon DynamoDB ne prend pas en charge le mode d'écrasement.
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
mode='overwrite'
)
Pour écraser seulement 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 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.
fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
name='recommender_system.customer_features',
online_store = online_store
)
drop_online_tablesupprime 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.