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 za pomocą inżynierii funkcji w wykazie aparatu Unity | 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ą wykazu aparatu Unity
W środowisku Databricks Runtime 12.2 LTS ML i poniżej dostawca magazynu online usługi Cosmos DB nie jest zgodny z obszarami roboczymi obsługującymi wykaz aparatu Unity. Zarówno wykaz aparatu Unity, jak i oficjalny łącznik Platformy Spark usługi Cosmos DB modyfikują katalogi platformy Spark. W przypadku publikowania funkcji w usłudze Cosmos DB z obszaru roboczego z obsługą wykazu aparatu Unity w klastrze z uruchomionym środowiskiem Databricks Runtime 12.2 LTS ML lub poniżej może wystąpić konflikt zapisu, który powoduje niepowodzenie publikowania magazynu funkcji w usłudze Cosmos DB.
Aby używać usługi Cosmos DB w obszarze roboczym z obsługą wykazu aparatu Unity, należy użyć klastra z uruchomionym środowiskiem Databricks Runtime 13.0 ML lub nowszym albo klastrem z uruchomionym środowiskiem Databricks Runtime 11.3 LTS ML lub nowszym z zasadami klastra Bez ograniczeń lub Współdzielone zasoby obliczeniowe.
Łącznik Spark
Aby można było 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 Wartość 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()
Magazyn online usługi Cosmos DB używa innego schematu niż magazyn 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 polecenia 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 _dt
partycjonowana .
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 inżynierii funkcji w kliencie katalogu aparatu Unity i kliencie magazynu funkcji 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 przesyłać strumieniowo funkcje do sklepu online, ustaw wartość 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 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>'
)
Zastępowanie istniejącej tabeli funkcji online lub określonych wierszy
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 magazynu funkcji w wersji 0.12.0 lub nowszej można drop_online_table
usunąć opublikowaną tabelę ze sklepu online. Po usunięciu opublikowanej tabeli za pomocą polecenia drop_online_table
tabela zostanie usunięta z dostawcy sklepu online, a metadane magazynu online zostaną usunięte z usługi 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 polecenia
drop_online_table
.