Banco de perguntas para entrevistas com analistas de dados

Fonte: Niuke https://www.nowcoder.com/exam/interview

Como otimizar o SQL

A otimização do SQL depende do ambiente operacional e pode ser dividida em mysql e Hive. MySQL é otimizado para consultas de banco de dados e Hive é otimizado com base no MapReduce.

Os analistas da Internet geralmente consultam dados com base no Hive, portanto, a seção a seguir analisa como otimizar o Hive.
(1) Compreender as camadas e a granularidade dos data warehouses é fundamental.
Porque comparado com o banco de dados é projetado para armazenamento e atualização de dados, o data warehouse é mais para consulta de dados. Selecionar a granularidade de dados apropriada para necessidades de negócios específicas é a base para a otimização de SQL. Por exemplo, se você escolher uma tabela Hive com granularidade de usuário, em comparação com o acesso a uma tabela Hive com granularidade PV, a quantidade de dados é muito menor e as consultas SQL são mais rápidas.
(2) Para problemas típicos, como distorção de dados.
Causas
1. O grupo por dimensão é muito pequeno e o número de um determinado valor é muito grande (consequência: a redução de um determinado valor consome muito tempo) 2. A
contagem distinta de deduplicação (xx distinto) tem muitos valores especiais ​​(consequência: processar isso A redução de valores especiais leva tempo)
3. Connection join, count(distinct), group by, join e outras operações acionarão a ação Shuffle. Uma vez acionados, todos os valores da mesma chave será puxado para um ou vários nós, é propenso a problemas de ponto único.
(2) Solução 1. Lógica de negócios: Por exemplo, sabemos do negócio que algumas chaves correspondem a uma grande quantidade de dados ao agrupar por, podemos calcular essas chaves separadamente e, em seguida, juntar-se a outras chaves 2. Configuração de parâmetros do Hive : Defina hive.map.aggr = true para fazer algumas operações de agregação no mapa, o que é mais eficiente, mas requer mais memória. Defina hive.groupby.skewindata=true para equilibrar a carga quando os dados estiverem distorcidos. Quando a opção for definida para true, o plano de consulta resultante terá dois MRJobs. No primeiro MRJob, o conjunto de resultados de saída do Map será distribuído aleatoriamente para os Reduces, e cada Reduce executará operações de agregação parcial e exibirá os resultados. O resultado desse processamento é que a mesma Chave GroupBy pode ser distribuída para diferentes Reduces , de Para atingir o propósito de balanceamento de carga; o segundo MRJob distribui os resultados dos dados pré-processados ​​para o Reduce de acordo com a GroupBy Key (este processo pode garantir que a mesma GroupBy Key seja distribuída para o mesmo Reduce) e, finalmente, conclui a agregação final operar. (3) Otimização da instrução de consulta: 1. Realize um group by antes da operação de contagem (distinta) e reduza a chave para remover a duplicação 2. Map join: Use map join para criar tabelas de dimensões pequenas (1.000 entradas). número de registros abaixo) Memória avançada, redução completa no lado do mapa.

おすすめ

転載: blog.csdn.net/m0_37690430/article/details/126369195