Condividi tramite


Pubblicare funzionalità in un negozio online

Questo articolo descrive come pubblicare funzionalità in un negozio online per la gestione in tempo reale.

Databricks Feature Store supporta questi archivi online:

Provider di punti vendita online Pubblicare con progettazione delle funzionalità nel catalogo unity Pubblicare con l'archivio delle funzionalità dell'area di lavoro legacy Ricerca delle funzionalità nella gestione del modello MLflow legacy Ricerca delle funzionalità nella gestione dei modelli
Azure Cosmos DB [1] X X (client di Feature Store v0.5.0 e versioni successive) X X
Azure MySQL (server singolo) X X
Azure SQL Server X

Note sulla compatibilità di Cosmos DB

Questa sezione include alcuni aspetti importanti da tenere presenti quando si usa Databricks Feature Store con Cosmos DB.

Aree di lavoro abilitate per il catalogo unity

In Databricks Runtime 12.2 LTS ML e versioni successive il provider di archivi online cosmos DB non è compatibile con le aree di lavoro abilitate per Unity Catalog. Sia il catalogo unity che il connettore Spark ufficiale di Cosmos DB modificano i cataloghi Spark. Quando si pubblicano funzionalità in Cosmos DB da un'area di lavoro abilitata per Unity Catalog in un cluster che esegue Databricks Runtime 12.2 LTS ML o versione successiva, potrebbe verificarsi un conflitto di scrittura che causa un errore di pubblicazione dell'Archivio funzionalità in Cosmos DB.

Per usare Cosmos DB in un'area di lavoro abilitata per Unity Catalog, è necessario usare un cluster che esegue Databricks Runtime 13.0 ML o versione successiva oppure un cluster che esegue Databricks Runtime 11.3 LTS ML o versione successiva con i criteri di cluster Unrestricted o Shared Compute.

Connettore Spark

Per usare Azure Cosmos DB, è necessario creare l'account con l'API Core (SQL) e il metodo di connettività di rete deve essere impostato su Tutte le reti. Il connettore OLTP Spark 3 di Azure Cosmos DB appropriato per l'API SQL deve essere installato nel cluster. Databricks consiglia di installare la versione più recente del connettore per Spark 3.2 fino a quando non viene rilasciato un connettore per Spark 3.3.

Non creare manualmente un database o un contenitore: usare publish_table()

L'archivio online di Cosmos DB usa uno schema diverso rispetto all'archivio offline. Nello specifico, nell'archivio online le chiavi primarie vengono archiviate come chiave combinata nella colonna _feature_store_internal__primary_keys.

Per assicurarsi che Feature Store possa accedere all'archivio online di Cosmos DB, è necessario creare la tabella nello store online usando publish_table(). Non creare manualmente un database o un contenitore all'interno di Cosmos DB. publish_table() lo fa automaticamente.

Pubblicare funzionalità di calcolo batch in un archivio online

È possibile creare e pianificare un processo di Databricks per pubblicare regolarmente le funzionalità aggiornate. Questo processo può includere anche il codice per calcolare le funzionalità aggiornate oppure è possibile creare ed eseguire processi separati per calcolare e pubblicare gli aggiornamenti delle funzionalità.

Per gli archivi SQL, il codice seguente presuppone che un database online denominato "recommender_system" esista già nell'archivio online e corrisponda al nome dell'archivio offline. Se nel database non è presente alcuna tabella denominata "customer_features", questo codice ne crea uno. Si presuppone inoltre che le funzionalità vengano calcolate ogni giorno e archiviate come colonna _dtpartizionata.

Il codice seguente presuppone che siano stati creati segreti per accedere a questo archivio online.

Cosmos DB

Il supporto di Cosmos DB è disponibile in tutte le versioni di Progettazione funzionalità nel client del catalogo Unity e nel client di Feature Store v0.5.0 e versioni successive.

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'
)

Archivi 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'
)

Pubblicare le funzionalità di streaming in un archivio online

Per trasmettere continuamente le funzionalità allo Store online, impostare 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
)

Pubblicare le funzionalità selezionate in un negozio online

Per pubblicare solo le funzionalità selezionate nello Store online, usare l'argomento features per specificare i nomi delle funzionalità da pubblicare. Le chiavi primarie e le chiavi timestamp vengono sempre pubblicate. Se non si specifica l'argomento features o se il valore è Nessuno, vengono pubblicate tutte le funzionalità della tabella delle funzionalità offline.

Nota

L'intera tabella offline deve essere una tabella di funzionalità valida anche se si pubblica solo un subset di funzionalità in un archivio online. Se la tabella offline contiene tipi di dati non supportati, non è possibile pubblicare un subset di funzionalità da tale tabella in un archivio online.

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"]
)

Pubblicare una tabella di funzionalità in un database specifico

Nella specifica dell'archivio Se non si specificano questi parametri, vengono usati il nome del database offline e il nome della tabella delle funzionalità. database_name deve esistere già nello store online.

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>'
)

Sovrascrivere una tabella delle funzionalità online esistente o righe specifiche

Usare mode='overwrite' nella publish_table chiamata. La tabella online viene completamente sovrascritta dai dati nella tabella offline.

Nota

Azure Cosmos DB non supporta la modalità di sovrascrittura.

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

Per sovrascrivere solo determinate righe, usare l'argomento filter_condition :

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

Eliminare una tabella pubblicata da un archivio online

Con il client di Feature Store v0.12.0 e versioni successive, è possibile usare drop_online_table per eliminare una tabella pubblicata da un archivio online. Quando si elimina una tabella pubblicata con drop_online_table, la tabella viene eliminata dal provider di archivi online e i metadati dell'archivio online vengono rimossi da Databricks.

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

Nota

  • drop_online_table elimina la tabella pubblicata dall'archivio online. Non elimina la tabella delle funzionalità in Databricks.
  • Prima di eliminare una tabella pubblicata, è necessario assicurarsi che la tabella non venga usata per la ricerca della funzionalità Model Serving e non abbia altre dipendenze downstream. L'eliminazione è irreversibile e potrebbe causare un errore delle dipendenze.
  • Per verificare la presenza di eventuali dipendenze, valutare la possibilità di ruotare le chiavi per la tabella pubblicata che si prevede di eliminare per un giorno prima di eseguire drop_online_table.