Exemplos de consultas Hive: Order By, Group By & Cluster By
โก Resumo Inteligente
As consultas do Hive usam as clรกusulas ORDER BY, GROUP BY, SORT BY, CLUSTER BY e DISTRIBUTE BY para classificar, agrupar e distribuir linhas entre os reducers, e cada clรกusula รฉ demonstrada aqui em uma รบnica tabela de funcionรกrios de exemplo.

O Hive fornece uma linguagem de consulta do tipo SQL para fins de ETL sobre o Hadoop sistema de arquivo.
A Linguagem de Consulta Hive (HiveQL) fornece um ambiente do tipo SQL no Hive para trabalhar com tabelas, bancos de dados e consultas.
O Hive utiliza diferentes tipos de clรกusulas para realizar diversos tipos de manipulaรงรฃo e consulta de dados, e oferece conectividade JDBC para melhorar as conexรตes com nรณs externos ao ambiente.
As consultas do Hive oferecem os seguintes recursos:
- Modelagem de dados, como a criaรงรฃo de bancos de dados, tabelas, etc.
- funcionalidades ETL como extracรงรฃ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 comeรงarmos com o tema principal deste tutorial, vamos primeiro criar uma tabela que servirรก de referรชncia para as seรงรตes seguintes.
Neste tutorial, vamos criar a tabela โemployees_guruโ com 6 colunas, como mostra a captura de tela abaixo.
Na captura de tela acima,
- Estamos criando a tabela โemployees_guruโ com 6 colunas, como Id, Nome, Idade, Endereรงo, Salรกrio e Departamento, que pertencem aos funcionรกrios da organizaรงรฃo โguruโ.
- Nesta etapa, estamos carregando dados na tabela employees_guru. Os dados que vamos carregar estรฃo localizados no arquivo Employees.txt.
Ordenar por consulta
A sintaxe ORDER BY no HiveQL รฉ semelhante ร sintaxe ORDER BY no... SQL lรญngua.
ORDER BY รฉ a clรกusula que usamos com a instruรงรฃo โSELECTโ em Consultas de colmeia Para classificar dados, utiliza colunas em tabelas do Hive para ordenar os valores das colunas especรญficas mencionadas com ORDER BY, e a consulta exibe os resultados em ordem crescente ou decrescente desses valores.
Se o campo ORDER BY mencionado for uma string, o resultado serรก exibido em ordem lexicogrรกfica. No backend, todo o conjunto de resultados precisa ser passado para um รบnico reducer.
Esse รบnico redutor tambรฉm torna o ORDER BY caro em uma tabela grande, portanto, no modo estrito (hive.mapred.mode=strictO Hive rejeita uma instruรงรฃo ORDER BY que nรฃo contenha uma clรกusula LIMIT.
A captura de tela abaixo mostra a consulta ORDER BY e suas linhas classificadas.
A partir da captura de tela acima, podemos observar o seguinte:
- Trata-se da consulta realizada na tabela โemployees_guruโ com a clรกusula ORDER BY e โDepartmentโ como o nome da coluna definida na clรกusula ORDER BY. โDepartmentโ รฉ uma string, portanto, os resultados sรฃo exibidos em ordem lexicogrรกfica.
- Este รฉ o resultado real da consulta. Os resultados sรฃo exibidos com base na coluna Departamento, como ADMINISTRAรรO, Finanรงas e assim por diante, em ordem.
Inquรฉrito:
SELECT * FROM employees_guru ORDER BY Department;
Agrupar por consulta
A clรกusula GROUP BY usa colunas em tabelas do Hive para agrupar.ping Os valores especรญficos da coluna mencionados com GROUP BY sรฃo usados โโna consulta, que seleciona e exibe os resultados agrupados por esses valores.
Por exemplo, a captura de tela abaixo exibe o nรบmero total de funcionรกrios presentes em cada departamento. Aqui, temos "Departamento" como o valor de AGRUPAMENTO.
A partir da captura de tela acima, podemos observar o seguinte:
- Trata-se da consulta realizada na tabela โemployees_guruโ com a clรกusula GROUP BY e Department como o nome da coluna GROUP BY definida.
- O resultado apresentado aqui mostra o nome do departamento e o nรบmero de funcionรกrios em cada departamento. Todos os funcionรกrios pertencentes a um departamento especรญfico sรฃo agrupados e exibidos, portanto, cada linha de resultado corresponde ao nome do departamento e seu nรบmero total de funcionรกrios.
Inquรฉrito:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Ordenar
A clรกusula SORT BY opera sobre os nomes das colunas das tabelas do Hive para ordenar a saรญda. Podemos usar DESC para ordenar em ordem decrescente e ASC para ordenar em ordem crescente.
A opรงรฃo SORT BY ordena as linhas antes de enviรก-las ao redutor, garantindo a ordem dentro de cada redutor, em vez de em todo o resultado. A ordenaรงรฃo sempre depende do tipo da coluna.
Por exemplo, se o tipo da coluna for numรฉrico, a classificaรงรฃo serรก feita em ordem numรฉrica, e se o tipo da coluna for de texto, a classificaรงรฃo serรก feita em ordem lexicogrรกfica.
A captura de tela abaixo mostra a consulta SORT BY usando DESC.
Na captura de tela acima, podemos observar o seguinte:
- Trata-se da consulta realizada na tabela โemployees_guruโ com a clรกusula SORT BY e โIdโ como nome da coluna definida na clรกusula SORT BY. Utilizamos a palavra-chave DESC.
- Assim, a saรญda exibida estรก em ordem decrescente de "Id".
Inquรฉrito:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
CLUSTER BY รฉ usado como uma alternativa ร s clรกusulas DISTRIBUTE BY e SORT BY no HiveQL.
A clรกusula CLUSTER BY รฉ usada em tabelas presentes no Hive. O Hive usa as colunas em CLUSTER BY para distribuir as linhas entre os reducers, e as colunas em CLUSTER BY sรฃo direcionadas para mรบltiplos reducers. Isso tambรฉm garante a ordem de classificaรงรฃo dos valores presentes nesses mรบltiplos reducers.
Por exemplo, a clรกusula CLUSTER BY รฉ mencionada no nome da coluna Id da tabela employees_guru. A execuรงรฃo dessa consulta envia resultados para vรกrios reducers no back-end, mas no front-end ela funciona como uma clรกusula alternativa tanto para SORT BY quanto para DISTRIBUTE BY.
Este รฉ o processo de back-end quando realizamos uma consulta com SORT BY, GROUP BY ou CLUSTER BY no framework MapReduce. Portanto, se quisermos armazenar resultados em vรกrios reducers, usamos CLUSTER BY.
A gramรกtica CLUSTER BY aceita apenas nomes de colunas, portanto, ASC e DESC nรฃo podem ser associados a ela; um resultado em ordem decrescente requer DISTRIBUTE BY com um SORT BY โฆ DESC separado.
A captura de tela abaixo mostra a consulta CLUSTER BY no Id.
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, ela irรก classificar os valores de Id.
- Exibe os valores de Id e Nome presentes em employees_guru em ordem crescente.
Inquรฉrito:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Distribuir por
A clรกusula DISTRIBUTE BY รฉ usada em tabelas presentes no Hive. O Hive utiliza as colunas em DISTRIBUTE BY para distribuir as linhas entre os reducers, de forma que todas as linhas que compartilham o mesmo valor na coluna DISTRIBUTE BY sejam direcionadas para o mesmo reducer.
- Isso garante que cada um dos N redutores receba uma sequรชncia sem sobreposiรงรฃo.ping conjunto de valores da coluna
- Nรฃo ordena a saรญda de cada redutor e nรฃo hรก garantia de que as linhas correspondentes fiquem lado a lado.
A captura de tela abaixo mostra a consulta DISTRIBUTE BY no Id.
A partir da captura de tela acima, podemos observar o seguinte:
- A clรกusula DISTRIBUTE BY รฉ executada no Id da tabela โemployees_guruโ.
- A saรญda mostra o ID e o Nome. No backend, as linhas com o mesmo ID sรฃo enviadas para o mesmo reducer.
Inquรฉrito:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
As quatro clรกusulas sรฃo fรกceis de confundir, por isso a tabela abaixo as compara.
| Clรกusula | Redutores | O que isso garante |
|---|---|---|
| ORDENAR POR | completa | Ordem total em todo o resultado |
| ORDENAR POR | Muitos | Encomendar apenas dentro de cada redutor. |
| DISTRIBUIR POR | Muitos | A mesma chave chega ao mesmo redutor, sem ordenaรงรฃo. |
| AGRUPAR POR | Muitos | DISTRIBUIR POR mais CLASSIFICAR POR, em ordem crescente |






