Consultas do Hive: Ordenar por, Agrupar por, Distribuir por, Cluster Por exemplos
O Hive fornece linguagem de consulta do tipo SQL para fins de ETL, além de Hadoop sistema de arquivo.
A linguagem Hive Query (HiveQL) fornece ambiente do tipo SQL no Hive para trabalhar com tabelas, bancos de dados e consultas.
Podemos ter um tipo diferente de cláusulas associadas ao Hive para realizar consultas e manipulações de dados de diferentes tipos. Para melhor conectividade com diferentes nós fora do ambiente. O HIVE também fornece conectividade JDBC.
As consultas do Hive fornecem os seguintes recursos:
- Modelagem de dados como Criação de bancos de dados, tabelas, etc.
- Funcionalidades ETL como extração, transformação e carregamento de dados em tabelas
- Junta para mesclar diferentes tabelas de dados
- Scripts personalizados específicos do usuário para facilitar o código
- Ferramenta de consulta mais rápida baseada no Hadoop
Criando tabela no Hive
Antes de iniciar nosso tópico principal deste tutorial, primeiro criaremos uma tabela para usá-la como referência para o tutorial a seguir.
Aqui neste tutorial vamos criar a tabela “employees_guru” com 6 colunas.
Na captura de tela acima,
- Estamos criando a tabela “employees_guru” com 6 valores de coluna como Id, Nome, Idade, Endereço, Salário, Departamento, que pertence aos funcionários presentes na organização “guru”.
- Aqui nesta etapa estamos carregando dados na tabela Employees_guru. Os dados que vamos carregar serão colocados no arquivo Employees.txt
Ordenar por consulta
A sintaxe ORDER BY no HiveQL é semelhante à sintaxe de ORDER BY no SQL língua.
Order by é a cláusula que usamos com a instrução “SELECT” em Consultas de colmeia, o que ajuda a classificar os dados. A cláusula Order by usa colunas em tabelas Hive para classificar valores de coluna específicos mencionados em Order by. Para qualquer que seja o nome da coluna, estamos definindo a cláusula order by, a consulta selecionará e exibirá os resultados em ordem crescente ou decrescente dos valores específicos da coluna.
Se a ordem por campo mencionada for uma string, o resultado será exibido em ordem lexicográfica. No final, deve ser repassado para um único redutor.
Na captura de tela acima, podemos observar o seguinte
- É a consulta realizada na tabela “employees_guru” com a cláusula ORDER BY com Departamento como nome da coluna ORDER BY definido. “Departamento” é String para exibir os resultados com base na ordem lexicográfica.
- Esta é a saída real da consulta. Se observarmos corretamente, podemos ver que ele obtém resultados exibidos com base na coluna Departamento, como ADMIN, Finanças e assim por diante, para que a consulta seja executada.
Inquerir :
SELECT * FROM employees_guru ORDER BY Department;
Agrupar por consulta
A cláusula Group by usa colunas em tabelas Hive para agrupar valores de coluna específicos mencionados com o group by. Para qualquer que seja o nome da coluna, estamos definindo uma cláusula “groupby”, a consulta selecionará e exibirá os resultados agrupando os valores específicos da coluna.
Por exemplo, na captura de tela abaixo será exibida a contagem total de funcionários presentes em cada departamento. Aqui temos “Departamento” como Grupo por valor.
Na captura de tela acima, observaremos o seguinte
- É a consulta que é realizada na tabela “employees_guru” com a cláusula GROUP BY com Departamento como nome da coluna GROUP BY definido.
- A saída mostrada aqui é o nome do departamento e a contagem de funcionários em departamentos diferentes. Aqui todos os funcionários pertencentes ao departamento específico são agrupados e exibidos nos resultados. Então o resultado é o nome do departamento com o número total de funcionários presentes em cada departamento.
Inquérito:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Ordenar
A cláusula Classificar por é executada nos nomes das colunas das tabelas Hive para classificar a saída. Podemos mencionar DESC para classificar a ordem em ordem decrescente e mencionar ASC para ordem crescente da classificação.
Neste tipo, ele classificará as linhas antes de alimentar o redutor. Sempre classificar por depende dos tipos de coluna.
Por exemplo, se os tipos de colunas forem numéricos, ele classificará em ordem numérica; se os tipos de colunas forem string, ele classificará em ordem lexicográfica.
Na captura de tela acima, podemos observar o seguinte:
- É a consulta que realiza na tabela “employees_guru” com a cláusula SORT BY com “id” como define o nome da coluna SORT BY. Usamos a palavra-chave DESC.
- Portanto, a saída exibida estará em ordem decrescente de “id”.
Inquérito:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Cluster By usado como uma alternativa para as cláusulas Distribute BY e Sort BY no Hive-QL.
Cluster Cláusula BY usada em tabelas presentes no Hive. O Hive usa as colunas em Cluster by para distribuir as linhas entre os redutores. Cluster As colunas BY irão para os vários redutores.
- Garante ordens de classificação de valores presentes em vários redutores
Por exemplo, nos Cluster Cláusula By mencionada no nome da coluna Id da tabela Employees_guru. A saída ao executar esta consulta fornecerá resultados para vários redutores no back-end. Mas como front-end é uma cláusula alternativa para Classificar por e Distribuir por.
Este é, na verdade, um processo de back-end quando realizamos uma consulta com sort by, group by e cluster by em termos do framework Map reduce. Então, se quisermos armazenar resultados em vários reducers, vamos com Cluster By.
Na captura de tela acima, obtemos as seguintes observações:
- É a consulta que executa a cláusula CLUSTER BY no valor do campo Id. Aqui será obtida uma classificação dos valores de Id.
- Ele exibe o Id e os Nomes presentes na classificação guru_employees ordenados por
Inquérito:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Distribuir por
Cláusula Distribute BY usada em tabelas presentes no Hive. O Hive usa as colunas em Distribute by para distribuir as linhas entre os redutores. Todas as colunas Distribute BY irão para o mesmo redutor.
- Ele garante que cada um dos N redutores obtenha intervalos de coluna não sobrepostos
- Não classifica a saída de cada redutor
Na captura de tela acima, podemos observar o seguinte
- Cláusula DISTRIBUTE BY atuando no Id da tabela “empoloyees_guru”
- Saída mostrando ID, Nome. No back-end, irá para o mesmo redutor
Inquérito:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;