Introdução
Imagine abrir os registros de pedidos da empresa varejista como uma planilha. Cada linha descreve um pedido e cada coluna descreve um atributo, como sua data ou seu status de pagamento. Você quer responder a uma pergunta simples: Quais pedidos pagos a equipe deve revisar primeiro? Ler todas as linhas manualmente fica inconveniente conforme os arquivos crescem.
O Apache Hive permite descrever dados de arquivos como tabelas e fazer perguntas usando SQL, a linguagem de consulta estruturada. Uma definição de tabela descreve as colunas e onde os arquivos subjacentes estão; os arquivos contêm os registros reais. O Hive usa essa definição para interpretar dados e executar uma consulta. O HDFS fornece armazenamento neste ambiente preparado, enquanto o Hive fornece a camada de tabelas e consultas. Enviar um arquivo, por si só, não o transforma automaticamente em uma tabela do Hive.
O Hive é útil para consultas analíticas sobre dados armazenados, como relatórios em lote. Isso é diferente de editar células em uma planilha, e este curso não o apresenta como substituto do banco de dados transacional de toda aplicação. Aqui, você começará com seis registros fáceis de ler para prever a resposta correta antes de trabalhar com entradas maiores.
Você usará o Beeline, cliente de terminal do Hive, para se conectar a um serviço HiveServer2 em execução. O serviço e uma tabela de exemplo estão preparados para você. Você não precisa instalar programas, inicializar metadados nem conhecer Java, Python, Hadoop ou SQL previamente. Basta saber usar o terminal e ler uma tabela. Para mais prática de terminal ou bancos de dados, consulte as trilhas de Linux e Database.
Sua jornada de aprendizagem será: ver linhas reais, descobrir a estrutura da tabela, salvar uma consulta que selecione pedidos pagos e mudar uma condição para testar sua compreensão.
Veja suas primeiras linhas no Hive
Nesta etapa, você se conectará ao Hive e lerá uma tabela preparada antes de aprender a restringir uma consulta.
Use a aba Terminal. Mude para o diretório local do projeto com cd:
cd /home/labex/project
O Beeline é um cliente: ele envia SQL ao HiveServer2, que trata a consulta. No comando abaixo, -u fornece a URL de conexão, -n fornece o nome de usuário da sessão e -e fornece o SQL a executar antes de sair de volta para o terminal. A URL fornecida se conecta ao serviço Hive desta máquina na porta 10000, inicialmente no banco de dados default. Você não precisa de conta externa nem de senha para este serviço didático.
O SQL SELECT * FROM retail_intro.orders; solicita todas as colunas (*) da tabela orders no banco de dados retail_intro. Um ponto e vírgula encerra a instrução. Aspas simples mantêm toda a instrução SQL junta como um único argumento do shell:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'SELECT * FROM retail_intro.orders;'
Procure seis linhas de pedidos e nomes de colunas como order_id, quantity e order_status. Mensagens de conexão e bordas de tabela podem aparecer ao redor dos resultados. Localize o pedido o1: ele tem quantidade 2, preço unitário 10.00 e status paid. O pedido o3 está pending; o5 está refunded. Cada linha é um pedido simplificado contendo um tipo de produto.
Uma consulta recupera dados; este SELECT não altera o status de pagamento nem atualiza o arquivo de origem. Sem uma cláusula de ordenação, não presuma que o SQL garanta uma ordem específica de linhas.
Colete a saída da mesma consulta em um registro local. O operador > do shell cria o arquivo ou substitui seu conteúdo anterior:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'SELECT * FROM retail_intro.orders;' > /home/labex/project/output/first-look.txt
Leia-o localmente:
cat /home/labex/project/output/first-look.txt
As linhas de pedidos ainda deverão estar presentes. O terminal executou o cliente Beeline, o Hive leu a definição da tabela e os arquivos, e o shell salvou localmente o resultado exibido. A seguir, você descobrirá os objetos por trás dessa consulta.
Descubra o banco de dados, a tabela e as colunas
Nesta etapa, você explorará o banco de dados e a definição da tabela em vez de adivinhar nomes de colunas.
Um banco de dados é um espaço de nomes que agrupa tabelas. SHOW DATABASES lista os bancos disponíveis; ele não lê todos os seus arquivos de dados:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'SHOW DATABASES;'
Localize default e retail_intro. Use USE para selecionar um banco de dados, seguido de SHOW TABLES na mesma chamada:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'USE retail_intro; SHOW TABLES;'
Você deverá encontrar orders. Cada comando -e abre uma nova sessão Beeline, portanto um USE em uma chamada não é mantido silenciosamente na próxima. Selecione o banco em cada arquivo SQL ou use seu nome qualificado, retail_intro.orders.
DESCRIBE lista as colunas e os tipos da tabela. Por exemplo, STRING armazena texto, INT armazena números inteiros, DECIMAL(10,2) armazena números de ponto fixo com duas casas decimais e DATE representa uma data de calendário:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'DESCRIBE retail_intro.orders;'
Relacione os campos às linhas da primeira consulta. Uma quantidade e um preço têm significados e tipos diferentes, embora ambos pareçam numéricos. Você calculará valores monetários em um laboratório posterior; hoje, apenas lerá os campos fornecidos.
Para resultados de consulta salvos, o Beeline pode usar um formato de texto simples. --outputformat=tsv2 seleciona campos separados por tabulação, --showHeader=false omite a linha de cabeçalho e --silent=true reduz as mensagens do cliente. Salve o esquema descrito usando essas opções de saída:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e 'DESCRIBE retail_intro.orders;' > /home/labex/project/output/table-schema.txt
O registro também pode incluir mensagens de execução. As linhas importantes do esquema nomeiam todas as sete colunas e seus tipos. A definição da tabela é metadado: ela informa ao Hive como interpretar os arquivos armazenados. O próximo laboratório mostrará como criar esse mapeamento por conta própria.
Salve uma consulta dos primeiros pedidos pagos
Nesta etapa, você selecionará apenas as colunas e linhas pagas necessárias à equipe de revisão, com uma ordem previsível dos resultados.
Uma consulta pode restringir dados de várias formas independentes:
| Cláusula | Finalidade aqui |
|---|---|
SELECT |
Escolher as colunas de saída |
FROM |
Escolher a tabela de origem |
WHERE |
Manter linhas cuja condição é verdadeira |
ORDER BY |
Ordenar explicitamente o resultado |
LIMIT |
Retornar no máximo a quantidade solicitada de linhas |
Você solicitará order_id, order_status e quantity, manterá apenas as linhas paid, ordenará pelo ID do pedido e retornará as duas primeiras. Preveja quais linhas permanecem: entre os seis pedidos fornecidos, o1 e o2 são os primeiros IDs pagos nessa ordem.
Salve SQL em um arquivo local para que possa ser inspecionado e executado novamente. No próximo comando do shell, cat > file <<'SQL' inicia um here-document: as linhas até o SQL de fechamento são gravadas literalmente no arquivo. Elas são texto SQL, não comandos do shell. Copie o bloco completo, incluindo as linhas delimitadoras:
cat > /home/labex/project/queries/first-query.sql <<'SQL'
USE retail_intro;
SELECT order_id, order_status, quantity
FROM orders
WHERE order_status = 'paid'
ORDER BY order_id
LIMIT 2;
SQL
O 'paid' entre aspas no SQL é um valor de texto. O = compara o status de cada linha com esse valor; ele não atribui um novo status. A instrução USE torna o arquivo independente de uma sessão anterior do cliente.
A opção -f do Beeline lê um arquivo SQL local. Execute seu arquivo e salve a saída com as opções de formato de texto que você acabou de aprender:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -f /home/labex/project/queries/first-query.sql > /home/labex/project/output/first-query.txt
Leia o registro salvo:
cat /home/labex/project/output/first-query.txt
As linhas de resultado deverão ser:
o1 paid 2
o2 paid 1
Quaisquer mensagens de execução ao redor não são registros de pedidos. LIMIT 2 não significou duas linhas arbitrárias: a ordenação explícita determinou quais linhas correspondentes vieram primeiro. Agora você tem um arquivo de consulta reutilizável e um resultado observável para a pergunta da equipe.
Preveja o efeito de mudar uma condição
Nesta etapa, você mudará apenas a condição de status e conferirá se as linhas retornadas correspondem à sua previsão.
Mantenha a consulta de pedidos pagos intacta. Existe um pedido pending na mesma tabela: o3, com quantidade 1. Se a condição de status mudar de paid para pending, quantas linhas um limite de duas deverá retornar? Um limite é um máximo, portanto a resposta é uma.
Escreva a mesma consulta mudando apenas essa condição:
cat > /home/labex/project/queries/pending-query.sql <<'SQL'
USE retail_intro;
SELECT order_id, order_status, quantity
FROM orders
WHERE order_status = 'pending'
ORDER BY order_id
LIMIT 2;
SQL
Execute-a de forma independente:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -f /home/labex/project/queries/pending-query.sql > /home/labex/project/output/pending-query.txt
Leia o resultado coletado:
cat /home/labex/project/output/pending-query.txt
A única linha de pedido deverá ser:
o3 pending 1
Mudar um filtro selecionou outra linha sem alterar os registros armazenados na tabela. Agora você usou a mesma estrutura básica de consulta para responder a duas perguntas. A seguir, conectará um arquivo CSV existente a uma definição de tabela, em vez de depender de uma tabela preparada.
Resumo
Você situou o Hive em um fluxo de arquivos para tabelas e consultas, conectou-se usando Beeline e explorou um banco de dados, uma tabela e um esquema. Escreveu um arquivo SQL reutilizável usando seleção, filtragem, ordenação explícita e limite de linhas e previu e conferiu a mudança de uma condição.
A tabela foi preparada para esta primeira experiência. No próximo laboratório, você mapeará um arquivo CSV para sua própria tabela externa e aprenderá como seus metadados e os arquivos subjacentes se relacionam.



