Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Widoki funkcji można udostępniać w trybie online na dwa sposoby:
- Obsługa modelu: wdrażanie modelu, który został wytrenowany w widokach funkcji. Punkt końcowy automatycznie wyszukuje lub oblicza wartości cech, wykorzystując linię genealogiczną śledzoną podczas logowania modelu. Ta funkcja służy do obsługi przewidywań modelu.
-
Obsługa funkcji: wdróż obiekt
FeatureSpec, który odwołuje się bezpośrednio do widoków funkcji bez modelu. Punkt końcowy zwraca żądane wyniki funkcji. Użyj tej funkcji, gdy aplikacja potrzebuje wartości funkcji, a nie przewidywań modelu.
Oba podejścia obsługują funkcje wstępnie obliczane oraz obliczane na żądanie. Funkcje końcowe oparte na tabelach i strumieniach muszą mieć obsługiwane materializacje online.
RequestSource dostarcza wartości z żądania i CustomUDF oblicza funkcje na żądanie. W przypadku CustomUDF z FeatureViewSource obsługiwanie automatycznie rozwiązuje zależności nadrzędne i ocenia graf zależności funkcji.
Zarejestruj żądane funkcje oraz wszystkie ich przechodnie funkcje w Unity Catalog. Materializuj tylko liście oparte na tabelach i strumieniach, a nie cechy obliczane w czasie żądania ani pochodne CustomUDF.
uprawnienia
Aby udostępniać cechę, podmiot tworzący punkt końcowy udostępniania modelu musi mieć uprawnienie SELECT do tabeli Unity Catalog, która stanowi podstawę zmaterializowanej cechy. Wyszukiwania online odczytują dane bezpośrednio z tabeli zmaterializowanej, więc to SELECT na poziomie tabeli przyznaje dostęp do obsługi. Opis uprawnień znajdziesz w SELECT.
Ze względu na to, że zmaterializowana tabela może przechowywać więcej niż jedną funkcję, przyznanie SELECT jej daje dostęp do każdej funkcji w tej tabeli, a nie tylko tej, która ma być obsługiwana. Przed przyznaniem dostępu do obsługi upewnij się, że każdą funkcję współdzielącą tę tabelę można udostępnić temu podmiotowi. Aby ograniczyć narażenie, zmaterializuj cechy wrażliwe oddzielnie.
Aby udzielić tego dostępu bez rozpoznawania tabel ręcznie, użyj polecenia FeatureEngineeringClient.grant_feature_serving_access. Biorąc pod uwagę specyfikację modelu lub funkcji, rozwiązuje każdą funkcję w tabeli online, przyznaje SELECT (wraz z USE CATALOG i USE SCHEMA) w tych tabelach określonym podmiotom zabezpieczeń i zwraca raport każdej tabeli oraz dodatkowe funkcje uwidaczniane przez grant. Przekaż dry_run=True, aby wyświetlić podgląd raportu przed przyznaniem uprawnień.
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
# Preview the tables and the features each grant would expose.
report = fe.grant_feature_serving_access(
grant_to=["serving-principal@example.com"],
model_uri="models:/main.ecommerce.fraud_model/1",
dry_run=True,
)
print(report)
# Grant SELECT on the resolved online tables.
fe.grant_feature_serving_access(
grant_to=["serving-principal@example.com"],
model_uri="models:/main.ecommerce.fraud_model/1",
)
Uruchom punkt końcowy obsługujący model
Użyj istniejącego modelu obsługującego punkt końcowy lub użyj zestawu SDK usługi Databricks, aby utworzyć nowy. Model musi być zarejestrowany w Unity Catalog.
Jeśli CustomUDF korzysta z funkcji definiowanej przez użytkownika (UDF), która importuje pakiety języka Python, przekaż je jawnie za pomocą extra_pip_requirements podczas wywoływania log_model. Zobacz Niestandardowe zależności UDF.
Poniższy kod pokazuje, jak utworzyć nowy model obsługujący punkt końcowy. Aby uzyskać więcej informacji, zobacz Tworzenie niestandardowych punktów końcowych obsługujących model.
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput
w = WorkspaceClient()
endpoint_name = "fraud-detection-endpoint"
model_name = "main.ecommerce.fraud_model"
w.serving_endpoints.create(
name=endpoint_name,
config=EndpointCoreConfigInput(
name=endpoint_name,
served_entities=[
ServedEntityInput(
entity_name=model_name,
entity_version=1,
max_provisioned_concurrency=4,
min_provisioned_concurrency=0,
)
],
),
)
Wykonywanie zapytań względem punktu końcowego
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
response = w.serving_endpoints.query(
name="fraud-detection-endpoint",
dataframe_records=[
{"user_id": "user_123", "transaction_time": "2026-03-01T12:00:00"},
],
)
Wykonywanie zapytań dotyczących punktu końcowego za pomocą funkcji RequestSource
Jeśli model został wytrenowany z funkcjami RequestSource , ładunek żądania musi również zawierać wszystkie RequestSource kolumny. Te kolumny zostały dodane do podpisu modelu MLflow w czasie log_model, więc schemat interfejsu API punktu końcowego odzwierciedla wymagane pola żądania.
response = w.serving_endpoints.query(
name="fraud-detection-endpoint",
dataframe_records=[
{
"user_id": "user_123",
"transaction_time": "2026-03-01T12:00:00",
"transaction_amount": 275.30, # RequestSource column
"vendor_id": "v_42", # RequestSource column (also used as entity key)
},
],
)
Klucze jednostek są używane do wyszukiwania funkcji opartych na tabelach ze sklepu online.
ColumnSelection Funkcja może przekazać do modelu wartość RequestSource. Cecha CustomUDF transformuje swoje żądania wejściowe zanim model wykorzysta wynik.
Możesz również użyć curl:
curl -X POST "https://<workspace>.cloud.databricks.com/serving-endpoints/<endpoint>/invocations" \
-H "Authorization: Bearer $DATABRICKS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dataframe_records": [
{
"user_id": "user_123",
"transaction_time": "2026-03-01T12:00:00",
"transaction_amount": 275.30,
"vendor_id": "v_42"
}
]
}'
Udostępniaj funkcje za pomocą FeatureSpec
Aby obsłużyć widoki funkcji bez modelu, utwórz obiekt FeatureSpec odwołujący się do funkcji i wdróż go w punkcie końcowym obsługującym funkcje. Punkt końcowy zwraca tylko wyniki funkcji wymagane w specyfikacji. Automatycznie oblicza wartości pośrednie, nie zwracając ich, chyba że również o nie zażądasz.
Zarejestruj wszystkie cechy w Unity Catalog i utwórz obsługiwane materializacje online dla elementów końcowych opartych na tabelach i strumieniach przed utworzeniem punktu końcowego.
Note
Obiekt FeatureSpec zawierający widoki funkcji nie może również zawierać FeatureLookup ani FeatureFunction definicji. Widoków funkcji nie można mieszać z tymi definicjami w tym samym FeatureSpec.
from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities.feature_serving_endpoint import (
EndpointCoreConfig,
ServedEntity,
)
fe = FeatureEngineeringClient()
# 1. Retrieve a registered Feature View
agg_feature = fe.get_feature(full_name="main.ecommerce.amount_sum_sliding_7d_1d")
# 2. Create a FeatureSpec that includes the Feature View
feature_spec_name = "main.ecommerce.transaction_feature_spec"
fe.create_feature_spec(name=feature_spec_name, features=[agg_feature])
# 3. Deploy a Feature Serving endpoint backed by the FeatureSpec
fe.create_feature_serving_endpoint(
name="transaction-features",
config=EndpointCoreConfig(
served_entities=ServedEntity(
feature_spec_name=feature_spec_name,
workload_size="Small",
scale_to_zero_enabled=True,
)
),
)
Wykonaj zapytanie dotyczące punktu końcowego przy użyciu kluczy jednostek używanych do wyszukiwania zmaterializowanych funkcji:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
response = w.serving_endpoints.query(
name="transaction-features",
dataframe_records=[{"user_id": "user_123"}],
)
Więcej informacji o endpointach Feature Serving można znaleźć w Serwowanie tabel cech.
Funkcje Serve CustomUDF i ich zależności
Ten przykład obsługuje funkcje transakcyjne i marże zdefiniowane w przykładach CustomUDF i FeatureViewSource . Użyj wersji databricks-feature-engineering 0.18.0 lub nowszej dla interfejsów API Feature Views.
-
log_transaction_amountstosujemain.ecommerce.log_amount_udfdo wartościtransaction_amountżądania za pomocą biblioteki NumPy. -
marginużywaFeatureViewSourcedo obliczania marginesu zrevenue_sum_7dicost_sum_7d. Te funkcje źródłowe używającustomer_idjako klucza encji orazevent_timejako kolumny szeregu czasowego.
Zarejestruj zarówno cechy wyjściowe, jak i każdą cechę źródłową przed utworzeniem specyfikacji. W tym przykładzie zmaterializuj online tylko liście cost_sum_7d i revenue_sum_7d. Serving sprawdza ich wartości i oblicza margin dla każdego żądania.
Pobierz zarejestrowane Feature obiekty i przekaż je do create_feature_spec. Zadeklaruj bibliotekę NumPy na potrzeby wykonywania online, nawet jeśli jest już uwzględniona w klauzuli ENVIRONMENT funkcji UDF:
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
log_transaction_amount = fe.get_feature(
full_name="main.ecommerce.log_transaction_amount"
)
margin = fe.get_feature(full_name="main.ecommerce.margin")
fe.create_feature_spec(
name="main.ecommerce.derived_transaction_features",
features=[log_transaction_amount, margin],
extra_pip_requirements=["numpy==1.26.4"],
)
Postępuj zgodnie z powyższymi krokami tworzenia punktów końcowych, używając feature_spec_name="main.ecommerce.derived_transaction_features" i nazwy punktu, takiej jak derived-transaction-features. Po gotowości punktu końcowego podaj klucz wyszukiwania oraz wartość czasu żądania:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
response = w.serving_endpoints.query(
name="derived-transaction-features",
dataframe_records=[
{"customer_id": "customer_123", "transaction_amount": 99.0},
],
)
Odpowiedź zawiera jedynie żądane log_transaction_amount i margin wyjściowe, a nie wartości przychodów i kosztów pośrednich. Informacje o formatach zależności, uprawnieniach pakietów wheel i rozwiązywaniu problemów z instalacją znajdziesz w sekcji Dodawanie zależności języka Python.