recomendações de desempenho da lakehouse Federation
Este artigo fornece orientações para melhorar o desempenho das consultas da Lakehouse Federation.
Combine vários predicados usando o operador AND
O Databricks Runtime tenta enviar predicados para o mecanismo de banco de dados remoto para reduzir o número de registros que estão sendo buscados na rede. Se um predicado não puder ser transferido para baixo, a consulta executada no mecanismo de banco de dados remoto excluirá esse predicado, de modo que a filtragem deverá ser feita usando o Databricks Runtime. No entanto, se uma determinada parte do filtro não puder ser empurrada para baixo, outra parte do filtro ainda poderá ser empurrada para baixo se for unida pelo operador AND.
Exemplo 1:
Consulta ao Databricks
SELECT * FROM foreign_catalog.schema.table WHERE name ILIKE 'john'
A expressão ILIKE
não pode ser transferida para o banco de dados remoto (por exemplo, MySQL) porque não há tradução adequada.
A filtragem deve ser feita usando o Databricks Runtime.
A consulta que seria enviada ao banco de dados remoto retorna todos os registros:
SELECT * FROM catalog.schema.table
Exemplo 2:
Consulta ao Databricks
SELECT * FROM foreign_catalog.schema.table WHERE name ILIKE 'john' AND date > '2025-05-01'
A expressão ILIKE
não pode ser enviada para o banco de dados remoto (por exemplo, MySQL) porque não há tradução adequada, mas a comparação de datas pode ser feita.
A filtragem de nomes ainda precisa ser feita usando o Databricks Runtime, mas a comparação de datas deve reduzir o número de registros que estão sendo buscados.
A consulta que seria enviada ao banco de dados remoto retorna um subconjunto de registros:
SELECT * FROM catalog.schema.table WHERE date > '2025-05-01'
Verifique a consulta que deve ser executada no banco de dados remoto
O senhor pode usar o comando EXPLAIN FORMATTED para verificar qual consulta seria enviada ao banco de dados remoto.
A consulta real pode ser diferente da que aparece na saída do comando explain devido ao Adaptive Query Execution.
Definir o tamanho dos lotes que estão sendo obtidos do banco de dados remoto
Os conectores que usam o protocolo de transferência JDBC podem ser configurados para controlar como eles obtêm dados de sistemas remotos:
- Databricks
- Microsoft SQL Server
- Microsoft Azure Synapse
- MySQL
- Oracle
- PostgreSQL
- Redshift
- Nuvem de dados do Salesforce
- Teradata
O tamanho da busca do JDBC determina o número de linhas a serem buscadas por viagem de ida e volta. Em default, a maioria dos conectores JDBC busca dados atomicamente. Isso pode fazer com que a quantidade de dados exceda a memória disponível.
Para evitar erros de falta de memória, defina o parâmetro fetchSize
. Quando fetchSize
é definido como um valor diferente de zero, o conector lê os dados em lotes. O número máximo de linhas por lote é igual ao valor de fetchSize
. A Databricks recomenda especificar um valor fetchSize
grande (por exemplo, 100,000
) porque o tempo total de execução da consulta pode ser prolongado se o número de linhas em lotes for muito pequeno.
Esse parâmetro permite que os nós do worker leiam os dados em lotes, mas não em paralelo.
Requisitos de computação:
- O senhor deve usar o site compute em Databricks Runtime 16.1 ou acima. SQL O warehouse deve ser Pro ou sem servidor e deve usar o 2024.50.
SELECT * FROM mySqlCatalog.schema.table WITH ('fetchSize' 100000)
Definir o parâmetro de tamanho da partição (Snowflake)
Snowflake permite a busca de dados em várias partições, o que possibilita o envolvimento de vários executores e o processamento paralelo.
É importante escolher um tamanho de partição apropriado definindo o parâmetro partition_size_in_mb
.
Esse parâmetro especifica o tamanho descompactado recomendado para cada partição. Para reduzir o número de partições, especifique um valor maior.
O valor de default é 100
(MB).
O parâmetro partition_size_in_mb
define um tamanho recomendado; o tamanho real das partições pode variar.
Requisitos de computação:
- O senhor deve usar o site compute em Databricks Runtime 16.1 ou acima. SQL O warehouse deve ser Pro ou sem servidor e deve usar o 2024.50.
SELECT * FROM snowflakeCatalog.schema.table WITH ('partition_size_in_mb' 1000)