Partilhar via


Publicar recursos em uma loja online

Este artigo descreve como publicar recursos em uma loja online para veiculação em tempo real.

A Databricks Feature Store suporta estas lojas online:

Fornecedor de loja online Publique com engenharia de recursos no catálogo Unity Publicar com o repositório de recursos de espaço de trabalho Pesquisa de recursos no serviço de modelo MLflow herdado Pesquisa de recursos no Model Serving
Azure Cosmos DB [1] X X (Feature Store client v0.5.0 e superior) X X
Azure MySQL (Servidor Único) X X
Azure SQL Server X

Notas de compatibilidade do Cosmos DB

Esta seção inclui algumas coisas importantes a ter em mente ao usar o Databricks Feature Store com o Cosmos DB.

Espaços de trabalho habilitados para catálogo Unity

No Databricks Runtime 12.2 LTS ML e inferior, o provedor de loja online do Cosmos DB não é compatível com espaços de trabalho habilitados para Unity Catalog. Tanto o Unity Catalog quanto o conector oficial do Cosmos DB Spark modificam os catálogos do Spark. Quando você publica recursos no Cosmos DB a partir de um espaço de trabalho habilitado para Catálogo Unity em um cluster que executa o Databricks Runtime 12.2 LTS ML ou inferior, pode haver um conflito de gravação que faz com que a publicação do Feature Store no Cosmos DB falhe.

Para usar o Cosmos DB em um espaço de trabalho habilitado para Catálogo Unity, você deve usar um cluster executando o Databricks Runtime 13.0 ML ou superior, ou um cluster executando o Databricks Runtime 11.3 LTS ML ou superior com a política de cluster Irrestrito ou Computação Compartilhada.

Conector Spark

Para usar o Azure Cosmos DB, a conta deve ser criada com a API Core (SQL) e o método de conectividade de rede deve ser definido como Todas as redes. O conector OLTP do Azure Cosmos DB Spark 3 apropriado para API SQL deve ser instalado no cluster. O Databricks recomenda que você instale a versão mais recente do conector para o Spark 3.2 até que um conector para o Spark 3.3 seja lançado.

Não crie manualmente um banco de dados ou contêiner - use publish_table()

A loja online do Cosmos DB usa um esquema diferente da loja offline. Especificamente, na loja online, as chaves primárias são armazenadas como uma chave combinada na coluna _feature_store_internal__primary_keys.

Para garantir que o Feature Store possa acessar a loja online do Cosmos DB, você deve criar a tabela na loja online usando publish_table(). Não crie manualmente um banco de dados ou contêiner dentro do Cosmos DB. publish_table() faz isso por você automaticamente.

Publicar recursos computados em lote em uma loja online

Você pode criar e agendar um trabalho Databricks para publicar regularmente recursos atualizados. Esse trabalho também pode incluir o código para calcular os recursos atualizados ou você pode criar e executar trabalhos separados para calcular e publicar atualizações de recursos.

Para repositórios SQL, o código a seguir pressupõe que um banco de dados online chamado "recommender_system" já existe na loja online e corresponde ao nome da loja offline. Se não houver nenhuma tabela chamada "customer_features" no banco de dados, esse código criará uma. Ele também assume que os recursos são computados todos os dias e armazenados como uma coluna _dtparticionada.

O código a seguir pressupõe que você criou segredos para acessar esta loja online.

Cosmos DB

O suporte ao Cosmos DB está disponível em todas as versões do Feature Engineering no cliente Unity Catalog e no cliente Feature Store v0.5.0 e superior.

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

Repositórios 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'
)

Publicar recursos de streaming em uma loja online

Para transmitir continuamente recursos para a loja online, defina 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
)

Publicar recursos selecionados em uma loja online

Para publicar apenas recursos selecionados na loja online, use o features argumento para especificar o(s) nome(s) do(s) recurso(s) a publicar. As chaves primárias e as chaves de carimbo de data/hora são sempre publicadas. Se você não especificar o features argumento ou se o valor for Nenhum, todos os recursos da tabela de recursos offline serão publicados.

Nota

Toda a tabela offline deve ser uma tabela de recursos válida, mesmo que você esteja publicando apenas um subconjunto de recursos em uma loja online. Se a tabela offline contiver tipos de dados sem suporte, não será possível publicar um subconjunto de recursos dessa tabela em uma loja 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"]
)

Publicar uma tabela de recursos em um banco de dados específico

Na especificação da loja online, especifique o nome do banco de dados (database_name) e o nome da tabela (table_name). Se você não especificar esses parâmetros, o nome do banco de dados offline e o nome da tabela de recursos serão usados. database_name já deve existir na loja 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>'
)

Substituir uma tabela de recursos online existente ou linhas específicas

Use mode='overwrite' na publish_table chamada. A tabela online é completamente substituída pelos dados na tabela offline.

Nota

O Azure Cosmos DB não oferece suporte ao modo de substituição.

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

Para substituir apenas determinadas linhas, use o filter_condition argumento:

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

Eliminar uma tabela publicada de uma loja online

Com o cliente da Feature Store v0.12.0 e superior, você pode usar drop_online_table para excluir uma tabela publicada de uma loja online. Quando você exclui uma tabela publicada com drop_online_tableo , a tabela é excluída do provedor da loja online e os metadados da loja online são removidos do 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 Exclui a tabela publicada da loja online. Ele não exclui a tabela de recursos no Databricks.
  • Antes de excluir uma tabela publicada, você deve garantir que a tabela não seja usada para pesquisa de recurso de Serviço de Modelo e não tenha outras dependências a jusante. A exclusão é irreversível e pode causar falhas nas dependências.
  • Para verificar se há dependências, considere girar as chaves da tabela publicada que você planeja excluir por um dia antes de executar drop_online_tableo .