O Hive fornece linguagem de consulta do tipo SQL para fins de ETL no sistema de arquivos Hadoop.
A linguagem de consulta Hive (HiveQL) fornece um ambiente de tipo SQL no Hive para trabalhar com tabelas, bancos de dados, 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. HIVE fornece conectividade JDBC também.
As consultas do Hive fornecem os seguintes recursos:
- Modelagem de dados, como criação de bancos de dados, tabelas, etc.
- Funcionalidades de ETL, como extração, transformação e carregamento de dados em tabelas
- Une-se para mesclar diferentes tabelas de dados
- Scripts personalizados específicos do usuário para facilitar o código
- Ferramenta de consulta mais rápida no Hadoop
Neste artigo, você aprenderá-
- Ordem por consulta
- Grupo por consulta
- Ordenar por
- Cluster por
- Distribuir por
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 "staff_guru" com 6 colunas.
Na captura de tela acima,
- Estamos criando a tabela "staff_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 workers_guru. Os dados que vamos carregar serão colocados no arquivo Employees.txt
Ordem por consulta:
A sintaxe ORDER BY em HiveQL é semelhante à sintaxe ORDER BY em linguagem SQL.Ordenar por é a cláusula que usamos com a instrução "SELECT" nas consultas do Hive, que ajuda a classificar os dados. A cláusula Order by usa colunas nas tabelas do Hive para classificar valores de coluna específicos mencionados com Order by. Seja qual for 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 de coluna específicos.
Se a ordem mencionada por campo for uma string, o resultado será exibido em ordem lexicográfica. Na extremidade posterior, deve ser repassado para um único redutor.
Na captura de tela acima, podemos observar o seguinte
- É a consulta realizada na tabela "funcionários_guru" com a cláusula ORDER BY com Departamento conforme definido no nome da coluna ORDER BY.
"Departamento" é uma string, por isso exibe 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.
Consulta :
SELECT * FROM employees_guru ORDER BY Department;
Grupo por consulta:
A cláusula Group by usa colunas nas tabelas Hive para agrupar valores de coluna específicos mencionados com o group by. Seja qual for o nome da coluna, estamos definindo uma cláusula "groupby", a consulta selecionará e exibirá os resultados agrupando os valores de coluna específicos.
Por exemplo, na captura de tela abaixo, ele exibirá 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 realizada na tabela "staff_guru" com a cláusula GROUP BY com Departamento conforme definido no nome da coluna GROUP BY.
- A saída exibida aqui é o nome do departamento e os funcionários contam em diferentes departamentos. Aqui, todos os funcionários pertencentes ao departamento específico são agrupados e exibidos nos resultados. Portanto, o resultado é o nome do departamento com o número total de funcionários presentes em cada departamento.
Consulta:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Ordenar por:
A cláusula Classificar por é executada em nomes de colunas de 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.
Desta forma, ele classificará as linhas antes de alimentar o redutor. Sempre classificar por depende dos tipos de coluna.
Por exemplo, se os tipos de coluna forem numéricos, eles serão classificados em ordem numérica. Se os tipos de colunas forem strings, eles serão classificados em ordem lexicográfica.
Na captura de tela acima, podemos observar o seguinte:
- É a consulta que realiza na tabela "workers_guru" com a cláusula SORT BY com "id" conforme define o nome da coluna SORT BY. Usamos a palavra-chave DESC.
- Portanto, a saída exibida será em ordem decrescente de "id".
Consulta:
SELECT * from employees_guru SORT BY Id DESC;
Cluster por:
Cluster By usado como uma alternativa para as cláusulas Distribute BY e Sort BY no Hive-QL.
Cluster BY cláusula usada em tabelas presentes no Hive. O Hive usa as colunas em Cluster por para distribuir as linhas entre os redutores. As colunas do cluster BY irão para os redutores múltiplos.
- Ele garante a classificação de ordens de valores presentes em vários redutores
Por exemplo, a cláusula Cluster By mencionada no nome da coluna Id da tabela workers_guru. A saída ao executar esta consulta dará resultados a vários redutores no backend. Mas, como interface, é uma cláusula alternativa para Classificar por e Distribuir por.
Na verdade, esse é o processo de back end quando executamos uma consulta com classificação, agrupamento e agrupamento em termos de estrutura de redução de mapa. Portanto, se quisermos armazenar os resultados em vários redutores, vamos com Cluster By.
Na captura de tela acima, estamos obtendo as seguintes observações:
- É a consulta que executa a cláusula CLUSTER BY no valor do campo Id. Aqui, ele obterá uma classificação nos valores de Id.
- Ele exibe o ID e os nomes presentes na classificação guru_employees ordenados por
Consulta:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Distribuir por:
Distribua a cláusula BY usada nas tabelas presentes no Hive. O Hive usa as colunas em Distribuir por 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
- DISTRIBUTE BY Cláusula em execução no Id da tabela "empoloyees_guru"
- Saída mostrando Id, Nome. No final, ele irá para o mesmo redutor
Consulta:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;