Pular para o conteúdo principal

ETL reverso com Lakebase

info

Beta

O Lakebase Postgres (beta com escalonamento automático) é a próxima versão do Lakebase, disponível apenas para avaliação. Para cargas de trabalho de produção, utilize a versão de pré-visualização pública do Lakebase. Consulte a seção "Como escolher entre as versões" para entender qual versão é a mais adequada para você.

ETL reverso no Lakebase sincroniza as tabelas Unity Catalog com o Postgres, permitindo que os aplicativos usem diretamente os dados selecionados lakehouse . O lakehouse é otimizado para análises e enriquecimento de dados, enquanto o Lakebase foi projetado para cargas de trabalho operacionais que exigem consultas rápidas e consistência transacional.

Diagrama de arquitetura mostrando o fluxo de dados do lakehouse para o Lakebase e, em seguida, para os aplicativos.

O que é ETL reverso?

ETL reverso permite mover dados de nível analítico do Unity Catalog para o Lakebase Postgres, onde você pode disponibilizá-los para aplicativos que precisam de consultas de baixa latência (menos de 10 ms) e ACID completo. Ele preenche a lacuna entre o armazenamento analítico e os sistemas operacionais, mantendo os dados selecionados utilizáveis em aplicações em tempo real.

Como funciona

As tabelas sincronizadas Databricks criam uma cópia gerenciada dos dados do seu Unity Catalog no Lakebase. Ao criar uma tabela sincronizada, você obtém:

  1. Uma nova tabela Unity Catalog (somente leitura, gerenciada pelo pipeline de sincronização)
  2. Uma tabela do Postgres no Lakebase (consultável por suas aplicações)

Diagrama mostrando a relação entre as três tabelas no ETL reverso

Por exemplo, você pode sincronizar tabelas ouro, recursos projetados ou saídas ML de analytics.gold.user_profiles em uma nova tabela sincronizada analytics.gold.user_profiles_synced. No Postgres, o nome do esquema Unity Catalog torna-se o nome do esquema do Postgres, portanto, isso aparece como "gold"."user_profiles_synced":

SQL
SELECT * FROM "gold"."user_profiles_synced" WHERE "user_id" = 12345;

Os aplicativos se conectam com drivers padrão do Postgres e consultam os dados sincronizados juntamente com seu próprio estado operacional.

O pipeline de sincronização utiliza o pipeline declarativo do LakeFlow para atualizar continuamente tanto a tabela sincronizada Unity Catalog quanto a tabela do Postgres com as alterações da tabela de origem. Cada sincronização pode usar até 16 conexões com seu banco de dados Lakebase e suporta gravações contínuas a aproximadamente 1.200 linhas por segundo por Unidade de Capacidade (UC) e gravações em lote a até 15.000 linhas por segundo por UC.

O Lakebase Postgres suporta até 10.000 conexões simultâneas com garantias transacionais, permitindo que os aplicativos leiam e enriqueçam dados enquanto também lidam com inserções, atualizações e exclusões no mesmo banco de dados.

Modos de sincronização

Escolha o modo de sincronização adequado com base nas necessidades da sua aplicação:

Mode

Descrição

Ideal para

Desempenho

Snapshot

Cópia única de todos os dados

Configuração inicial ou análise histórica

10 vezes mais eficiente se modificar mais de 10% dos dados de origem.

Acionado

Atualizações programadas que são executadas sob demanda ou em intervalos regulares.

Painéis de controle, atualizados a cada hora/diariamente

Bom equilíbrio entre custo e atraso. Caro se a execução <intervalos de 5min

Contínuo

tempo real transmissão com segundos de latência

Aplicações em tempo real (custo mais elevado devido à compute dedicada)

Menor latência, maior custo. Intervalos mínimos de 15 segundos

Os modos Acionado e Contínuo exigem que o Feed de Dados de Alteração (CDF) esteja ativado na sua tabela de origem. Se o CDF não estiver habilitado, você verá um aviso na interface do usuário com o comando ALTER TABLE exato para execução. Para obter mais detalhes sobre o Feed de Dados de Alterações, consulte Usar o feed de dados de alterações do Delta Lake no Databricks.

Exemplos de casos de uso

O ETL reverso com Lakebase oferece suporte a cenários operacionais comuns:

  • Mecanismos de personalização que precisam de perfis de usuário atualizados sincronizados com os aplicativos Databricks.
  • Aplicações que servem para previsões de modelos ou valores de recursos são computadas na lakehouse
  • Painéis de controle voltados para o cliente que exibem KPIs em tempo real.
  • Serviço de detecção de fraudes que necessita de pontuações de risco disponíveis para ação imediata.
  • Ferramentas de suporte que enriquecem os registros de clientes com dados selecionados da lakehouse

Criar uma tabela sincronizada (interface do usuário)

Você pode criar tabelas sincronizadas na interface do usuário do Databricks ou programaticamente com o SDK. O fluxo de trabalho da interface do usuário está descrito abaixo.

Pré-requisitos

Você precisa de:

  • Um workspace Databricks com o Lakebase ativado.
  • Um projeto de banco de dados Lakebase (consulte Criar um projeto de banco de dados).
  • Uma tabela do Unity Catalog com dados selecionados.
  • Permissões para criar tabelas sincronizadas.

Para planejamento de capacidade e compatibilidade de tipos de dados, consulte Tipos de dados e compatibilidade e Planejamento de capacidade.

Passo 1: Selecione sua tabela de origem

Acesse o Catálogo na barra lateral workspace e selecione a tabela Unity Catalog que deseja sincronizar.

Explorador de catálogo exibindo uma tabela selecionada.

Passo 2: Ativar Feed de Dados de Alteração (se necessário)

Se você planeja usar os modos de sincronização acionada ou contínua , sua tabela de origem precisa ter o Feed de Dados de Alteração ativado. Verifique se sua tabela já possui o CDF habilitado ou execute este comando em um editor SQL ou Notebook:

SQL
ALTER TABLE your_catalog.your_schema.your_table
SET TBLPROPERTIES (delta.enableChangeDataFeed = true)

Substitua your_catalog.your_schema.your_table pelo nome real da sua tabela.

o passo 3: Criar tabela sincronizada

Na view de detalhes da tabela, clique em Criar > Tabela sincronizada .

Criar dropdown do botão exibindo a opção de tabela sincronizada

o passo 4: Configurar

Na caixa de diálogo Criar tabela sincronizada :

  1. Nome da tabela : Insira um nome para a sua tabela sincronizada (ela será criada no mesmo catálogo e esquema que a sua tabela de origem). Isso cria uma tabela sincronizada Unity Catalog e uma tabela do Postgres que você pode consultar.
  2. Tipo de banco de dados : Selecione Lakebase serverless (Beta) .
  3. Modo de sincronização : Escolha Snapshot , Acionado ou Contínuo , de acordo com suas necessidades (consulte os modos de sincronização acima).
  4. Configure seu projeto, ramificação e seleções de banco de dados.
  5. Verifique se a keyprimária está correta (geralmente detectada automaticamente).

Se você selecionou o modo Acionado ou Contínuo e ainda não ativou a opção Alterar Feed de Dados, verá um aviso com o comando exato a ser executado. Para questões de compatibilidade de tipos de dados, consulte Tipos de dados e compatibilidade.

Clique em Criar para criar a tabela sincronizada.

o passo 5: Monitor

Após a criação, monitore a tabela sincronizada no Catálogo . A tab Visão geral mostra o status da sincronização, a configuração, o status pipeline e o registro de data e hora da última sincronização. Use a opção Sincronizar agora para refresh manual.

Tipos de dados e compatibilidade

Os tipos de dados do Unity Catalog são mapeados para os tipos do Postgres ao criar tabelas sincronizadas. Tipos complexos (ARRAY, MAP, STRUCT) são armazenados como JSONB no Postgres.

Tipo de coluna de origem

tipo de coluna do Postgres

BigInt

BigInt

binário

BYTEA

Booleana

Booleana

Data

Data

DECIMAL(p,s)

NUMÉRICO

double

DUPLA PRECISÃO

Float

REAL

INT

Integer

INTERVALO

INTERVALO

INT PEQUENA

INT PEQUENA

String

TEXT

Timestamp

CARIMBO DE DATA E HORA COM FUSO HORÁRIO

TIMESTAMP_NTZ

CARIMBO DE DATA E HORA SEM FUSO HORÁRIO

TINYINT

INT PEQUENA

ARRAY<elementType>

JSONB

MAPA<tipoDeChave,tipoDeValor>

JSONB

ESTRUTURA<nomeDoCampo:tipoDoCampo[, ...]>

JSONB

nota

Os tipos GEOGRAPHY, GEOMETRY, VARIANT e OBJECT não são suportados.

Lidar com caracteres inválidos

Certos caracteres, como bytes nulos (0x00), são permitidos em strings Unity Catalog , colunas ARRAY, MAP ou STRUCT, mas não são suportados em colunas TEXT ou JSONB do Postgres. Isso pode causar falhas de sincronização com erros como:

ERROR: invalid byte sequence for encoding "UTF8": 0x00
ERROR: unsupported Unicode escape sequence DETAIL: \u0000 cannot be converted to text

par:

  • Higienizar campos de texto : Remover caracteres não suportados antes da sincronização. Para bytes nulos em colunas de strings:

    SQL
    SELECT REPLACE(column_name, CAST(CHAR(0) AS STRING), '') AS cleaned_column FROM your_table
  • Converter para BINÁRIO : Para colunas de strings onde a preservação dos bytes brutos é necessária, converta para o tipo BINÁRIO.

Criação programática

Para automatizar o fluxo de trabalho, você pode criar tabelas sincronizadas programaticamente usando o SDK Databricks , CLI ou API REST .

Python
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.database import (
SyncedDatabaseTable,
SyncedTableSpec,
NewPipelineSpec,
SyncedTableSchedulingPolicy
)

# Initialize the Workspace client
w = WorkspaceClient()

# Create a synced table
synced_table = w.database.create_synced_database_table(
SyncedDatabaseTable(
name="lakebase_catalog.schema.synced_table", # Full three-part name
spec=SyncedTableSpec(
source_table_full_name="analytics.gold.user_profiles",
primary_key_columns=["user_id"], # Primary key columns
scheduling_policy=SyncedTableSchedulingPolicy.TRIGGERED, # SNAPSHOT, TRIGGERED, or CONTINUOUS
new_pipeline_spec=NewPipelineSpec(
storage_catalog="lakebase_catalog",
storage_schema="staging"
)
),
)
)
print(f"Created synced table: {synced_table.name}")

# Check the status of a synced table
status = w.database.get_synced_database_table(name=synced_table.name)
print(f"Synced table status: {status.data_synchronization_status.detailed_state}")
print(f"Status message: {status.data_synchronization_status.message}")

Planejamento de capacidade

Ao planejar a implementação do seu ETL reverso, considere os seguintes requisitos de recursos:

  • Utilização de conexões : Cada tabela sincronizada utiliza até 16 conexões com o banco de dados Lakebase, que são contabilizadas no limite de conexões da instância.
  • Limites de tamanho : O limite total de tamanho dos dados lógicos em todas as tabelas sincronizadas é de 2 TB. As tabelas individuais não têm limites, mas Databricks recomenda não exceder 1 TB para tabelas que precisam ser atualizadas.
  • Requisitos de nomenclatura : Os nomes de banco de dados, esquema e tabela podem conter apenas caracteres alfanuméricos e sublinhados ([A-Za-z0-9_]+).
  • Evolução do esquema : Somente alterações aditivas de esquema (como a adição de colunas) são suportadas nos modos Acionado e Contínuo.

Excluir uma tabela sincronizada

Para excluir uma tabela sincronizada, você deve removê-la tanto do Unity Catalog quanto do Postgres:

  1. Excluir do Unity Catalog : No Catálogo , encontre sua tabela sincronizada e clique em Ícone do menu Kebab. menu e selecione Excluir . Isso interrompe a atualização dos dados, mas mantém a tabela no Postgres.

  2. Excluir do Postgres : Conecte-se ao seu banco de dados Lakebase e exclua a tabela para liberar espaço:

    SQL
    DROP TABLE your_database.your_schema.your_table;

Você pode usar o editor SQL ou ferramentas externas para se conectar ao Postgres.

Saber mais

Tarefa

Descrição

Criar um projeto de banco de dados

Configure um projeto de banco de dados Lakebase

Conecte-se ao seu banco de dados

Conheça as opções de conexão para o Lakebase.

banco de dados de registro no Unity Catalog

Torne seus dados do Lakebase visíveis no Unity Catalog para governança unificada e consultas entre fontes de dados.

Integração com o Unity Catalog

Compreender a governança e as permissões

Outras opções

Para sincronizar dados com sistemas que não sejam Databricks, consulte as soluções de ETL reverso do Partner Connect, como Census ou Hightouch.