Databricks Lojas de recursos on-line
Databricks Online repositório de recursos é uma solução de alto desempenho e escalável para servir dados de recursos para aplicações online e modelo de machine learning em tempo real. Com tecnologia Databricks Lakebase, o repositório de recursos online oferece acesso de baixa latência aos dados de recursos em alta escala, mantendo a consistência com suas tabelas de recursos offline.
Os principais casos de uso do repositório de recursos on-line incluem:
- Servir recurso para aplicativos reais de tempo, como sistemas de recomendação, detecção de fraude e mecanismos de personalização usando o endpoint Feature Serving.
- Pesquisa automática de recurso para inferência de tempo real no endpoint do modelo servindo.
O repositório de recursos online suporta apenas instâncias de provisionamento Lakebase . Para informações sobre disponibilidade regional e opções de capacidade, consulte Instâncias de provisionamento do Lakebase.
Requisitos
Databricks O recurso on-line Stores requer Databricks Runtime 16.4 LTS ML ou acima. O senhor também pode usar serverless compute.
Para usar o Databricks Online recurso Stores, o senhor deve primeiro instalar o pacote. As seguintes linhas de código devem ser executadas sempre que um Notebook for executado:
%pip install databricks-feature-engineering>=0.13.0
dbutils.library.restartPython()
Crie um armazenamento online
A API create_online_store suporta apenas a criação de instâncias de banco de dados de provisionamento do Lakebase .
Ao criar um armazenamento online, você provisiona uma infraestrutura de gerenciamento altamente disponível para o Feature Serving em tempo real. A API create_online_store cria uma instância de provisionamento do Lakebase com uma capacidade especificada. Para controlar os custos, exclua as lojas online quando não estiverem sendo usadas para desenvolvimento e testes.
Para criar uma nova loja on-line de recursos:
from databricks.feature_engineering import FeatureEngineeringClient
# Initialize the client
fe = FeatureEngineeringClient()
# Create an online store with specified capacity
fe.create_online_store(
name="my-online-store", # maximum of 63 bytes
capacity="CU_2" # Valid options: "CU_1", "CU_2", "CU_4", "CU_8"
)
As opções de capacidade correspondem a diferentes níveis de desempenho da instância de provisionamento: "CU_1", "CU_2", "CU_4" e "CU_8". Cada unidade de capacidade aloca cerca de 16 GB de RAM para a instância do banco de dados de provisionamento, juntamente com todos os recursos de CPU e SSD locais associados. A ampliação da escala aumenta esses recursos de forma linear. Para obter mais detalhes sobre o provisionamento de instâncias do Lakebase, consulte gerenciar a capacidade da instância.
gerenciar lojas on-line
O código a seguir mostra como recuperar e atualizar lojas on-line:
# List all accessible online stores
stores = fe.list_online_stores()
for store in stores:
print(f"Store: {store.name}, State: {store.state}, Capacity: {store.capacity}")
# Get information about an existing online store
store = fe.get_online_store(name="my-online-store")
if store:
print(f"Store: {store.name}, State: {store.state}, Capacity: {store.capacity}")
# Update the capacity of an online store
updated_store = fe.update_online_store(
name="my-online-store",
capacity="CU_4" # Upgrade to higher capacity
)
Somente instâncias de provisionamento do Lakebase são suportadas em todas APIs de armazenamento online. Use API create_online_store para provisionar o armazenamento on-line apropriado.
Adicionar réplicas de leitura a um armazenamento online
Ao criar ou atualizar um armazenamento online, é possível adicionar réplicas de leitura ao armazenamento online especificando o parâmetro read_replica_count. O tráfego de leitura é automaticamente distribuído pelas réplicas de leitura, reduzindo a latência e melhorando o desempenho e a escalabilidade para cargas de trabalho com alta simultaneidade.
Publicar uma tabela de recursos em um armazenamento on-line
A API publish_table suporta apenas a publicação de recursos para instâncias de banco de dados de provisionamento do Lakebase .
Após o armazenamento online estar no estado DISPONÍVEL , você pode publicar tabelas de recursos para torná-las disponíveis para acesso de baixa latência. A API publish_table sincroniza dados da sua tabela de recursos offline para o armazenamento online criado usando API create_online_store . Confira a tabela abaixo para garantir que sua tabela de origem offline foi criada corretamente para o caso de uso em tempo real.
Caso de uso | Criar a tabela de recurso off-line usando este método |
|---|---|
Somente os valores de recurso mais recentes para cada ID de entidade estão disponíveis no armazenamento on-line para aplicativos reais de tempo. Várias linhas com o mesmo valor primário key mas com valores de série temporal diferentes key podem existir na fonte de dados off-line e serão deduplicadas na publicação pipeline. Esse caso é usado com mais frequência para modelo on-line ou endpoint Feature Serving. | |
Os valores de recurso mais recentes e de todas as séries temporais anteriores da tabela off-line estão disponíveis no armazenamento on-line para acesso por aplicativos reais de tempo. Todas as linhas da tabela de origem (offline) são publicadas sem desduplicação. Isso não é usado com frequência, mas pode ser necessário quando a consulta do endpoint é feita por ID da entidade e data exata/carimbo de data/hora para verificação de dados ou back-testing. |
Pré-requisitos para publicação em lojas on-line
Todas as tabelas de recursos (com ou sem séries temporais) devem atender a esses requisitos antes de serem publicadas:
- Restrição primária do site key: Necessário para a publicação on-line do armazenamento
- Chave primária não nula : As colunas key primárias não podem conter valores NULL
- Alterar o feed de dados ativado : Necessário para os modos de publicação
CONTINUOUSeTRIGGERED. Consulte Ativar feed de dados de alterações para saber como ativar o Feed de Dados de Alterações da Tabela Delta e Modos de publicação para obter uma explicação sobre os modos de publicação.
-- Enable CDF if not already enabled
ALTER TABLE catalog.schema.your_feature_table
SET TBLPROPERTIES ('delta.enableChangeDataFeed' = 'true');
-- Ensure primary key columns are not nullable
ALTER TABLE catalog.schema.your_feature_table
ALTER COLUMN user_id SET NOT NULL;
Publicar uma tabela de recursos
Para publicar uma tabela de recursos em um armazenamento on-line:
from databricks.ml_features.entities.online_store import DatabricksOnlineStore
# Get the online store instance
online_store = fe.get_online_store(name="my-online-store")
# Publish the feature table to the online store
fe.publish_table(
online_store=online_store,
source_table_name="catalog_name.schema_name.feature_table_name",
# for online_table_name, the catalog name, schema name, and table name each are limited to a maximum of 63 bytes
online_table_name="catalog_name.schema_name.online_feature_table_name",
# `publish_mode` argument is optional and defaults to "TRIGGERED" mode if not specified
)
O site publish_table operações faz o seguinte:
- Criar uma tabela no armazenamento on-line, caso ela não exista.
- Sincronizar os dados do recurso da tabela de recurso off-line com o armazenamento on-line.
- Configurar a infraestrutura necessária para manter o armazenamento on-line em sincronia com a tabela off-line.
Modos de publicação
O parâmetro publish_mode do Databricks Online Feature Store determina como e quando a tabela online é atualizada com as alterações da tabela de recursos offline. Consulte a seção Modos de sincronização explicada para obter detalhes completos sobre os modos suportados, resumidos abaixo:
Mode | Descrição |
|---|---|
| padrão. Atualiza incrementalmente a tabela online com as alterações da tabela offline usando a API ou um programa. Opções para acionar a sincronização de dados periodicamente:
Este modo requer que o Feed de Dados de Alteração esteja ativado na tabela offline. Consulte os pré-requisitos para publicação em lojas online. |
| A tabela online está configurada com um pipeline de transmissão para atualizar imediatamente o armazenamento online à medida que novos dados são gravados na tabela de recursos offline. |
| Executa uma sincronização única que copia todos os dados da tabela de origem para o armazenamento online. Este modo é eficiente quando há um grande número de atualizações em linhas existentes entre duas operações de sincronização. |
O parâmetro publish_mode substitui o parâmetro streaming a partir da versão v0.13.0.1 e anteriores. Para compatibilidade com versões anteriores, se streaming=True for passado, é equivalente a definir publish_mode="CONTINUOUS".
Excluir uma tabela online
Para excluir uma tabela online, use o SDK do Databricks:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.feature_store.delete_online_table(online_table_name="catalog_name.schema_name.online_feature_table_name")
Este é o único método recomendado para excluir uma tabela online. Isso remove a tabela tanto do Unity Catalog quanto do banco de dados. Outros métodos, como o comando Databricks SQL DROP TABLE ou o comando SDK Python para excluir uma tabela sincronizada, não excluem a tabela do armazenamento do banco de dados subjacente.
Explorar e consultar recursos on-line
Depois que o status da tabela publicada for exibido como "AVAILABLE", o senhor poderá explorar e consultar os dados do recurso de várias maneiras:
Unity Catalog IU : Navegue até a tabela on-line em Unity Catalog para view dados de amostra e explore o esquema diretamente na UI. Isso proporciona uma maneira conveniente de inspecionar os dados do recurso e verificar se o processo de publicação foi concluído com êxito.
SQL Editor : Para consultas e exploração de dados mais avançadas, o senhor pode usar o editor SQL para executar consultas PostgreSQL em suas tabelas de recursos on-line. Isso permite que o senhor realize consultas complexas, junções e análises nos dados do seu recurso. Para obter instruções detalhadas sobre como usar o editor SQL com lojas on-line, consulte Acessar uma instância de banco de dados a partir do editor SQL.
Usar o recurso online em aplicativos reais de tempo
Para servir recurso a aplicativos e serviços reais de tempo, crie um Feature Serving endpoint. Consulte Feature Serving endpoint.
Os modelos que são treinados usando o recurso de Databricks rastreiam automaticamente a linhagem do recurso em que foram treinados. Quando implantados como endpoint, esses modelos usam o site Unity Catalog para encontrar o recurso apropriado em lojas on-line. Para obter detalhes, consulte Usar recurso no fluxo de trabalho on-line.
Excluir um armazenamento on-line
Para excluir um armazenamento on-line:
fe.delete_online_store(name="my-online-store")
A exclusão de uma tabela publicada on-line pode levar a falhas inesperadas nas dependências posteriores. Antes de excluir uma tabela, o senhor deve garantir que seus recursos on-line não sejam mais usados pelo modelo de serviço ou pelo endpoint Feature Serving.
Melhores práticas para otimização de custos
- Reutilize armazenamentos online : Você pode publicar várias tabelas de recursos em um único armazenamento online. Para cenários de desenvolvimento, teste e treinamento, recomendamos compartilhar um único armazenamento online entre vários projetos ou usuários, em vez de criar armazenamentos separados.
- Dimensionar a capacidade corretamente : comece com a CU_1 para testes e aumente a capacidade somente quando os requisitos de desempenho assim o exigirem.
- Exclua lojas online que não estão em uso : Lojas online geram custos continuamente. Exclua lojas online que não sejam mais necessárias.
Limitações
- Não é possível especificar uma tabela online específica. Quando uma tabela de recursos é publicada em várias tabelas online, o modelo de serviço e o endpoint Feature Serving sempre resolvem para a tabela online mais antiga com base no carimbo de data/hora de criação.
- O número máximo de réplicas de leitura para um armazenamento de recursos online do Databricks é 2. Entre em contato com a equipe do Databricks account para aumentar o limite.
- Os parâmetros a seguir não são compatíveis com a publicação em uma loja de recursos on-line Databricks:
filter_condition,checkpoint_location,mode,trigger, efeatures. - Somente tabelas de recurso em Unity Catalog são compatíveis.
- O único modo de publicação compatível é "merge".
- A redução para zero não é suportada para lojas online.
Solução de problemas
Mensagem de erro: Skipping publishing to online table '...' because the feature sync pipeline is already running.
Esse erro ocorre se vários Notebooks ou Jobs tentarem publicar em uma tabela online ao mesmo tempo. Para evitar conflitos de dados, é permitida apenas uma única operação de sincronização por tabela online de cada vez.
Databricks recomenda projetar seu fluxo de trabalho para usar um único comando publish_table , por exemplo, uma única tarefa no final de um trabalho. Se o seu fluxo de trabalho não puder ser coordenado desta forma, use get_status() para esperar até que outros comandos de publicação tenham terminado de sincronizar antes de acionar uma nova publicação.
Exemplo de notebook
O Notebook a seguir apresenta um exemplo de como configurar e acessar uma Loja de Recursos Online Databricks utilizando um Lakebase Databricks.
Loja online de recursos com o Lakebase Notebook
Recurso adicional
-
Saiba mais sobre o recurso engenharia em Databricks.
-
Explore a governança de dados e a linhagem em Unity Catalog.
-
Entenda a arquitetura e os recursos do Lakebase.