Introdução
A empresa varejista recebe um novo arquivo todos os dias. Os relatórios anteriores filtravam registros por uma data armazenada em cada linha. Uma tabela particionada também registra uma organização por data em seus metadados, permitindo que uma consulta selecione os locais de dados registrados associados à data solicitada.
Duas coisas precisam estar de acordo: os arquivos no HDFS e os registros de partição no Metastore do Hive, o catálogo que armazena definições de tabelas e partições. Criar um diretório, por si só, não registra uma partição no Hive. Você verá essa distinção diretamente ao adicionar os arquivos de um novo dia antes de registrá-los.
Este laboratório prepara de forma independente arquivos de dois dias e um recebimento local do terceiro dia. Você criará a tabela externa particionada, registrará locais, lerá a coluna de partição e inspecionará um plano de consulta filtrada. O Hive está pronto; nenhuma instalação nem estado anterior da VM é necessário. Basta conhecer tabelas externas e filtros simples de data. Use o Terminal.
Separe as colunas do arquivo da coluna de partição
Nesta etapa, você definirá uma tabela particionada por data sem repetir a data em cada registro. Inspecione um arquivo preparado:
cd /home/labex/project
cat /home/labex/project/data/orders-2026-10-14.csv
Há seis colunas no arquivo. Diferentemente do CSV anterior de sete colunas, este arquivo não tem um campo order_date: um arquivo contém apenas os pedidos de uma data. Confira os diretórios diários já preparados no HDFS:
hdfs dfs -ls /user/labex/hive-partitions/orders
Um nome de diretório como order_date=2026-10-14 torna a organização legível para as pessoas. O Hive ainda precisa de um valor de partição e um local registrados para usá-lo.
A tabela a seguir declara normalmente seus seis campos de arquivo e declara order_date DATE separadamente em PARTITIONED BY. O Hive fornecerá essa sétima coluna consultável a partir dos metadados de partição. Não a adicione às duas declarações nem insira um sétimo campo nesses arquivos.
Salve e execute a definição da tabela. O here-document grava literalmente o texto SQL entre os marcadores SQL. O -f do Beeline executa o script salvo; a URL de conexão e o nome de usuário se referem ao serviço Hive local preparado:
cat > /home/labex/project/queries/create-partitioned-orders.sql <<'SQL'
CREATE EXTERNAL TABLE retail_partitions.orders (
order_id STRING, customer_id STRING, product_id STRING,
quantity INT, unit_price DECIMAL(10,2), order_status STRING
)
PARTITIONED BY (order_date DATE)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION 'hdfs://localhost:9000/user/labex/hive-partitions/orders'
TBLPROPERTIES ('skip.header.line.count'='1', 'external.table.purge'='false');
SQL
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -f /home/labex/project/queries/create-partitioned-orders.sql
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e "DESCRIBE retail_partitions.orders;"
DESCRIBE inclui os campos comuns e as informações de partição. Agora conte as linhas antes de registrar qualquer partição:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e "SELECT COUNT(*) FROM retail_partitions.orders;" > /home/labex/project/output/before-registration.tsv
cat /home/labex/project/output/before-registration.tsv
Espere 0. A definição da tabela existe e os arquivos existem sob seu diretório-base, mas esta nova tabela ainda não tem registros de partição. Esse é um limite de metadados, não uma evidência de que o CSV foi excluído.
Registre os dois locais diários existentes
Nesta etapa, você conectará cada valor de data ao seu diretório real. ALTER TABLE ... ADD PARTITION adiciona registros de partição ao Metastore. Cada PARTITION (...) fornece um valor de data e seu LOCATION fornece os arquivos correspondentes. Estas são partições estáticas: você nomeia cada valor explicitamente.
Salve os dois registros em um script:
cat > /home/labex/project/queries/register-first-dates.sql <<'SQL'
ALTER TABLE retail_partitions.orders ADD
PARTITION (order_date='2026-10-14') LOCATION 'hdfs://localhost:9000/user/labex/hive-partitions/orders/order_date=2026-10-14'
PARTITION (order_date='2026-10-15') LOCATION 'hdfs://localhost:9000/user/labex/hive-partitions/orders/order_date=2026-10-15';
SQL
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -f /home/labex/project/queries/register-first-dates.sql
Liste os valores registrados e leia a coluna de data:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e "SHOW PARTITIONS retail_partitions.orders;" > /home/labex/project/output/registered-dates.tsv
cat /home/labex/project/output/registered-dates.tsv
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e "SELECT order_id, order_date FROM retail_partitions.orders ORDER BY order_id;" > /home/labex/project/output/registered-orders.tsv
cat /home/labex/project/output/registered-orders.tsv
SHOW PARTITIONS deverá incluir 14 e 15 de outubro. A consulta retorna o1–o3 com 14 de outubro e o4–o6 com 15 de outubro. A data veio de cada partição registrada, não de um sétimo campo oculto do CSV.
O registro aponta para os dados existentes; ele não copia nem reescreve os arquivos de origem. A tabela agora expõe todos os seis pedidos, incluindo os registros pendentes e reembolsados. Um relatório de vendas pagas ainda precisa de seu filtro de status.
Adicione os arquivos primeiro e depois registre uma nova data
Nesta etapa, você comprovará que um novo diretório e um novo registro de partição são ações separadas. Inspecione o recebimento local preparado de 16 de outubro:
cat /home/labex/project/data/orders-2026-10-16.csv
Crie seu diretório no HDFS e envie o arquivo. Esses comandos conhecidos afetam apenas o armazenamento:
hdfs dfs -mkdir -p /user/labex/hive-partitions/orders/order_date=2026-10-16
hdfs dfs -put /home/labex/project/data/orders-2026-10-16.csv /user/labex/hive-partitions/orders/order_date=2026-10-16/orders.csv
Antes de registrá-lo, peça ao Hive a contagem de linhas dessa data:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e "SELECT COUNT(*) FROM retail_partitions.orders WHERE order_date = DATE '2026-10-16';" > /home/labex/project/output/new-date-before.tsv
cat /home/labex/project/output/new-date-before.tsv
Espere 0, apesar do arquivo enviado. Adicione os metadados ausentes e repita a consulta específica da data:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e "ALTER TABLE retail_partitions.orders ADD PARTITION (order_date='2026-10-16') LOCATION 'hdfs://localhost:9000/user/labex/hive-partitions/orders/order_date=2026-10-16';"
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e "SELECT order_id, customer_id, order_status, order_date FROM retail_partitions.orders WHERE order_date = DATE '2026-10-16' ORDER BY order_id;" > /home/labex/project/output/new-date-orders.tsv
cat /home/labex/project/output/new-date-orders.tsv
Agora o7/c1/paid e o8/c2/pending aparecem com 16 de outubro. O Hive consegue associar esse valor de partição ao diretório enviado. Essa conferência deliberada de antes e depois explica por que um arquivo recém-recebido pode estar presente no HDFS e ausente em um relatório.
Leia uma consulta filtrada por partição e seu plano
Nesta etapa, você selecionará uma data registrada e inspecionará como o Hive planeja essa solicitação. Salve a consulta usando a coluna de partição em WHERE:
cat > /home/labex/project/queries/query-sales-partition.sql <<'SQL'
SELECT order_id, quantity, order_date
FROM retail_partitions.orders
WHERE order_date = DATE '2026-10-15'
ORDER BY order_id;
SQL
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -f /home/labex/project/queries/query-sales-partition.sql > /home/labex/project/output/selected-partition.tsv
cat /home/labex/project/output/selected-partition.tsv
Espere o4/2, o5/1 e o6/2, todos com 15 de outubro. Esta é uma seleção por data, ainda não um filtro de vendas pagas: o pedido reembolsado o5 permanece corretamente nesta consulta específica.
EXPLAIN descreve uma consulta sem retornar suas linhas de dados. Sua opção DEPENDENCY se concentra nas tabelas e partições que a consulta lerá. Essa visão compacta permite inspecionar a seleção de entrada sem aprender primeiro os detalhes internos das fases de execução. Prefixe a mesma consulta com EXPLAIN DEPENDENCY e salve o resultado:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e "EXPLAIN DEPENDENCY SELECT order_id, quantity, order_date
FROM retail_partitions.orders
WHERE order_date = DATE '2026-10-15'
ORDER BY order_id;" > /home/labex/project/output/partition-plan.txt
cat /home/labex/project/output/partition-plan.txt
O resultado é JSON, um formato de texto com campos nomeados e listas. Localize input_tables, que nomeia retail_partitions@orders, e input_partitions, cujo único partitionName termina em order_date=2026-10-15. As outras duas datas estão ausentes da lista de entrada. O predicado de data permite ao Hive selecionar a partição registrada relevante antes de ler seus registros; isso se chama poda de partições (partition pruning). Os poucos dados de exemplo servem para entender essa seleção, portanto o tempo de consulta não é uma comparação significativa de desempenho.
Por fim, liste novamente as partições registradas:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e "SHOW PARTITIONS retail_partitions.orders;"
As três datas ainda deverão estar registradas. Selecionar uma data altera a seleção de entrada da consulta; isso não remove os outros registros de partição nem exclui seus arquivos. Agora você tem evidências tanto do armazenamento quanto do catálogo para explicar quais dados diários uma consulta consegue ver.
Resumo
Você separou os campos dos arquivos da coluna de partição, registrou locais diários do HDFS no Hive e observou que um novo diretório continuou invisível até sua partição ser adicionada. Depois, selecionou uma data e inspecionou seu plano de consulta, preservando todas as datas. A seguir, salvará resultados de consulta em uma tabela ORC colunar reutilizável.



