Udostępnij za pośrednictwem


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_tabletabela 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.