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.

Criando tabela no Hive

Na captura de tela acima,

  1. 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”.
  2. 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.

Ordenar por consulta

Na captura de tela acima, podemos observar o seguinte

  1. É 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.
  2. 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.

Agrupar por consulta

Na captura de tela acima, observaremos o seguinte

  1. É a consulta que é realizada na tabela “employees_guru” com a cláusula GROUP BY com Departamento como nome da coluna GROUP BY definido.
  2. 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.

Ordenar por

Na captura de tela acima, podemos observar o seguinte:

  1. É 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.
  2. 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.

Cluster By

Na captura de tela acima, obtemos as seguintes observações:

  1. É a consulta que executa a cláusula CLUSTER BY no valor do campo Id. Aqui será obtida uma classificação dos valores de Id.
  2. 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

Distribuir por

Na captura de tela acima, podemos observar o seguinte

  1. Cláusula DISTRIBUTE BY atuando no Id da tabela “empoloyees_guru”
  2. Saída mostrando ID, Nome. No back-end, irá para o mesmo redutor

Inquérito:

SELECT  Id, Name from employees_guru DISTRIBUTE BY Id;