Publicar recursos em uma loja online de terceiros

Publique tabelas de funcionalidades numa loja online de terceiros para disponibilizar funcionalidades para serviço em tempo real e baixa latência. Pode publicar funcionalidades em lote ou streaming, um subconjunto selecionado de funcionalidades, ou numa base de dados específica.

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 características no contexto do Model Serving
Azure Cosmos DB [1] X X (cliente do Feature Store versão 0.5.0 e superior) X
Azure MySQL (Servidor Único) 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.

Compatibilidade com Databricks Runtime

O provedor de loja online do Cosmos DB não é compatível com o Databricks Runtime 17.0 ML ou superior.

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 Azure Cosmos DB Spark 3 OLTP Connector for SQL API apropriado 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 características calculadas em lote numa loja online

Você pode criar e agendar uma tarefa no Databricks para publicar regularmente funcionalidades atualizadas. 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
)

Nota

O streaming para o DynamoDB requer um cluster de computação clássico com modo de acesso dedicado (anteriormente utilizador único). Veja Publicar funcionalidades computadas em lote numa loja online.

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 timestamp 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 , especifique o nome da base de dados () e o nome da tabela (). 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>'
)

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 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 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 fazer com que dependências falhem.
  • 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.