Обслуживание представлений функций

Это важно

Эта функция доступна в общедоступной предварительной версии. Администраторы рабочей области могут управлять доступом к этой функции на странице "Предварительные версии ". См. статью "Управление предварительными версиями Azure Databricks".

Вы можете использовать представления признаков в онлайн-режиме двумя способами:

  • Обслуживание моделей: развертывание модели, обученной в представлениях компонентов. Конечная точка автоматически ищет значения функций из интернет-магазина, используя происхождение, отслеживаемое при регистрации модели. Используйте это для обслуживания прогнозов модели.
  • Сервинг признаков: разверните FeatureSpec, который напрямую ссылается на представления признаков, без модели. Эндпоинт возвращает найденные значения признаков. Используйте это, если приложению требуются значения признаков, а не прогнозы моделей.

Оба подхода считывают предварительно вычисляемые значения признаков из интернет-магазина, поэтому необходимо сначала материализовать функции в интернет-магазине.

Модели, обученные с помощью функций из Databricks, автоматически отслеживают происхождение функций, на которые они были обучены. При развертывании в качестве конечных точек службы моделей эти модели используют каталог Unity для поиска функций из интернет-магазинов.

Разрешения

Чтобы обслуживать признак, принципал, создающий конечную точку обслуживания модели, должен иметь разрешение SELECT на таблицу Unity Catalog, лежащую в основе материализованного признака. Онлайн-запросы считываются непосредственно из материализованной таблицы, поэтому именно SELECT на уровне таблицы предоставляет доступ для выдачи. Описание привилегий см. в разделе SELECT.

Поскольку материализованная таблица может содержать более одного признака, предоставление SELECT к ней открывает доступ ко всем признакам в этой таблице, а не только к тому, который вы намерены предоставлять. Перед предоставлением доступа к обслуживанию убедитесь, что все функции, которым предоставлен общий доступ к таблице, можно предоставить субъекту общий доступ. Чтобы ограничить экспозицию, материализуйте конфиденциальные функции отдельно.

Чтобы предоставить этот доступ, не определяя таблицы вручную, используйте FeatureEngineeringClient.grant_feature_serving_access. На основе модели или спецификации признаков система сопоставляет каждый признак с соответствующей онлайн-таблицей, предоставляет права SELECT (а также USE CATALOG и USE SCHEMA) на эти таблицы указанным вами субъектам безопасности и возвращает отчет по каждой таблице и дополнительным признакам, к которым открывает доступ эта выдача прав. Передайте dry_run=True, чтобы просмотреть отчет перед предоставлением.

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",
)

Развертывание конечной точки обслуживания модели

Используйте существующую конечную точку обслуживания модели или используйте пакет SDK Databricks для создания новой. Модель должна быть зарегистрирована в каталоге Unity.

В следующем коде показано, как создать конечную точку обслуживания модели. Дополнительные сведения см. в статье "Создание пользовательских конечных точек обслуживания моделей".

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,
            )
        ],
    ),
)

Запрос конечной точки

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"},
    ],
)

Запрос конечной точки с помощью функций RequestSource

Если модель обучена функциями RequestSource , полезные данные запроса также должны содержать все RequestSource столбцы. Эти столбцы были добавлены в подпись модели MLflow во время log_model, поэтому схема API конечной точки отражает обязательные поля запроса.

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)
        },
    ],
)

Ключи сущностей используются для поиска функций, поддерживаемых таблицами, из интернет-магазина. RequestSource столбцы передаются непосредственно в модель.

Также можно использовать 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"
      }
    ]
  }'

Предоставление функций с помощью FeatureSpec

Чтобы обслуживать представления признаков без модели, создайте объект FeatureSpec, который ссылается на признаки, и разверните его в конечной точке обслуживания признаков. Эндпоинт возвращает найденные значения признаков для ключей сущностей, указанных в запросе.

Перед созданием конечной точки компоненты должны быть зарегистрированы в каталоге Unity и материализованы в интернет-магазин .

Note

Объект FeatureSpec, содержащий представления функций, не может также содержать определения FeatureLookup или FeatureFunction. Feature Views нельзя смешивать с этими определениями в рамках одного и того же 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,
        )
    ),
)

Запросите конечную точку с помощью ключей сущностей, используемых для поиска материализованных функций:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

response = w.serving_endpoints.query(
    name="transaction-features",
    dataframe_records=[{"user_id": "user_123"}],
)

Дополнительные сведения о конечных точках обслуживания компонентов см. в статье "Обслуживание компонентов".