Consultar bancos de dados externos usando a função remote_query
Visualização
Este recurso está em Visualização Pública.
A função de valor de tabela remote_query (TVF) permite que você execute consultas SQL diretamente em bancos de dados externos e data warehouse de dentro Databricks, usando a sintaxe SQL nativa do sistema remoto. Esta função fornece uma alternativa flexível à federação de consultas, permitindo que você execute consultas escritas no dialeto do banco de dados remoto sem precisar traduzi-las para o Databricks SQL.
remote_query comparado à federação de consultas
A tabela a seguir resume as key diferenças entre a função remote_query e a federação de consultas:
Atributo |
| Federação de consultas |
|---|---|---|
Sintaxe de consulta | Escreva consultas usando o dialeto SQL nativo do banco de dados remoto (por exemplo, Oracle PL/SQL, BigQuery SQL). | Escreva consultas usando a sintaxe Databricks SQL . O Databricks traduz e envia operações compatíveis para o banco de dados remoto. |
Caso de uso |
|
|
Controle de acesso | Os usuários precisam do privilégio | Os usuários precisam de privilégios de nível de tabela em objetos de catálogo externo. Controle refinado. |
Antes de começar
Requisitos do workspace:
- Espaço de trabalho preparado para o Catálogo do Unity.
Requisitos de computação:
- Conectividade de rede do seu cluster do Databricks Runtime ou SQL warehouse para os sistemas de banco de dados de destino. Veja recomendações de rede para a Federação Lakehouse.
- clusters Databricks devem usar Databricks Runtime 17.3 ou superior.
- SQL Warehouse deve ser Pro ou serverless e usar a versão 2025.35 ou superior.
Permissões necessárias:
- Para criar uma conexão, você deve ser um administrador do metastore ou um usuário com o privilégio
CREATE CONNECTIONno metastore do Unity Catalog. - Para usar a função
remote_query, você deve ter o privilégioUSE CONNECTIONna conexão ou o privilégioSELECTem uma view que encapsula a função. Os clusters de usuário único também exigem a permissãoMANAGEna conexão.
Crie uma conexão
Para usar a função remote_query , primeiro você precisa criar uma conexão do Unity Catalog com seu banco de dados externo. Se você já tiver uma conexão criada para federação de consultas, poderá reutilizá-la.
A função remote_query suporta conexões com os seguintes tipos de conexão:
Para obter informações sobre como gerenciar conexões existentes, consulte gerenciar conexões para a Lakehouse Federation.
Conceder acesso à conexão
Para usar a função remote_query , você deve ter o privilégio USE CONNECTION na conexão (ou o privilégio MANAGE em clusters de usuário único).
GRANT USE CONNECTION ON CONNECTION <connection-name> TO <user-or-group>;
Use a função remote_query
A função remote_query executa uma consulta no banco de dados remoto e retorna os resultados como uma tabela que você pode usar em consultas Databricks SQL .
Sintaxe
SELECT * FROM remote_query(
'<connection-name>',
<option-key> => '<option-value>'
[, <option-key> => '<option-value>' ...]
)
Parâmetros obrigatórios
connection-name: O nome da conexão do Unity Catalog a ser usada.
Todos os outros parâmetros necessários variam de acordo com o tipo de conexão. Consulte Opções específicas do conector para obter detalhes.
Opções específicas do conector
As opções disponíveis variam de acordo com o tipo de conexão. As tabelas a seguir descrevem as opções para cada conector.
MySQL, PostgreSQL, SQL Server, Redshift e Teradata
Parâmetro | Obrigatório | Descrição |
|---|---|---|
| Sim | O nome do banco de dados no sistema remoto. |
| Sim (ou | Uma sequência de consulta SQL para execução no banco de dados remoto. Não pode ser usado com |
| Sim (ou | O nome da tabela a ser consultada. Não pode ser usado com |
| Não | O número de linhas a serem buscadas por viagem de ida e volta. Valores maiores podem melhorar o desempenho, mas usam mais memória. padrão: 0 (usar driver default). |
| Não | Uma coluna com valores distribuídos uniformemente para uso na busca de dados paralela. Deve ser usado com |
| Não | O valor mínimo da coluna de partição. Deve ser usado com |
| Não | O valor máximo da coluna de partição. Deve ser usado com |
| Não | O número de conexões paralelas a serem usadas para buscar dados. Não defina um valor muito alto (centenas). Deve ser usado com |
Ao usar parâmetros de partição, todos os quatro parâmetros (partitionColumn, lowerBound, upperBound, numPartitions) devem ser especificados juntos, e você deve usar a opção dbtable em vez de query.
Oráculo
Parâmetro | Obrigatório | Descrição |
|---|---|---|
| Sim | O nome do serviço Oracle (usado em vez de |
| Sim (ou | Uma sequência de consulta SQL para execução no banco de dados remoto. Não pode ser usado com |
| Sim (ou | O nome da tabela a ser consultada. Não pode ser usado com |
| Não | O número de linhas a serem buscadas por viagem de ida e volta. Valores maiores podem melhorar o desempenho, mas usam mais memória. padrão: 0 (usar driver default). |
| Não | Uma coluna com valores distribuídos uniformemente para uso na busca de dados paralela. Deve ser usado com |
| Não | O valor mínimo da coluna de partição. Deve ser usado com |
| Não | O valor máximo da coluna de partição. Deve ser usado com |
| Não | O número de conexões paralelas a serem usadas para buscar dados. Não defina um valor muito alto (centenas). Deve ser usado com |
Ao usar parâmetros de partição, todos os quatro parâmetros (partitionColumn, lowerBound, upperBound, numPartitions) devem ser especificados juntos, e você deve usar a opção dbtable em vez de query.
Snowflake
Parâmetro | Obrigatório | Descrição |
|---|---|---|
| Sim | O nome do banco de dados no Snowflake. |
| Sim (ou | Uma sequência de consulta SQL para execução no banco de dados remoto. Não pode ser usado com |
| Sim (ou | O nome da tabela a ser consultada (nome de parte única ou nome de várias partes). Não pode ser usado com |
| Não | O nome do esquema no Snowflake. padrão: |
| Não | Tempo limite da consulta em segundos. padrão: 0 (sem tempo limite). |
| Não | O tamanho esperado da partição em megabytes para busca paralela de dados. padrão: 100 MB. |
BigQuery
Parâmetro | Obrigatório | Descrição |
|---|---|---|
| Sim (ou | Uma sequência de consulta SQL para execução no banco de dados remoto. Não pode ser usado com |
| Sim (ou | O nome da tabela a ser consultada. Não pode ser usado com |
| Sim, se for necessária a materialização de resultados. A materialização é necessária se | O nome dataset BigQuery onde as tabelas temporárias são materializadas. O tempo de vida (TTL) default das tabelas temporárias é de 24 horas. |
| Não | O ID do projeto do BigQuery para materialização. padrão para o projeto especificado na conexão. |
| Não | Se deve habilitar a materialização para consultas. Defina como |
| Não | O ID do projeto pai para fins de cobrança. |
Todos os parâmetros do BigQuery diferenciam maiúsculas de minúsculas.
Opções adicionais de controle de pushdown
Você pode combinar a função remote_query com as operações Databricks SQL , e a maioria dessas operações também pode ser aplicada. Você também pode controlar quais operações Databricks SQL podem ser enviadas. Essas opções se aplicam a todos os tipos de conexão e não diferenciam maiúsculas de minúsculas.
Parâmetro | Padrão | Descrição |
|---|---|---|
|
| Habilitar ou desabilitar o envio de cláusulas |
|
| Habilitar ou desabilitar o envio de cláusulas |
|
| Habilitar ou desabilitar o envio de filtros |
|
| Habilita ou desabilita o envio de funções agregadas ( |
|
| Habilita ou desabilita o envio de consultas top-N (combinação de |
Por default, todos os pushdowns estão habilitados. Você pode desabilitar pushdowns específicos, se necessário, para solucionar problemas ou contornar problemas de compatibilidade com bancos de dados remotos específicos.
Delegar acesso por meio da visualização
Você pode delegar acesso a dados remotos sem conceder aos usuários privilégios USE CONNECTION diretos, encapsulando a função remote_query em uma view. Essa abordagem tem os seguintes benefícios:
- Controle de acesso simplificado : conceda privilégio
SELECTna view em vez de gerenciar privilégiosUSE CONNECTION. - Segurança de dados : controle quais colunas e linhas os usuários podem acessar definindo a consulta view .
- Rastrear linhagem : rastreie o acesso aos dados por meio da view da linhagem em vez do uso direto da conexão.
Para delegar acesso por meio de uma view:
-
Crie uma view que chame a função
remote_query:SQLCREATE VIEW sales_data_view AS
SELECT * FROM remote_query(
'my_connection',
database => 'sales_db',
query => 'SELECT region, product, revenue FROM sales'
); -
Conceder privilégio
SELECTna view para usuários ou grupos:SQLGRANT SELECT ON VIEW sales_data_view TO <user-or-group>; -
Os usuários agora podem consultar a view sem precisar do privilégio
USE CONNECTION:SQLSELECT * FROM sales_data_view WHERE region = 'US';
O proprietário view deve ter privilégio USE CONNECTION na conexão. Quando os usuários consultam a view, a verificação de acesso à conexão é realizada usando os privilégios do proprietário view , não os privilégios do usuário que faz a consulta.
Exemplos
Execução básica de consulta
Execute uma consulta em um banco de dados PostgreSQL:
SELECT * FROM remote_query(
'my_postgres_connection',
database => 'sales_db',
query => 'SELECT * FROM orders WHERE order_date > CURRENT_DATE - INTERVAL \'30 days\''
);
Consultar uma tabela específica
Consultar uma tabela MySQL diretamente:
SELECT * FROM remote_query(
'my_mysql_connection',
database => 'inventory',
dbtable => 'my_schema.products'
);
Oracle com nome de serviço
Consultar um banco de dados Oracle:
SELECT * FROM remote_query(
'my_oracle_connection',
serviceName => 'ORCL',
query => 'SELECT * FROM customers WHERE ROWNUM <= 1000'
);
Consulta do BigQuery
Consultar Google BigQuery:
SELECT * FROM remote_query(
'my_bigquery_connection',
materializationDataset => 'analytics',
query => 'SELECT * FROM `project.dataset.table` WHERE created_date > DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)'
);
Consulta deSnowflake
Consulta Snowflake:
SELECT * FROM remote_query(
'my_snowflake_connection',
database => 'ANALYTICS_DB',
query => 'SELECT * FROM SALES WHERE SALE_DATE >= DATEADD(day, -30, CURRENT_DATE())'
);
Ajuste de desempenho com particionamento
Buscar dados em paralelo de uma tabela do SQL Server:
SELECT * FROM remote_query(
'my_sqlserver_connection',
database => 'sales',
dbtable => 'transactions',
partitionColumn => 'transaction_id',
lowerBound => '0',
upperBound => '1000000',
numPartitions => '10',
fetchsize => '1000'
);
Combine com operações Databricks SQL
Aplique filtros e transformações adicionais:
SELECT customer_id, SUM(amount) as total_amount
FROM remote_query(
'my_postgres_connection',
database => 'orders_db',
query => 'SELECT customer_id, amount, order_date FROM orders'
)
WHERE order_date >= '2025-01-01'
GROUP BY customer_id
HAVING total_amount > 1000
ORDER BY total_amount DESC
LIMIT 100;
Crie uma view para acesso delegado
Crie uma view que envolva a função remote_query . Usuários com privilégio SELECT na view podem consultar os dados sem precisar de privilégio USE CONNECTION na conexão subjacente:
CREATE VIEW sales_summary AS
SELECT * FROM remote_query(
'my_mysql_connection',
database => 'sales',
query => 'SELECT region, product, SUM(revenue) as total_revenue FROM sales_data GROUP BY region, product'
);
GRANT SELECT ON VIEW sales_summary TO <user-or-group>;
Comportamento de pushdown de controle
Quando você usa a função remote_query , o Databricks pode enviar operações adicionais para o banco de dados remoto além da consulta especificada. Este recurso é útil quando você consulta uma view que usa a função remote_query .
As seguintes operações podem ser empurradas para baixo:
- Filtros :
WHEREcláusulas aplicadas ao resultado da consulta remota - Projeções : Seleção de colunas (
SELECTcolunas específicas) - Limite :
LIMITcláusulas para restringir o número de linhas retornadas - Offset :
OFFSETcláusulas para pular linhas - Agregados : Funções de agregação como
COUNT,SUM,AVG,MAX,MIN - Top-N : Combinação de
ORDER BYeLIMITpara consultas top/bottom N
O suporte a pushdown varia de acordo com a fonte de dados. Consulte a documentação do seu tipo de conexão específico para obter detalhes.
Desabilite pushdowns específicos para solução de problemas ou compatibilidade:
SELECT * FROM remote_query(
'my_postgres_connection',
database => 'analytics',
query => 'SELECT * FROM complex_view',
`pushdown.aggregates.enabled` => 'false',
`pushdown.filters.enabled` => 'false'
);
Limitações
-
Operações somente leitura : A função
remote_querysuporta apenas consultasSELECT. Operações de modificação de dados (INSERT, UPDATE, DELETE, merge), operações DDL (CREATE, DROP, ALTER) e procedimentos armazenados não são suportados. -
Validação de consulta : a consulta fornecida é executada diretamente no banco de dados remoto. O Databricks valida se a consulta é somente leitura executando a inspeção do esquema, mas a validação de sintaxe e semântica é realizada pelo banco de dados remoto.
Solução de problemas
Erros de permissão
Se você receber um erro de permissão, verifique se:
- Você tem o privilégio
USE CONNECTIONna conexão ou o privilégioSELECTem uma view que encapsula a função. - As credenciais na conexão têm permissões apropriadas no banco de dados remoto.
Exemplo de erro:
PERMISSION_DENIED: User does not have USE CONNECTION on Connection 'my_connection'
Resolução:
GRANT USE CONNECTION ON CONNECTION my_connection TO <user-or-group>;
Parâmetros não suportados
Se você receber um erro sobre parâmetros não suportados, verifique se está usando os parâmetros corretos para seu tipo de conexão. A mensagem de erro lista os parâmetros permitidos.
Exemplo de erro:
REMOTE_QUERY_FUNCTION_UNSUPPORTED_CONNECTOR_PARAMETERS: The following parameters are not supported for connection type 'postgresql': 'materializationDataset'. Allowed parameters for this connection type are: 'database', 'query', 'dbtable', 'fetchsize', 'partitionColumn', 'lowerBound', 'upperBound', 'numPartitions'.
Resolução: Remova o parâmetro não suportado e use os parâmetros corretos para seu tipo de conexão.
Operações DML não suportadas
A função remote_query suporta apenas consultas somente leitura SELECT .
Exemplo de erro:
DML_OPERATIONS_NOT_SUPPORTED_FOR_REMOTE_QUERY_FUNCTION: Data modification operations are not supported in remote_query function.
Resolução: Remova quaisquer instruções INSERT, UPDATE, DELETE ou DDL da sua consulta. Use somente instruções SELECT.