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 características no Unity Catalog | Publicar com a Loja de Funcionalidades do Espaço de Trabalho antiga | 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 com suporte a Unity Catalog
No Databricks Runtime 12.2 LTS ML e versões anteriores, o provedor de loja online do Cosmos DB não é compatível com espaços de trabalho habilitados para Unity Catalog. Tanto o Catálogo Unity quanto o conector oficial do Cosmos DB Spark modificam os catálogos do Spark. Quando publica funcionalidades no Cosmos DB a partir de um espaço de trabalho com o Catálogo Unity ativado em um cluster que executa o Databricks Runtime 12.2 LTS ML ou inferior, pode ocorrer um conflito de gravação, resultando na falha da publicação do Feature Store no Cosmos DB.
Para usar o Cosmos DB num espaço de trabalho com Catálogo Unity ativado, deve utilizar um cluster a executar o Databricks Runtime 13.0 ML ou superior, ou um cluster a executar o Databricks Runtime 11.3 LTS ML ou superior com a política de cluster Irrestrito ou Computação Partilhada.
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 a 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 particionada _dt
.
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 argumento features
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 não suportados, 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çãoda loja online 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>'
)
Sobrescrever uma tabela de funcionalidades 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_table
, 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, deve garantir que a tabela não seja usada para a pesquisa de recursos do recurso Model Serving e não tenha outras dependências subsequentes. 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_table
.