Publikowanie funkcji w sklepie online
W tym artykule opisano sposób publikowania funkcji w sklepie online na potrzeby obsługi w czasie rzeczywistym.
Usługa Databricks Feature Store obsługuje następujące sklepy online:
Dostawca sklepu online | Publikowanie z użyciem feature engineering w Unity Catalog | Publikowanie przy użyciu starszego magazynu funkcji Workspace | Wyszukiwanie funkcji w starszej wersji usługi MLflow Model Serving | Wyszukiwanie funkcji w funkcji obsługującej model |
---|---|---|---|---|
Azure Cosmos DB [1] | X | X (klient magazynu funkcji w wersji 0.5.0 lub nowszej) | X | X |
Azure MySQL (pojedynczy serwer) | X | X | ||
Azure SQL Server | X |
Uwagi dotyczące zgodności usługi Cosmos DB
Ta sekcja zawiera kilka ważnych kwestii, które należy wziąć pod uwagę podczas korzystania z magazynu funkcji usługi Databricks z usługą Cosmos DB.
Obszary robocze z obsługą katalogu Unity
W wersjach Databricks Runtime 12.2 LTS ML i wcześniejszych dostawca magazynu online usługi Cosmos DB nie jest zgodny z obszarami roboczymi obsługującymi Unity Catalog. Katalog Unity i oficjalny łącznik Spark usługi Cosmos DB modyfikują katalogi Spark. Podczas publikowania cech do usługi Cosmos DB z obszaru roboczego z włączonym katalogiem Unity na klastrze działającym w środowisku Databricks Runtime 12.2 LTS ML lub poniżej, może dojść do konfliktu zapisu, który powoduje błąd publikowania cech w usłudze Cosmos DB.
Aby używać Cosmos DB w obszarze roboczym z obsługą Unity Catalog, należy użyć klastra z uruchomionym środowiskiem Databricks Runtime 13.0 ML lub nowszym, albo klastra z systemem Databricks Runtime 11.3 LTS ML lub nowszym z polityką klastra Unrestricted lub Shared Compute.
Łącznik Spark
Aby korzystać z usługi Azure Cosmos DB, konto musi zostać utworzone przy użyciu interfejsu API Core (SQL), a metoda łączności sieciowej musi być ustawiona na Wszystkie sieci. Odpowiedni łącznik OLTP platformy Spark 3 usługi Azure Cosmos DB dla interfejsu API SQL musi być zainstalowany w klastrze. Usługa Databricks zaleca zainstalowanie najnowszej wersji łącznika dla platformy Spark 3.2 do momentu wydania łącznika dla platformy Spark 3.3.
Nie twórz ręcznie bazy danych lub kontenera — użyj polecenia publish_table()
Sklep online usługi Cosmos DB używa innego schematu niż sklep offline. W szczególności w sklepie online klucze podstawowe są przechowywane jako klucz połączony w kolumnie _feature_store_internal__primary_keys
.
Aby mieć pewność, że magazyn funkcji może uzyskać dostęp do sklepu online usługi Cosmos DB, należy utworzyć tabelę w sklepie online przy użyciu publish_table()
. Nie twórz ręcznie bazy danych ani kontenera w usłudze Cosmos DB.
publish_table()
robi to automatycznie.
Publikowanie funkcji obliczeniowych wsadowych w sklepie online
Możesz utworzyć i zaplanować zadanie usługi Databricks, aby regularnie publikować zaktualizowane funkcje. To zadanie może również zawierać kod umożliwiający obliczenie zaktualizowanych funkcji lub utworzenie i uruchomienie oddzielnych zadań w celu obliczenia i opublikowania aktualizacji funkcji.
W przypadku magazynów SQL poniższy kod zakłada, że baza danych online o nazwie "recommender_system" już istnieje w sklepie online i odpowiada nazwie magazynu offline. Jeśli w bazie danych nie ma tabeli o nazwie "customer_features", ten kod go tworzy. Przyjęto również założenie, że funkcje są obliczane każdego dnia i przechowywane jako kolumna partycjonowana _dt
.
Poniższy kod zakłada, że utworzono wpisy tajne w celu uzyskania dostępu do tego sklepu online.
Cosmos DB
Obsługa usługi Cosmos DB jest dostępna we wszystkich wersjach Feature Engineering w kliencie Katalogu Unity i kliencie Feature Store w wersji 0.5.0 lub nowszej.
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'
)
Magazyny 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'
)
Publikowanie funkcji przesyłania strumieniowego w sklepie online
Aby stale udostępniać funkcje w sklepie online, ustaw opcję 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
)
Publikowanie wybranych funkcji w sklepie online
Aby opublikować tylko wybrane funkcje w sklepie online, użyj argumentu features
, aby określić nazwy funkcji do opublikowania. Klucze podstawowe i klucze sygnatury czasowej są zawsze publikowane. Jeśli nie określisz argumentu features
lub jeśli wartość to Brak, zostaną opublikowane wszystkie funkcje z tabeli funkcji trybu offline.
Uwaga
Cała tabela offline musi być prawidłową tabelą funkcji, nawet jeśli publikujesz tylko podzbiór funkcji w sklepie online. Jeśli tabela offline zawiera nieobsługiwane typy danych , nie można opublikować podzbioru funkcji z tej tabeli do magazynu 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"]
)
Publikowanie tabeli funkcji w określonej bazie danych
W specyfikacji sklepu onlineokreśl nazwę bazy danych (database_name
) i nazwę tabeli (table_name
). Jeśli nie określisz tych parametrów, używana jest nazwa bazy danych trybu offline i nazwa tabeli funkcji.
database_name
musi już istnieć w sklepie 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>'
)
Nadpisz istniejącą tablicę funkcji online lub określone wiersze
Użyj mode='overwrite'
polecenia w wywołaniu publish_table
. Tabela online jest całkowicie zastępowana przez dane w tabeli offline.
Uwaga
Usługa Azure Cosmos DB nie obsługuje trybu zastępowania.
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
mode='overwrite'
)
Aby zastąpić tylko niektóre wiersze, użyj argumentu filter_condition
:
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
filter_condition=f"_dt = '{str(datetime.date.today())}'",
mode='merge'
)
Usuwanie opublikowanej tabeli ze sklepu online
W przypadku klienta Feature Store w wersji 0.12.0 lub nowszej można użyć drop_online_table
, aby usunąć opublikowaną tabelę ze sklepu online. Po usunięciu opublikowanej tabeli z drop_online_table
tabela zostanie usunięta od dostawcy sklepu internetowego, a metadane sklepu internetowego zostaną usunięte z Databricks.
fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
name='recommender_system.customer_features',
online_store = online_store
)
Uwaga
-
drop_online_table
usuwa opublikowaną tabelę ze sklepu online. Nie usuwa tabeli funkcji w usłudze Databricks. - Przed usunięciem opublikowanej tabeli należy upewnić się, że tabela nie jest używana do wyszukiwania funkcji obsługi modelu i nie ma innych zależności podrzędnych. Usunięcie jest nieodwracalne i może spowodować niepowodzenie zależności.
- Aby sprawdzić, czy istnieją zależności, rozważ rotację kluczy dla opublikowanej tabeli, którą planujesz usunąć na dzień przed wykonaniem
drop_online_table
.