Compartilhar via


Publicar os recursos em um repositório online

Este artigo descreve como publicar recursos em um repositório online para o fornecimento em tempo real.

O Repositório de recursos do Databricks dá suporte a essas lojas online:

Provedor de repositório online Publicação com a Engenharia de Recursos no Catálogo do Unity Publicação com o Repositório de Recursos do Workspace Pesquisa de recursos no Serviço de Modelo Herdado do MLflow Pesquisa de recursos no Serviço de Modelo
Azure Cosmos DB [1] X X (Cliente do Repositório de Recursos v0.5.0 e superior) X X
Azure MySQL (Servidor Único) X X
Azure SQL Server X

Observações de compatibilidade do Cosmos DB

Esta seção inclui algumas coisas importantes a ter em mente ao usar o Repositório de Recursos do Databricks com o Cosmos DB.

Workspaces habilitados para o Unity Catalog

No Databricks Runtime 12.2 LTS ML e anteriores, o provedor de repositório online do Cosmos DB não é compatível com workspaces habilitados para o Unity Catalog. Tanto o Unity Catalog e o conector Spark do Cosmos DB oficial modificam os catálogos do Spark. Quando você publica recursos no Cosmos DB a partir de um workspace habilitado para o Unity Catalog em um cluster que executa o Databricks Runtime 12.2 LTS ML ou anteriores, pode haver um conflito de gravação que faz com que a publicação do Repositório de Recursos no Cosmos DB falhe.

Para usar o Cosmos DB em um workspace habilitado para o Unity Catalog, você deve usar um cluster executando o Databricks Runtime 13.0 ML ou posterior ou um cluster executando o Databricks Runtime 11.3 LTS ML ou posterior com a política de cluster Irrestrito ou Computação Compartilhada.

Conector do Spark

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

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

O repositório online do Cosmos DB usa um esquema diferente do repositório offline. Especificamente, no repositório online, as chaves primárias são armazenadas como uma chave combinada na coluna _feature_store_internal__primary_keys.

Para garantir que o Repositório de Recursos possa acessar o repositório online do Cosmos DB, você precisa criar a tabela no repositório online usando publish_table(). Não crie manualmente um banco de dados ou contêiner dentro do Cosmos DB. publish_table() faz isso para você automaticamente.

Publicar recursos com a computação em lote em um repositório online

Você pode criar e agendar um trabalho do Databricks para publicar regularmente os recursos atualizados. Esse trabalho também pode incluir o código necessário 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á exista no repositório online e corresponda ao nome do repositório offline. Se não houver uma tabela chamada “customer_features” no banco de dados, esse código criará uma. Ele também pressupõe que os recursos sejam computados por dia e armazenados como uma coluna _dt particionada.

O código a seguir pressupõe que você tenha criado segredos para acessar esse repositório online.

Cosmos DB

O suporte ao Cosmos DB está disponível em todas as versões do cliente da Engenharia de Recursos no Catálogo do Unity e no cliente do Repositório de Recursos 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 um repositório online

Para transmitir continuamente os recursos para o repositório 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 um repositório online

Para publicar somente os recursos selecionados no repositório online, use o argumento features para especificar os nomes dos recursos a serem publicados. Chaves primárias e chaves de carimbo de data/hora são sempre publicadas. Se você não especificar o argumento features ou se o valor for Nenhum, todos os recursos da tabela de recursos offline serão publicados.

Observação

A tabela offline inteira deve ser uma tabela de recursos válida, mesmo ao publicar apenas um subconjunto de recursos em um armazenamento online. Se a tabela offline contiver tipos de dados sem suporte, não será possível publicar um subconjunto de recursos dela em um armazenamento 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 do repositório 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á precisa existir no repositório 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 chamada a publish_table. A tabela online será substituída por completo pelos dados da tabela offline.

Observação

O Azure Cosmos DB não dá 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 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'
)

Excluir uma tabela publicada de um repositório online

Com o cliente do Repositório de Recursos v0.12.0 e posterior, você pode usar drop_online_table para excluir uma tabela publicada de um repositório online. Quando você exclui uma tabela publicada com drop_online_table, a tabela é excluída do seu provedor de repositório online e os metadados do repositório 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
)

Observação

  • drop_online_table exclui a tabela publicada do repositório 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 a pesquisa de recursos do Serviço de Modelo e não tenha outras dependências downstream. A exclusão é irreversível e pode causar falha nas dependências.
  • Para verificar se há dependências, considere fazer a rotação de chaves para a tabela publicada que você planeja excluir por um dia antes de executar drop_online_table.