Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2023-05-19 GMT+08:00

Otimização da consulta SQL de dados de várias fontes

Cenário

As empresas geralmente armazenam dados massivos, como de vários bancos de dados e armazéns, para gerenciamento e coleta de informações. No entanto, fontes de dados diversificadas, estruturas de conjuntos de dados híbridos e armazenamento de dados dispersos reduzem a eficiência da consulta.

O Spark de código aberto só suporta pushdown de filtro simples durante a consulta de dados de várias fontes. O desempenho do mecanismo SQL está deteriorado devido a uma grande quantidade de transmissão de dados desnecessária. A função pushdown é aprimorada para que aggregate, projection complexa e predicate complexa possam ser enviados para fontes de dados, reduzindo a transmissão de dados desnecessária e melhorando o desempenho da consulta.

Somente a origem de dados JDBC suporta pushdown de operações de consulta, como aggregate, projection, predicate, aggregate over inner join e aggregate over union all. Todas as operações de pushdown podem ser ativadas com base em suas necessidades.

Tabela 1 Consulta aprimorada de consulta entre fontes

Módulo

Antes do aprimoramento

Após o aprimoramento

aggregate

O pushdown da aggregate não é suportado.

  • funções de agregação incluindo sum, avg, max, min e count são suportadas.

    Exemplo: selecione count(*) da tabela

  • Expressões internas de funções de agregação são suportadas.

    Exemplo: selecione sum(a+b) da tabela

  • O cálculo de funções de agregação é suportado. Exemplo: selecione avg(a) + max(b) da tabela
  • Pushdown de having é suportado.

    Exemplo: selecione sum(a) da tabela onde a>0 group by b tendo sum(a)>10

  • O pushdown de algumas funções é suportado.

    Pushdown de linhas em matemática, tempo e funções de cadeia, como abs(), month() e length() são suportados. Além das funções internas anteriores, você pode executar o comando SET para adicionar funções suportadas pelas fontes de dados.

    Exemplo: selecione sum(abs(a)) da tabela

  • Pushdown de limit e order by após aggregate é suportado. No entanto, o pushdown não é suportado no Oracle, porque o Oracle não suporta limit.

    Exemplo: selecione sum(a) da tabela onde a>0 group by b order by sum(a) limit 5

projection

Apenas pushdown de projection simples é suportado. Exemplo: selecione a, b da tabela

  • Expressões complexas podem ser empurradas para baixo.

    Exemplo: selecione (a+b)*c da tabela

  • Algumas funções podem ser empurradas para baixo. Para obter detalhes, consulte a descrição abaixo da tabela.

    Exemplo: selecione length(a)+abs(b) da tabela

  • Pushdown do limit e order by após a projection é suportada.

    Exemplo: selecione a, b+c da tabela order by um limit 3

predicate

Somente a filtragem simples com o nome da coluna à esquerda do operador e os valores à direita é suportada. Exemplo:

selecione * da tabela em que a>0 ou b em ("aaa", "bbb")

  • O pushdown de expressões complexas é suportado.

    Exemplo: selecione * da tabela em que a+b>c*d ou a/c em (1, 2, 3)

  • Algumas funções podem ser empurradas para baixo. Para obter detalhes, consulte a descrição abaixo da tabela.

    Exemplo: selecione * da tabela onde length(a)>5

aggregate over inner join

Os dados relacionados das duas tabelas devem ser carregados no Spark. A operação de junção deve ser executada antes da operação aggregate.

Há suporte para as seguintes funções:

  • funções de agregação incluindo sum, avg, max, min e count são suportadas.
  • Todas as operações aggregate podem ser realizadas em uma mesma tabela. As operações group by podem ser executadas em uma ou duas tabelas e somente a junção interna é suportada.

Os seguintes cenários não são suportados:

  • aggregate não pode ser empurrado para baixo a partir das tabelas de junção esquerda e direita.
  • aggregate contém operações, por exemplo, sum(a+b).
  • Operações aggregate, por exemplo, sum(a)+min(b).

aggregate over union all

Os dados relacionados das duas tabelas devem ser carregados no Spark. union deve ser realizada antes de aggregate.

Cenários suportados:

funções de agregação incluindo sum, avg, max, min e count são suportadas.

Cenários não suportados:

  • aggregate contém operações, por exemplo, sum(a+b).
  • Operações aggregate, por exemplo, sum(a)+min(b).

Precauções

  • Se a fonte de dados externa for Hive, a operação de consulta não poderá ser executada em tabelas externas criadas pelo Spark.
  • Somente fontes de dados MySQL e MPPDB são suportadas.