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 za pomocą magazynu funkcji obszaru roboczego 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. Odpowiednie Połączenie OLTP platformy Spark 3 usługi Azure Cosmos DB dla interfejsu API SQL muszą być zainstalowane 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 _dtpartycjonowana .

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.

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 online okreś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>'
)

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