O que é federação de consulta?

Com a federação de consulta, as consultas são transferidas para o banco de dados externo usando APIs JDBC. A consulta é executada no Databricks e usando computação remota. A federação de consulta é usada para fontes como MySQL, PostgreSQL, Redshift, Teradata e muito mais.

Diagrama de visão geral da federação de consulta

O que é a Federação de Lakehouse?

A lakehouse enfatiza o armazenamento central de dados para reduzir a redundância e o isolamento dos dados. Sua organização pode ter vários sistemas de dados em produção e talvez você queira consultar dados em sistemas conectados por vários motivos:

  • Relatórios sob demanda.
  • Trabalho de prova de conceito.
  • A fase exploratória de novos pipelines de ETL ou relatórios.
  • Suporte a cargas de trabalho durante a migração incremental.

Em cada um desses cenários, a federação de consulta faz com que você obtenha insights de forma mais rápida, pois você pode consultar os dados no local e evitar processamento complexo e demorado de ETL.

A federação de consulta destina-se a casos de uso nos quais:

  • Você não deseja ingerir dados em Azure Databricks.
  • Você quer que suas consultas aproveitem a computação no sistema de banco de dados externo.
  • Você quer as vantagens das interfaces do Catálogo do Unity e da governança de dados, incluindo controle de acesso refinado, linhagem de dados e pesquisa.

Federação de consulta vs. Lakeflow Connect

A federação de consulta permite que você consulte fontes de dados externas sem mover seus dados. O Databricks recomenda a ingestão usando conectores gerenciados do Lakeflow Connect porque eles são dimensionados para acomodar grandes volumes de dados e menor latência de consulta. No entanto, talvez você queira consultar seus dados sem migrá-los. Quando você tiver uma opção entre conectores de ingestão gerenciada e federação de consulta, escolha federação de consulta para relatórios ad hoc ou trabalho de provas de conceito em seus pipelines ETL.

Se a origem der suporte a ele, os conectores de ingestão baseados em consulta serão uma alternativa leve do Lakeflow Connect aos conectores CDC. Eles consultam a origem diretamente de maneira agendada usando uma coluna de cursor, sem exigir um gateway ou armazenamento de preparação. Use conectores de ingestão baseados em consulta em uma situação em que precise de ingestão recorrente, mas não possua a infraestrutura CDC disponível.

Visão geral da configuração da federação de consulta

Para disponibilizar um conjunto de dados para consulta somente leitura usando a Federação de Lakehouse, crie o seguinte:

  • Uma conexão, um objeto protegível no Catálogo do Unity que especifica um caminho e credenciais para acessar um sistema de banco de dados externo.
  • Um catálogo estrangeiro, um objeto protegível no Catálogo do Unity que espelha um banco de dados em um sistema de dados externo, permitindo executar consultas somente leitura nesse sistema de dados no workspace do Azure Databricks, gerenciando o acesso usando o Catálogo do Unity.

Fontes de dados com suporte

A federação de consulta dá suporte a conexões com as seguintes fontes:

Requisitos de conexão

Requisitos de área de trabalho:

  • Espaço de trabalho habilitado para o Unity Catalog. Os workspaces criados após 9 de novembro de 2023 são automaticamente habilitados para o Unity Catalog, incluindo o provisionamento automático de metastore. Você não precisa criar um metastore manualmente, a menos que seu workspace tenha sido criado antes da habilitação automática e não tenha sido ativado para o Unity Catalog. Consulte Introdução ao Catálogo do Unity.

Requisitos de computação:

  • Conectividade de rede do recurso de computação para os sistemas de banco de dados de destino. Confira Recomendações de rede para a Federação de Lakehouse.
  • A computação do Azure Databricks deve usar o Databricks Runtime 13.3 LTS ou superior e modo de acesso Standard ou Dedicado.
  • Os sql warehouses devem ser profissionais ou sem servidor e devem usar 2023.40 ou superior.

Permissões necessárias:

  • Para criar uma conexão, você deve ser um administrador de metastore ou um usuário com o privilégio de CREATE CONNECTION no metastore do Unity Catalog anexado ao espaço de trabalho. Em workspaces que foram habilitados automaticamente para o Unity Catalog, os administradores de workspace têm o privilégio CREATE CONNECTION por padrão.
  • Para criar um catálogo estrangeiro, você deve ter a permissão CREATE CATALOG no metastore e ser o proprietário da conexão ou ter o privilégio CREATE FOREIGN CATALOG na conexão. Em workspaces que foram habilitados automaticamente para o Unity Catalog, os administradores de workspace têm o privilégio CREATE CATALOG por padrão.

Requisitos de permissão adicionais são especificados em cada seção baseada em tarefas a seguir.

Criar uma conexão

Uma conexão especifica um caminho e credenciais para acessar um sistema de banco de dados externo. Para criar uma conexão, você pode usar o Gerenciador de Catálogos ou o comando SQL CREATE CONNECTION em um bloco de anotações Azure Databricks ou no editor de consultas SQL do Databricks.

Note

Você também pode usar a API REST do Databricks ou a CLI do Databricks para criar uma conexão. Consulte POST /api/2.1/unity-catalog/connections e Comandos do Catálogo do Unity.

Permissões necessárias: administrador do metastore ou usuário que possua o privilégio CREATE CONNECTION.

Gerenciador de Catálogos

  1. No workspace Azure Databricks, clique em Data icon.Catalog.

  2. Na parte superior do painel Catálogo , clique no ícone Adicionar ou maisícone Adicionar e selecione Criar uma conexão no menu.

  3. Insira um nome de conexão simples.

  4. Selecione o Tipo de conexão (provedor de banco de dados, como MySQL ou PostgreSQL).

  5. (Opcional) Adicione um comentário.

  6. Clique em Próximo.

  7. Insira as propriedades da conexão (como informações do host, caminho e credenciais de acesso).

    Cada tipo de conexão requer informações de conexão diferentes. Consulte o artigo sobre o seu tipo de conexão, listado no sumário à esquerda.

  8. Clique em Criar conexão.

  9. Insira um nome para o catálogo estrangeiro.

  10. (Opcional) Clique em Testar conectividade para confirmar se está funcionando.

  11. Clique em Criar catálogo.

  12. Selecione os workspaces nos quais os usuários podem acessar o catálogo que você criou. Você pode selecionar Todos os workspaces têm acesso ou clicar em Atribuir a workspaces, selecionar os workspaces e clicar em Atribuir.

  13. Altere o Proprietário que poderá gerenciar o acesso a todos os objetos do catálogo. Comece a digitar uma entidade de segurança na caixa de texto e clique na entidade de segurança nos resultados retornados.

  14. Conceda Privilégios no catálogo. Clique em Conceder:

    1. Especifique as Entidades de segurança que terão acesso aos objetos no catálogo. Comece a digitar uma entidade de segurança na caixa de texto e clique na entidade de segurança nos resultados retornados.
    2. Selecione as Predefinições de privilégio a conceder a cada usuário. Todos os usuários da conta recebem BROWSE como padrão.
      • Selecione Leitor de Dados no menu suspenso para conceder privilégios read em objetos no catálogo.
      • Selecione Editor de Dados no menu suspenso para conceder privilégios read e modify em objetos no catálogo.
      • Selecione manualmente os privilégios a serem concedidos.
    3. Selecione Conceder.
    4. Clique em Próximo.
    5. Na página Metadados, especifique os pares de chave-valor das marcações. Para obter mais informações, consulte Aplicar etiquetas a objetos securitizáveis do Catálogo Unity.
    6. (Opcional) Adicione um comentário.
    7. Clique em Salvar.

SQL

Execute o seguinte comando em um notebook ou no editor de consultas SQL. Este exemplo é para conexões com um banco de dados PostgreSQL. As opções diferem por tipo de conexão. Consulte o artigo sobre o seu tipo de conexão, listado no sumário à esquerda.

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

Recomendamos que você use Azure Databricks secrets em vez de cadeias de caracteres de texto sem formatação para valores confidenciais, como credenciais. Por exemplo:

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

Para obter informações sobre como configurar segredos, consulte a seção Gerenciamento de segredos.

Para obter informações sobre como gerenciar conexões existentes, consulte Gerenciar conexões para a Federação de Lakehouse.

Criar um catálogo estrangeiro

Note

Se você usar a interface do usuário para criar uma conexão com a fonte de dados, a criação de catálogos estrangeiros será incluída e você poderá ignorar essa etapa.

Um catálogo estrangeiro espelha um banco de dados em um sistema de dados externo para que você possa consultar e gerenciar o acesso aos dados nesse banco de dados usando Azure Databricks e o Catálogo do Unity. Para criar um catálogo estrangeiro, use uma conexão com a fonte de dados que já foi definida.

Para criar um catálogo estrangeiro, você pode usar o Gerenciador de Catálogos ou o comando SQL CREATE FOREIGN CATALOG em um bloco de anotações Azure Databricks ou no editor de consultas SQL. Você também pode usar a API do Catálogo do Unity. Consulte a documentação de referência do Azure Databricks.

Os metadados do catálogo estrangeiro são sincronizados com o Catálogo do Unity em cada interação com o catálogo. Para o mapeamento de tipo de dados entre o Catálogo do Unity e a fonte de dados, verifique a seção Mapeamentos de Tipo de Dados da documentação de cada fonte de dados.

Permissões necessárias: permissão de CREATE CATALOG no metastore e propriedade da conexão ou o privilégio de CREATE FOREIGN CATALOG na conexão.

Gerenciador de Catálogos

  1. No workspace Azure Databricks, clique em Data icon.Catalog para abrir o Catalog Explorer.

  2. Na parte superior do painel Catálogo, clique no ícone Adicionar ou ícone de maisAdicionar dados e selecione Criar um catálogo no menu.

    Como alternativa, na página Acesso rápido, clique no botão Catálogos e depois no botão Criar catálogo.

  3. Siga as instruções para criar catálogos estrangeiros em Criar catálogos.

SQL

Execute o seguinte comando SQL em um notebook ou no editor de consultas SQL. Os itens entre colchetes são opcionais. Substitua os valores de espaço reservado:

  • <catalog-name>: nome do catálogo em Azure Databricks.
  • <connection-name>: o objeto de conexão que especifica a fonte de dados, o caminho e as credenciais de acesso.
  • <database-name>: nome do banco de dados que você deseja espelhar como um catálogo no Azure Databricks. Não é obrigatório para o MySQL, que usa um namespace de duas camadas.
  • <external-catalog-name>: somente Databricks para Databricks: nome do catálogo no workspace externo do Databricks que você está espelhando. Confira Criar um catálogo estrangeiro.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

As credenciais de acesso para o catálogo estrangeiro vêm da conexão nomeada, portanto, você não as especifica aqui. Ao criar a conexão, forneça credenciais usando Azure Databricks segredos em vez de cadeias de caracteres de texto sem formatação, conforme mostrado no exemplo de conexão acima.

Para obter informações sobre como gerenciar e trabalhar com catálogos estrangeiros, consulte Gerenciar e trabalhar com catálogos estrangeiros.

Atualizar metadados

O Catálogo do Unity atualiza automaticamente os metadados para tabelas estrangeiras no momento da consulta. Se o esquema do catálogo externo for alterado, o Catálogo do Unity buscará os metadados mais recentes quando a consulta for executada. Esse comportamento mantém o esquema atual e é ideal para a maioria das cargas de trabalho.

No entanto, o Databricks recomenda atualizar metadados manualmente nos seguintes casos:

  • Para manter a consistência de tabelas estrangeiras acessadas por mecanismos externos. Os caminhos que ignoram o Databricks Runtime não disparam atualizações automáticas, o que pode resultar em metadados obsoletos.
  • Para melhorar o desempenho de cargas de trabalho em que você deseja evitar a atualização de metadados durante a execução da consulta. Atualizar metadados proativamente permite que as consultas executem mais rapidamente usando metadados armazenados em cache. Essa abordagem é especialmente útil imediatamente após a criação de um catálogo estrangeiro porque a primeira consulta, caso contrário, dispara uma atualização completa.

Automatizar a atualização de metadados com o Lakeflow Jobs

Agende uma atualização de metadados periódica usando uma Tarefa do Lakeflow com o REFRESH FOREIGN comando SQL. Por exemplo:

-- Refresh an entire catalog
> REFRESH FOREIGN CATALOG some_catalog;
-- Refresh a specific schema
> REFRESH FOREIGN SCHEMA some_catalog.some_schema;
-- Refresh a specific table
> REFRESH FOREIGN TABLE some_catalog.some_schema.some_table;

Configure o trabalho a ser executado em intervalos regulares, dependendo da frequência com que você prevê alterações de esquema externo.

Carregar os dados de tabelas estrangeiras com exibições materializadas

O Databricks recomenda o carregamento de dados externos usando a federação de consultas ao criar visões materializadas. Confira Exibições materializadas.

Quando você usa a federação de consulta, os usuários podem referenciar os dados federados da seguinte maneira:

CREATE MATERIALIZED VIEW xyz AS SELECT * FROM federated_catalog.federated_schema.federated_table;

Exibir consultas federadas geradas pelo sistema

A federação de consulta converte instruções SQL do Databricks em instruções que podem ser enviadas por push para a fonte de dados federada. Para exibir a instrução SQL gerada, clique no nó de varredura da fonte de dados externa na exibição de grafo do Perfil de Consulta ou execute a instrução SQL EXPLAIN FORMATADA. Consulte a seção Pushdown com suporte da documentação de cada fonte de dados para cobertura.

Limitations

  • As consultas são somente leitura. A única exceção é quando a Federação do Lakehouse é usada para federar o metastore do Hive herdado de um workspace (federação de catálogo). Tabelas estrangeiras nesse cenário são graváveis. Ver O que significa gravar em um catálogo externo em um metastore do Hive federado?
  • A limitação de conexões é determinada usando o limite de consulta simultânea do SQL do Databricks. Não há limite entre warehouses por conexão. Consulte a lógica de enfileiramento e dimensionamento automático.
  • Não há suporte para cache de consulta do Databricks (Cache de Resultados e Cache de Disco) para consultas federadas. Isso significa que o use_cached_result parâmetro não se aplica a consultas em fontes federadas.
  • Tabelas e esquemas com nomes inválidos no Catálogo do Unity não têm suporte e são ignorados pelo Catálogo do Unity após a criação de um catálogo estrangeiro. Consulte a lista de regras de nomenclatura e limitações em Identificadores.
  • Os nomes de tabela e esquema são convertidos em letras minúsculas no Catálogo do Unity. Se isso causar colisões de nome, o Databricks não poderá garantir qual objeto é importado para o catálogo estrangeiro.
  • Para cada tabela estrangeira referenciada, o Databricks agenda uma subconsulta no sistema remoto para retornar um subconjunto de dados dessa tabela e, em seguida, retorna o resultado para uma tarefa de executor do Databricks em um único fluxo. Se o conjunto de resultados for muito grande, o executor poderá ficar sem memória.
  • O modo de acesso dedicado (antigo modo de acesso de usuário único) só está disponível para usuários que possuem a conexão.
  • A Federação do Lakehouse não pode federar tabelas estrangeiras com identificadores sensíveis a maiúsculas e minúsculas para conexões do Azure Synapse ou do Redshift.

Cotas de recursos

Azure Databricks impõe cotas de recursos em todos os objetos protegíveis do Catálogo do Unity. Essas cotas são listadas em Limites de recursos. Os catálogos estrangeiros e todos os objetos que eles contêm são incluídos no uso total da cota.

Se você espera exceder esses limites de recursos, entre em contato com sua equipe de conta do Azure Databricks.

Você pode monitorar o uso da cota usando as APIs de cotas de recursos do Catálogo do Unity. Consulte Monitorar o uso de cotas de recursos do Catálogo do Unity.

Recursos adicionais