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-anslutningsapp 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.
Kommentar
Hela offlinetabellen måste vara en giltig funktionstabell även om du bara publicerar en delmängd funktioner till en onlinebutik. Om offlinetabellen innehåller datatyper som inte stöds kan du inte publicera en delmängd funktioner från tabellen till en onlinebutik.
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_table
tas 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
.