Compartir a través de


Publicación de características en un almacén de características

En este artículo se describe cómo publicar características en un almacén en línea para el servicio en tiempo real.

El Almacén de características de Databricks admite estos almacenes en línea:

Proveedor de almacén en línea Publicación con ingeniería de características en el catálogo de Unity Publicación con Workspace Feature Store Búsqueda de características en el servicio de modelos MLflow heredado Búsqueda de características en el servicio de modelos
Azure Cosmos DB [1] X X (cliente de Feature Store v0.5.0 y versiones posteriores) X X
Azure MySQL (Servidor único) X X
Azure SQL Server X

Notas de compatibilidad con Cosmos DB

En esta sección se incluyen algunas cosas importantes que hay que tener en cuenta al utilizar Databricks Feature Store con Cosmos DB.

Áreas de trabajo habilitadas para Unity Catalog

En Databricks Runtime 12.2 LTS ML e inferiores, el proveedor de tienda online Cosmos DB no es compatible con las áreas de trabajo habilitadas para Unity Catalog. Tanto Unity Catalog como el conector oficial Cosmos DB Spark modifican los catálogos de Spark. Cuando se publican características en Cosmos DB desde un área de trabajo habilitada para Unity Catalog en un clúster que ejecuta Databricks Runtime 12.2 LTS ML o inferior, puede producirse un conflicto de escritura que haga que la publicación de la tienda de características en Cosmos DB no se realice correctamente.

Para utilizar Cosmos DB en un área de trabajo habilitada para Unity Catalog, debe utilizar un clúster que ejecute Databricks Runtime 13.0 ML o superior, o un clúster que ejecute Databricks Runtime 11.3 LTS ML o superior con la política de clúster Sin restricciones o Proceso compartido.

Spark Connector

Para usar Azure Cosmos DB, la cuenta debe crearse con la API Core (SQL) y el método de conectividad de red debe establecerse en Todas las redes. El Conector OLTP de Azure Cosmos DB Spark 3 para SQL API correspondiente debe estar instalado en el clúster. Databricks recomienda instalar la versión más reciente del conector para Spark 3.2 hasta que se publique un conector para Spark 3.3.

No cree manualmente una base de datos o un contenedor: utilice publish_table()

El almacén en línea de Cosmos DB usa un esquema diferente al del almacén sin conexión. En concreto, en el almacén en línea, las claves principales se almacenan como una clave combinada en la columna _feature_store_internal__primary_keys.

Para asegurarse de que el Almacén de características pueda acceder al almacén en línea de Cosmos DB, debe crear la tabla en el almacén en línea mediante publish_table(). No cree manualmente una base de datos o un contenedor dentro de Cosmos DB. publish_table() lo hace por usted automáticamente.

Publicación de características procesadas por lotes en un almacén en línea

Puede crear y programar un trabajo de Databricks para publicar las características actualizadas de forma periódica. Este trabajo también puede incluir el código para calcular las características actualizadas, o bien puede crear y ejecutar trabajos independientes para calcular y publicar las actualizaciones de características.

En el caso de los almacenes SQL, en el código siguiente se asume que ya existe una base de datos en línea denominada "recommender_system" en el almacén en línea y que coincide con el nombre del almacén sin conexión. Si no hay ninguna tabla denominada "customer_features" en la base de datos, el código crea una. También se asume que las características se procesan cada día y se almacenan como una columna _dt con particiones.

En el código siguiente se asume que ha creado secretos para acceder a este almacén en línea.

Cosmos DB

La compatibilidad con Cosmos DB está disponible en todas las versiones de Feature Engineering en el cliente del catálogo de Unity y en el cliente de Feature Store v0.5.0 y versiones posteriores.

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'
)

Almacenes 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'
)

Publicación de características de streaming en un almacén en línea

Para hacer streaming continuo de las características al almacén en línea, establezca 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
)

Publicación de características seleccionadas en un almacén en línea

Para publicar solo las características seleccionadas en el almacén en línea, use el argumento features para especificar los nombres de características que se van a publicar. Las claves principales y las claves de marca de tiempo siempre se publican. Si no se especifica el argumento features o si el valor es Ninguno, se publican todas las características de la tabla de características sin conexión.

Nota:

Toda la tabla sin conexión debe ser una tabla de características válida aunque solo publique un subconjunto de características en una tienda en línea. Si la tabla sin conexión contiene tipos de datos no admitidos, no podrá publicar un subconjunto de características de esa tabla en un almacén en línea.

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

Publicación de una tabla de características en una base de datos específica

En la especificación del almacén en línea, especifique el nombre de la base de datos (database_name) y el nombre de la tabla (table_name). Si no especifica estos parámetros, se usan el nombre de la tabla de características y el nombre de la base de datos sin conexión. database_name ya debe existir en el almacén en línea.

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>'
)

Sobrescribir una tabla de características en línea existente o filas específicas

Use mode='overwrite' en la llamada a publish_table. Los datos de la tabla sin conexión sobrescriben por completo los de la tabla en línea.

Nota:

Azure Cosmos DB no admite el modo de sobrescritura.

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  mode='overwrite'
)

Para sobrescribir solo determinadas filas, use el argumento filter_condition:

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Eliminar una tabla publicada de una tienda en línea

Con el cliente Feature Store v0.12.0 y superior, puede utilizar drop_online_table para eliminar una tabla publicada de una tienda en línea. Cuando elimina una tabla publicada con drop_online_table, la tabla se elimina de su proveedor de tienda en línea y los metadatos de la tienda en línea se eliminan de Databricks.

fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
  name='recommender_system.customer_features',
  online_store = online_store
)

Nota:

  • drop_online_table elimina la tabla publicada de la tienda en línea. No elimina la tabla de características en Databricks.
  • Antes de eliminar una tabla publicada, debe asegurarse de que la tabla no se utiliza para la búsqueda de características de Model Serving y no tiene otras dependencias descendentes. La eliminación es irreversible y puede causar errores en las dependencias.
  • Para comprobar si existen dependencias, considere rotar las claves de la tabla publicada que planea eliminar durante un día antes de ejecutar drop_online_table.