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
.