Dela via


Publicera funktioner i en onlinebutik

Den här artikeln beskriver hur du publicerar funktioner till en onlinebutik för realtidsservering.

Databricks Feature Store stöder följande onlinebutiker:

Nätbutiksleverantör Publicera med funktionsteknik i Unity Catalog Publicera med arbetsytans funktionslager Funktionssökning i äldre MLflow-modellservering Funktionssökning i modellservering
Azure Cosmos DB [1] X X (Feature Store-klienten v0.5.0 och senare) X X
Azure MySQL (enskild server) X X
Azure SQL Server X

Kompatibilitetsanteckningar för Cosmos DB

Det här avsnittet innehåller några viktiga saker att tänka på när du använder Databricks Feature Store med Cosmos DB.

Unity Catalog-aktiverade arbetsytor

I Databricks Runtime 12.2 LTS ML och nedan är Cosmos DB-onlinebutiksprovidern inte kompatibel med Unity Catalog-aktiverade arbetsytor. Både Unity Catalog och den officiella Cosmos DB Spark-anslutningsappen ändrar Spark-kataloger. När du publicerar funktioner till Cosmos DB från en Unity Catalog-aktiverad arbetsyta på ett kluster som kör Databricks Runtime 12.2 LTS ML eller nedan kan det finnas en skrivkonflikt som gör att Funktionsarkivet publicerar till Cosmos DB misslyckas.

Om du vill använda Cosmos DB på en Unity Catalog-aktiverad arbetsyta måste du använda ett kluster som kör Databricks Runtime 13.0 ML eller senare, eller ett kluster som kör Databricks Runtime 11.3 LTS ML eller senare med klusterprincipen Obegränsad eller delad beräkning.

Spark-anslutningsapp

Om du vill använda Azure Cosmos DB måste kontot skapas med Core -API :et (SQL) och nätverksanslutningsmetoden måste vara inställd på Alla nätverk. Lämplig Azure Cosmos DB Spark 3 OLTP-Anslut eller för SQL API måste vara installerad i klustret. Databricks rekommenderar att du installerar den senaste anslutningsversionen för Spark 3.2 tills en anslutningsapp för Spark 3.3 släpps.

Skapa inte en databas eller container manuellt – använd publish_table()

Cosmos DB-onlinebutiken använder ett annat schema än offlinearkivet. Mer specifikt lagras primära nycklar i onlinebutiken som en kombinerad nyckel i kolumnen _feature_store_internal__primary_keys.

För att säkerställa att Funktionsarkivet kan komma åt Cosmos DB-onlinebutiken måste du skapa tabellen i onlinebutiken med hjälp publish_table()av . Skapa inte en databas eller container manuellt i Cosmos DB. publish_table() gör det åt dig automatiskt.

Publicera batchberäknade funktioner i en onlinebutik

Du kan skapa och schemalägga ett Databricks-jobb för att regelbundet publicera uppdaterade funktioner. Det här jobbet kan också innehålla koden för att beräkna de uppdaterade funktionerna, eller så kan du skapa och köra separata jobb för att beräkna och publicera funktionsuppdateringar.

För SQL-butiker förutsätter följande kod att en onlinedatabas med namnet "recommender_system" redan finns i onlinebutiken och matchar namnet på offlinearkivet. Om det inte finns någon tabell med namnet "customer_features" i databasen skapar den här koden en. Det förutsätter också att funktioner beräknas varje dag och lagras som en partitionerad kolumn _dt.

Följande kod förutsätter att du har skapat hemligheter för att komma åt den här onlinebutiken.

Cosmos DB

Cosmos DB-stöd är tillgängligt i alla versioner av Funktionsteknik i Unity Catalog-klienten och Feature Store-klienten v0.5.0 och senare.

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

SQL-butiker

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

Publicera direktuppspelningsfunktioner till en onlinebutik

Om du vill strömma funktioner kontinuerligt till onlinebutiken anger du 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
)

Publicera valda funktioner i en onlinebutik

Om du bara vill publicera valda funktioner i onlinebutiken features använder du argumentet för att ange vilka funktionsnamn som ska publiceras. Primärnycklar och tidsstämpelnycklar publiceras alltid. Om du inte anger features argumentet eller om värdet är Ingen publiceras alla funktioner från offlinefunktionstabellen.

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

Publicera en funktionstabell till en specifik databas

I specifikationen för onlinebutiken anger du databasnamnet (database_name) och tabellnamnet (table_name). Om du inte anger dessa parametrar används namnet på offlinedatabasen och funktionstabellen. database_name måste redan finnas i onlinebutiken.

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

Skriv över en befintlig onlinefunktionstabell eller specifika rader

Använd mode='overwrite' i samtalet publish_table . Onlinetabellen skrivs över helt av data i offlinetabellen.

Kommentar

Azure Cosmos DB stöder inte överskrivningsläge.

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

Om du bara vill skriva över vissa rader använder du filter_condition argumentet:

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

Ta bort en publicerad tabell från en onlinebutik

Med Feature Store-klienten v0.12.0 och senare kan du använda drop_online_table för att ta bort en publicerad tabell från en onlinebutik. När du tar bort en publicerad tabell med drop_online_tabletas tabellen bort från onlinebutiksleverantören och metadata för onlinebutiken tas bort från Databricks.

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

Kommentar

  • drop_online_table tar bort den publicerade tabellen från onlinebutiken. Den tar inte bort funktionstabellen i Databricks.
  • Innan du tar bort en publicerad tabell bör du se till att tabellen inte används för funktionssökning för modellserver och inte har några andra underordnade beroenden. Borttagningen är oåterkallelig och kan orsaka att beroenden misslyckas.
  • Om du vill söka efter beroenden kan du överväga att rotera nycklarna för den publicerade tabellen som du planerar att ta bort i en dag innan du kör drop_online_table.