Pular para o conteúdo principal

Disponibilize dados lakehouse com tabelas sincronizadas.

info

Beta

A partir de 15 de junho, o Lakebase está disponível em Beta no GCP. Consulte Disponibilidade regional para regiões compatíveis.

As tabelas sincronizadas permitem que você disponibilize dados lakehouse por meio do Lakebase Postgres. As tabelas Unity Catalog são sincronizadas com o Postgres, permitindo que os aplicativos consultem os dados lakehouse diretamente com baixa latência. Esse processo é comumente conhecido como ETL reverso. 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 no estilo de pesquisa 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 são tabelas sincronizadas?​

As tabelas sincronizadas permitem que você forneça dados de nível analítico do Unity Catalog por meio Lakebase Postgres, disponibilizando-os para aplicativos que precisam de consultas de baixa latência e ACID completo. Eles preenchem a lacuna entre o armazenamento analítico e os sistemas operacionais, mantendo seus dados prontos para uso em aplicações em tempo real.

Fontes compatíveis​

As tabelas sincronizadas são compatíveis com os seguintes tipos de origem Unity Catalog :

  • gerenciamento e tabelas Delta externas
  • gerenciar e mesas Iceberg externas
  • vista e vista materializada

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 tabela sincronizada no Unity Catalog que faz referência ao pipelinede sincronização.
  2. Uma tabela Postgres no Lakebase (somente leitura, consultável por seus aplicativos)

Diagrama mostrando a relação entre as três tabelas em tabelas sincronizadas.

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

Pipelines de sincronização usam Lakeflow pipelines gerenciados para atualizar continuamente tanto a tabela sincronizada do Unity Catalog quanto a tabela Postgres com as alterações da tabela de origem. Cada sincronização pode usar até 16 conexões para o seu banco de dados Lakebase.

O Lakebase Postgres suporta até 1.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.

atenção

Embora seja possível modificar uma tabela sincronizada diretamente no Postgres, Databricks recomenda enfaticamente a execução apenas de consultas de leitura para proteger a integridade dos dados com a fonte. Para obter informações sobre as operações suportadas em tabelas sincronizadas, consulte a lista de operações permitidas em tabelas sincronizadas no Postgres.

Modos de sincronização​

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

Mode

Descrição

Quando usar

Desempenho

Snapshot

Cópia única de todos os dados

Alterações na origem > 10% das linhas por ciclo

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.

As linhas de origem mudam em uma cadência conhecida. Inserções, atualizações e exclusões são propagadas a cada refresh.

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

As alterações devem aparecer no Lakebase em tempo real quase instantâneo.

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

Mode

Descrição

Quando usar

Desempenho

Snapshot

Cópia única de todos os dados

Alterações na origem > 10% das linhas por ciclo

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.

As linhas de origem mudam em uma cadência conhecida. Inserções, atualizações e exclusões são propagadas a cada refresh.

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

As alterações devem aparecer no Lakebase em tempo real quase instantâneo.

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

Na caixa de diálogo Create synced table , Snapshot e Trigger são modos de sincronização On-demand , disponíveis em Advanced settings , enquanto Continuous é um modo separado.

O requisito da fonte depende do modo de sincronização:

  • O Snapshot copia todos os dados a cada sincronização, portanto, a fonte só precisa ser compatível com SELECT *.
  • Triggered e Continuous aplicam alterações em nível de linha incrementalmente, portanto, a origem deve fornecer um change data feed. Ative o change data feed no momento da gravação na origem ou use o change data feed automático. Se uma origem Trigger ou Continuous não tiver um change data feed, a interface mostrará um aviso com o comando ALTER TABLE exato a ser executado.

Automatic change data feed computes row-level changes at read time instead of requiring write-time change data feed on the source. Isso permite que mais tipos de origem, incluindo tabelas Apache Iceberg , sejam sincronizados no modo Triggered ou Continuous . For the source types that automatic change data feed supports, see the automatic change data feed documentation.

Exemplos de casos de uso​

Você pode usar tabelas sincronizadas para casos de uso de fornecimento de dados, como:

  • Mecanismos de personalização que fornecem perfis de usuário atualizados para Databricks Apps
  • 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 fornece pontuações de risco para ação imediata.
  • Ferramentas de suporte que fornecem registros de clientes enriquecidos a partir de dados lakehouse .

Criar uma tabela sincronizada​

Pré-requisitos​

Você precisa de:

  • Um workspace Databricks com o Lakebase ativado.
  • Um projeto Lakebase (consulte Criar um projeto).
  • Uma tabela Unity Catalog para sincronizar.
  • Permissões para criar tabelas sincronizadas. Você precisa de USE_SCHEMA e CREATE_TABLE em qualquer esquema que você usar. To grant these privileges, see Gerenciar privilégios no Unity Catalog.

Para os modos Triggered ou Continuous , a origem deve fornecer um feed de dados de alterações. Ative o feed de dados de alterações legado em uma tabela de origem do Delta Lake qualificada ou use o feed de dados de alterações automático para origens como tabelas do Apache Iceberg.

Para ativar o feed de dados alterados em tempo de gravação em uma tabela de origem Delta, execute:

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

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

  1. No Lakehouse, vá para Catalog na barra lateral do workspace e selecione a tabela do Unity Catalog que você deseja sincronizar.

    Explorador de catálogo exibindo uma tabela selecionada.

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

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

  3. Na caixa de diálogo Create synced table , configure as seguintes seções e clique em Create :

    Destino

    • Name : Select the catalog and schema for the synced table, then enter a table name. This creates both a Unity Catalog synced table and a Postgres table you can query. As listas de catálogos e esquemas incluem apenas esquemas do Unity Catalog onde você tem privilégios USE_SCHEMA e CREATE_TABLE . Se você não vir um esquema esperado, confirme suas permissões com o administrador do catálogo.
    • Banco de dados de Lakebase Postgres : defina Database type como Autoscaling e selecione Project , Branch e Postgres database .

    Configurações de sincronização

    • Sync mode : selecione On-demand ou Continuous . Para On-demand , expanda Advanced settings e escolha Snapshot ou Triggered . Consulte modos de sincronização para obter diretrizes.

    Configurações do pipeline

    • Pipeline : selecione Criar novo para criar um pipeline para esta tabela sincronizada ou Usar existente para reutilizar um.
    • Política de uso serverless : (Opcional) Selecione uma política de uso serverless para o pipeline de sincronização.

    Esquema

    • Primary key : verifique a primary key (geralmente detectada automaticamente). Deixe Unique selecionado se cada valor de primary key for exclusivo na origem. Se os valores de primary key puderem se repetir, desmarque Unique e defina uma Timeseries Key .
importante

As colunas da key primária não podem ser nulas na tabela sincronizada. As linhas com valores nulos nas colunas key primária são excluídas da sincronização .

  • Timeseries Key : (Opcional) Quando os valores da key primária puderem se repetir na origem, selecione uma coluna para configurar a desduplicação. A tabela sincronizada conterá então apenas a linha com o valor de key de série temporal mais recente para cada primary key. Para o modo de falha sem uma key de série temporal, consulte Key duplicadas.

If you chose Triggered or Continuous and haven't enabled Change Data Feed yet, you'll see a warning with the exact comando to execução. For data type compatibility questions, see Data types and compatibility. 4. 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.

programar ou acionar sincronizações subsequentes​

A execução inicial do Snapshot ocorre automaticamente na criação do sistema. Nos modos Snapshot e Acionado , as sincronizações subsequentes devem ser acionadas explicitamente. O modo contínuo é autogerenciável.

tarefa pipeline sincronização de tabela de banco de dados​

A tarefa pipelinesincronização de tabela de banco de dados em LakeFlow Jobs executa um pipeline de tabela sincronizada como um fluxo de trabalho ou passo. Configure a tarefa com um gatilho de atualização de tabela ou um gatilho programático.

Acionar gatilho em atualizações da tabela de origem​

Executa a tarefa quando a tabela de origem Unity Catalog é atualizada. Com o modo Acionado , apenas as novas alterações são aplicadas incrementalmente, proporcionando atualizações quase em tempo real sem o custo de estar sempre ativo do modo Contínuo.

  1. No seu workspace, clique em Ícone de fluxos de trabalho. Jobs & Pipelines na barra lateral.
  2. Clique em Criar trabalho ou abra um trabalho existente.
  3. Na tab de tarefas , clique em + Adicionar outro tipo de tarefa .
  4. Em Ingestão e transformações , selecione pipelinede sincronização de tabela de banco de dados .
  5. No campo "pipeline" , selecione o pipeline associado à sua tabela sincronizada.
  6. Em Programar e Gatilhos , clique em Adicionar gatilho .
  7. Selecione Atualização de tabela como o tipo de gatilho.
  8. Em Tabelas , selecione a tabela Unity Catalog de origem que deseja monitorar.
  9. Clique em Salvar .

Acionar em um programa​

execução da sincronização em uma cadência fixa. Ideal para o modo Snapshot , onde uma refresh completa noturna ou semanal costuma ser o padrão mais eficiente.

  1. Siga as etapas 1 a 5 acima para adicionar uma tarefa pipelinesincronização de tabela de banco de dados a um trabalho.
  2. Em Programar e Gatilhos , clique em Adicionar gatilho .
  3. Selecione "Agendado" como o tipo de gatilho.
  4. Configure seu agendador cron e fuso horário e clique em Salvar .

Verificar status de sincronização​

Para verificar o estado atual e a última hora de sincronização de uma tabela sincronizada:

No Catálogo , navegue até a tabela sincronizada e selecione a tab Visão geral . Mostra o estado de sincronização atual, o status do pipeline e o registro de data e hora da última sincronização.

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

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.

Mapeamentos de tipos personalizados​

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
  • O primeiro erro ocorre quando um byte nulo aparece em uma coluna de strings de nível superior, que mapeia diretamente para Postgres TEXT.
  • O segundo erro ocorre quando um byte nulo aparece em strings aninhadas dentro de um tipo complexo (STRUCT, ARRAY, ou MAP), que é serializado como JSONB. Durante a serialização, todas as strings são convertidas para Postgres TEXT, onde \u0000 não é permitido.

soluções:

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

Planejamento de capacidade​

Ao planejar a implementação de suas tabelas sincronizadas, considere estes requisitos de recursos:

  • Uso da conexão : cada tabela sincronizada usa até 16 conexões com seu banco de dados Lakebase, que contam para o limite de conexão do projeto.
  • Cota de tamanho : O total de dados lógicos em todas as tabelas sincronizadas conta para a cota de armazenamento de banco de dados da branch. Entre em contato com o suporte da Databricks se precisar de uma cota maior. Tabelas individuais não possuem cota, mas a Databricks recomenda não exceder 1 TB para tabelas que exigem refresh.
  • Tamanho do full-refresh : Ao acionar um full-refresh, a versão antiga no Postgres não é excluída até que a nova sincronização seja concluída. Ambas as versões contam temporariamente para a cota de tamanho do banco de dados lógico durante o refresh.
  • Tabelas por origem : Uma única tabela de origem pode ter até 20 tabelas sincronizadas.
  • Requisitos de nomenclatura : Os nomes de banco de dados, esquema e tabela podem conter apenas caracteres alfanuméricos e sublinhados ([A-Za-z0-9_]+).
  • Orientações sobre identificação da fonte : Evite usar letras maiúsculas ou caracteres especiais em nomes de colunas ou tabelas na tabela de origem Unity Catalog . Se você os mantiver, deverá citar esses identificadores ao referenciá-los no Postgres.
  • 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.
  • Alteração da definição da tabela : a atualização da definição de uma tabela sincronizada no local não é suportada por meio de nenhuma interface (UI, SDKs, CLI, API REST, Terraform ou DABs). Para alterar a chave primária ou a chave da série temporal, ou para fazer uma alteração de esquema não aditiva, exclua a tabela sincronizada e crie uma nova.
  • Chave duplicada : Se duas linhas tiverem a mesma key primária na tabela de origem, o pipeline de sincronização falhará, a menos que você configure a desduplicação usando uma keyde série temporal.
  • Idempotência da API : As APIs de tabelas sincronizadas são idempotentes, portanto, tentam novamente em caso de erros transitórios para garantir operações em tempo hábil.
  • Taxa de atualização : Para o Lakebase, o pipeline de sincronização suporta gravações contínuas e com Trigger a aproximadamente 150 linhas por segundo por Unidade de Capacidade (CU) e gravações de Snapshot a até 2.000 linhas por segundo por CU.

operações permitidas em tabelas sincronizadas no Postgres​

A Databricks recomenda que, para evitar sobrescritas acidentais ou inconsistências de dados, sejam realizadas apenas as seguintes operações no Postgres para tabelas sincronizadas:

  • Consultas somente leitura
  • Criação de índices
  • Excluindo a tabela (para liberar espaço após remover a tabela sincronizada do Unity Catalog)

Embora seja possível modificar tabelas sincronizadas no Postgres de outras maneiras, isso interfere no pipeline de sincronização.

Propriedade e permissões​

Uma tabela sincronizada pertence à função interna databricks_writer_<dbid>, e não ao usuário que a criou, porque o pipeline de sincronização a gerencia (consulte funções do Postgres). Comandos somente para o proprietário, como a configuração de segurança em nível de linha, não podem ser executados diretamente em uma tabela sincronizada.

nota

Esta é uma exceção à regra geral do Postgres, onde os objetos que você cria são de propriedade da sua identidade Databricks, caso seu login exista como uma função no Postgres. O pipeline cria tabelas sincronizadas em seu nome.

Acesso para o usuário que cria uma tabela sincronizada​

Quando você cria uma tabela sincronizada, sua identidade Databricks recebe acesso automaticamente para usá-la. Nenhuma ação databricks_superuser é necessária. Sua identidade recebe os seguintes privilégios na tabela sincronizada:

Objeto

Privilégios

Propósito

Tabela Sincronizada

SELECT, DELETE, TRUNCATE

Ler ou limpar a tabela

Esquema

USAGE, CREATE

Usar o esquema e criar objetos, como índices

Objeto

Privilégios

Propósito

Tabela Sincronizada

SELECT, DELETE, TRUNCATE

Ler ou limpar a tabela

Esquema

USAGE, CREATE

Usar o esquema e criar objetos, como índices

Não lhe foi concedido INSERT nem UPDATE. O pipeline é proprietário dos dados da tabela, então as gravações diretas são substituídas no próximo refresh. DELETE e TRUNCATE apenas limpam a tabela. O próximo refresh repreenche a tabela a partir da origem.

Este acesso é derivado das permissões do Unity Catalog na tabela sincronizada e é gerenciado no Unity Catalog. Para alterar, atualize as permissões do usuário no Unity Catalog. Não é possível REVOKE isso a partir de uma identidade Databricks diretamente no Postgres.

nota

Este acesso está vinculado à identidade que criou a tabela sincronizada. Alterar a identidade de Executar como do pipeline não a reatribui. Para usar uma identidade proprietária diferente, recrie a tabela sincronizada sob essa identidade.

gerenciar acesso sincronizado à tabela​

Após a criação de uma tabela sincronizada, o databricks_superuser pode ler uma tabela sincronizada do Postgres. O databricks_superuser tem pg_read_all_data, o que permite que esta função leia de todas as tabelas. Também possui o privilégio pg_write_all_data , que permite que esta função escreva em todas as tabelas. Isso significa que um databricks_superuser também pode escrever em uma tabela sincronizada no Postgres. O Lakebase oferece suporte a esse comportamento de gravação caso você precise fazer alterações urgentes na sua tabela de destino. No entanto, a Databricks recomenda que você faça as correções na sua tabela de origem.

  • O databricks_superuser também pode conceder esses privilégios a outros usuários:

    SQL
    GRANT USAGE ON SCHEMA synced_table_schema TO user;
    SQL
    GRANT SELECT ON synced_table_name TO user;
  • O databricks_superuser pode revogar esses privilégios:

    SQL
    REVOKE USAGE ON SCHEMA synced_table_schema FROM user;
    SQL
    REVOKE {SELECT | INSERT | UPDATE | DELETE} ON synced_table_name FROM user;

gerenciamento de operações de tabela sincronizada​

O databricks_superuser pode gerenciar quais usuários estão autorizados a executar operações específicas em uma tabela sincronizada. As operações suportadas para tabelas sincronizadas são:

  • CREATE INDEX
  • ALTER INDEX
  • DROP INDEX
  • DROP TABLE

Todas as outras operações DDL são negadas para tabelas sincronizadas.

Para conceder esses privilégios a usuários adicionais, o databricks_superuser deve primeiro criar uma extensão em databricks_auth:

SQL
CREATE EXTENSION IF NOT EXISTS databricks_auth;

Então, o databricks_superuser pode adicionar um usuário para gerenciar uma tabela sincronizada:

SQL
SELECT databricks_synced_table_add_manager('"synced_table_schema"."synced_table"'::regclass, '[user]');

O databricks_superuser pode remover um usuário do gerenciamento de uma tabela sincronizada:

SQL
SELECT databricks_synced_table_remove_manager('[table]', '[user]');

O databricks_superuser pode view todos os gerentes:

SQL
SELECT * FROM databricks_synced_table_managers;

Excluir uma tabela sincronizada​

Excluir uma tabela sincronizada do Unity Catalog também exclui a tabela Postgres correspondente.

No Catálogo , encontre sua tabela sincronizada e clique em Ícone do menu Kebab. menu e selecione Excluir .

  • Duplicação de catálogo: A criação de uma tabela sincronizada em um catálogo padrão direcionado a um banco de dados Postgres que também está registrado como um catálogo de banco de dados separado faz com que a tabela sincronizada apareça no Unity Catalog tanto no catálogo padrão quanto no catálogo de banco de dados.

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.

Saber mais​

Tarefa

Descrição

Criar um projeto

Configure um projeto 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

Tarefa

Descrição

Criar um projeto

Configure um projeto 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