ETL reverso com Lakebase
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.

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:
- Uma nova tabela Unity Catalog (somente leitura, gerenciada pelo pipeline de sincronização)
- Uma tabela do Postgres no Lakebase (consultável por suas aplicações)

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":
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.

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:
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 .

o passo 4: Configurar
Na caixa de diálogo Criar tabela sincronizada :
- 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.
- Tipo de banco de dados : Selecione Lakebase serverless (Beta) .
- Modo de sincronização : Escolha Snapshot , Acionado ou Contínuo , de acordo com suas necessidades (consulte os modos de sincronização acima).
- Configure seu projeto, ramificação e seleções de banco de dados.
- 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 | 
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: SQLSELECT 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 SDK
- CLI
- REST API
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}")
# Create a synced table
databricks database create-synced-database-table \
  --json '{
    "name": "lakebase_catalog.schema.synced_table",
    "spec": {
      "source_table_full_name": "analytics.gold.user_profiles",
      "primary_key_columns": ["user_id"],
      "scheduling_policy": "TRIGGERED",
      "new_pipeline_spec": {
        "storage_catalog": "lakebase_catalog",
        "storage_schema": "staging"
      }
    }
  }'
# Check the status of a synced table
databricks database get-synced-database-table "lakebase_catalog.schema.synced_table"
export WORKSPACE_URL="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-token"
# Create a synced table
curl -X POST "$WORKSPACE_URL/api/2.0/database/synced_tables" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DATABRICKS_TOKEN" \
  --data '{
    "name": "lakebase_catalog.schema.synced_table",
    "spec": {
      "source_table_full_name": "analytics.gold.user_profiles",
      "primary_key_columns": ["user_id"],
      "scheduling_policy": "TRIGGERED",
      "new_pipeline_spec": {
        "storage_catalog": "lakebase_catalog",
        "storage_schema": "staging"
      }
    }
  }'
# Check the status
curl -X GET "$WORKSPACE_URL/api/2.0/database/synced_tables/lakebase_catalog.schema.synced_table" \
  -H "Authorization: Bearer $DATABRICKS_TOKEN"
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:
- 
Excluir do Unity Catalog : No Catálogo , encontre sua tabela sincronizada e clique em menu e selecione Excluir . Isso interrompe a atualização dos dados, mas mantém a tabela no Postgres. 
- 
Excluir do Postgres : Conecte-se ao seu banco de dados Lakebase e exclua a tabela para liberar espaço: SQLDROP 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 | 
|---|---|
| Configure um projeto de banco de dados Lakebase | |
| Conheça as opções de conexão para o Lakebase. | |
| Torne seus dados do Lakebase visíveis no Unity Catalog para governança unificada e consultas entre fontes de dados. | |
| 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.