Functies publiceren in een online winkel
In dit artikel wordt beschreven hoe u functies publiceert in een onlinewinkel voor realtime serveren.
Databricks Feature Store ondersteunt deze online winkels:
Online winkelprovider | Publiceren met functie-engineering in Unity Catalog | Publiceren met werkruimtefunctiearchief | Functiezoekactie in verouderde MLflow-modelverdiening | Functiezoekactie in Model serving |
---|---|---|---|---|
Azure Cosmos DB [1] | X | X (Feature Store-client v0.5.0 en hoger) | X | X |
Azure MySQL (enkele server) | X | X | ||
Azure SQL Server | X |
Cosmos DB-compatibiliteitsnotities
Deze sectie bevat enkele belangrijke dingen waarmee u rekening moet houden bij het gebruik van Databricks Feature Store met Cosmos DB.
Werkruimten met Unity Catalog
In Databricks Runtime 12.2 LTS ML en hieronder is de Online Store-provider van Cosmos DB niet compatibel met werkruimten met Unity Catalog. Zowel Unity Catalog als de officiële Cosmos DB Spark-connector wijzigen Spark-catalogi. Wanneer u functies publiceert naar Cosmos DB vanuit een werkruimte met Unity Catalog in een cluster waarop Databricks Runtime 12.2 LTS ML of lager wordt uitgevoerd, kan er een schrijfconflict optreden waardoor het publiceren van de functieopslag naar Cosmos DB mislukt.
Als u Cosmos DB wilt gebruiken in een werkruimte met Unity Catalog, moet u een cluster met Databricks Runtime 13.0 ML of hoger gebruiken, of een cluster met Databricks Runtime 11.3 LTS ML of hoger met het clusterbeleid Onbeperkt of Gedeeld berekenen.
Spark-connector
Als u Azure Cosmos DB wilt gebruiken, moet het account worden gemaakt met de Core (SQL) API en moet de netwerkverbindingsmethode worden ingesteld op Alle netwerken. De juiste Azure Cosmos DB Spark 3 OLTP-connector voor SQL API moet zijn geïnstalleerd op het cluster. Databricks raadt u aan de nieuwste connectorversie voor Spark 3.2 te installeren totdat een connector voor Spark 3.3 wordt uitgebracht.
Maak geen database of container handmatig - gebruik publish_table()
De online winkel van Cosmos DB maakt gebruik van een ander schema dan de offlinestore. In de online winkel worden primaire sleutels met name opgeslagen als een gecombineerde sleutel in de kolom _feature_store_internal__primary_keys
.
Om ervoor te zorgen dat Feature Store toegang heeft tot de online winkel van Cosmos DB, moet u de tabel in de online winkel maken met behulp van publish_table()
. Maak geen database of container handmatig in Cosmos DB. publish_table()
doet dat automatisch voor u.
Batchgewijze functies publiceren naar een online winkel
U kunt een Databricks-taak maken en plannen om regelmatig bijgewerkte functies te publiceren. Deze taak kan ook de code bevatten voor het berekenen van de bijgewerkte functies, of u kunt afzonderlijke taken maken en uitvoeren om functie-updates te berekenen en publiceren.
Voor SQL-winkels gaat de volgende code ervan uit dat er al een onlinedatabase met de naam 'recommender_system' bestaat in de online winkel en overeenkomt met de naam van de offline winkel. Als er geen tabel met de naam 'customer_features' in de database staat, wordt er met deze code een gemaakt. Ook wordt ervan uitgegaan dat functies elke dag worden berekend en als een gepartitioneerde kolom _dt
worden opgeslagen.
In de volgende code wordt ervan uitgegaan dat u geheimen hebt gemaakt voor toegang tot deze online winkel.
Cosmos DB
Cosmos DB-ondersteuning is beschikbaar in alle versies van Feature Engineering in de Unity Catalog-client en de Feature Store-client v0.5.0 en hoger.
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-winkels
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'
)
Streamingfuncties publiceren naar een online winkel
Als u continu functies naar de online winkel wilt streamen, stelt u in 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
)
Geselecteerde functies publiceren naar een online winkel
Als u alleen geselecteerde functies naar de online winkel wilt publiceren, gebruikt u het features
argument om de naam(en) van de functie op te geven die u wilt publiceren. Primaire sleutels en tijdstempelsleutels worden altijd gepubliceerd. Als u het features
argument niet opgeeft of als de waarde Geen is, worden alle functies uit de offlinefunctietabel gepubliceerd.
Notitie
De hele offlinetabel moet een geldige functietabel zijn, zelfs als u slechts een subset met functies publiceert naar een onlinewinkel. Als de offlinetabel niet-ondersteunde gegevenstypen bevat, kunt u geen subset met functies van die tabel publiceren naar een online winkel.
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"]
)
Een functietabel publiceren naar een specifieke database
Geef in de online winkelspecificatie de databasenaam (database_name
) en de tabelnaam (table_name
) op. Als u deze parameters niet opgeeft, worden de naam van de offlinedatabase en functietabel gebruikt. database_name
moet al aanwezig zijn in de online winkel.
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>'
)
Een bestaande online functietabel of specifieke rijen overschrijven
Gebruik mode='overwrite'
het publish_table
gesprek. De onlinetabel wordt volledig overschreven door de gegevens in de offlinetabel.
Notitie
Azure Cosmos DB biedt geen ondersteuning voor de overschrijfmodus.
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
mode='overwrite'
)
Als u alleen bepaalde rijen wilt overschrijven, gebruikt u het filter_condition
argument:
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
filter_condition=f"_dt = '{str(datetime.date.today())}'",
mode='merge'
)
Een gepubliceerde tabel verwijderen uit een online winkel
Met Feature Store-client v0.12.0 en hoger kunt drop_online_table
u een gepubliceerde tabel verwijderen uit een online winkel. Wanneer u een gepubliceerde tabel verwijdert, drop_online_table
wordt de tabel verwijderd uit uw online winkelprovider en worden de metagegevens van het onlinearchief verwijderd uit Databricks.
fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
name='recommender_system.customer_features',
online_store = online_store
)
Notitie
drop_online_table
verwijdert de gepubliceerde tabel uit de online winkel. De functietabel in Databricks wordt niet verwijderd.- Voordat u een gepubliceerde tabel verwijdert, moet u ervoor zorgen dat de tabel niet wordt gebruikt voor het opzoeken van modelfuncties en geen andere downstreamafhankelijkheden heeft. De verwijdering kan niet ongedaan worden genomen en kan ertoe leiden dat afhankelijkheden mislukken.
- Als u wilt controleren op afhankelijkheden, kunt u overwegen om de sleutels voor de gepubliceerde tabel die u een dag wilt verwijderen te roteren voordat u deze uitvoert
drop_online_table
.