Introdução
Imagine um cenário onde você é um arqueólogo marinho explorando as profundezas da "Baía do Tesouro Submerso" (Sunken Treasure Bay). Rumores dizem que esta baía mística guarda segredos de civilizações antigas, seus tesouros e artefatos perdidos sob as ondas. Seu objetivo é descobrir esses tesouros e juntar o quebra-cabeça histórico que se esconde sob a superfície do oceano.
Ao embarcar em sua expedição subaquática, você precisará analisar os vários artefatos e relíquias que descobrir, estudando cuidadosamente suas características e padrões. É aqui que o poder das Funções de Janela do Hadoop (Hadoop Window Functions) entra em ação, permitindo que você realize análises de dados complexas e desvende os mistérios do passado.
Configurando os Dados
Nesta etapa, criaremos um conjunto de dados que simula os artefatos e relíquias que você descobriu durante sua exploração subaquática. Este conjunto de dados servirá como a base para nossa análise usando as Funções de Janela do Hadoop (Hadoop Window Functions).
Primeiro, certifique-se de estar logado como o usuário hadoop executando o seguinte comando no terminal:
su - hadoop
Em seguida, vamos criar um novo diretório chamado artifacts dentro do diretório /home/hadoop:
mkdir /home/hadoop/artifacts
cd artifacts/
Depois, crie um novo arquivo chamado artifacts.txt dentro do diretório artifacts com o seguinte conteúdo:
1,Gold,2500,15,A1
2,Silver,1800,20,B2
3,Bronze,3000,12,A1
4,Ceramic,1200,18,C3
5,Gold,2800,22,B2
6,Silver,2000,16,A1
7,Bronze,2500,25,C3
8,Ceramic,1500,14,A1
9,Gold,3200,21,B2
10,Silver,1700,19,C3
Este arquivo representa uma coleção de artefatos com detalhes como seu material, idade, profundidade em que foram encontrados e coordenadas de localização.
Explorando os Dados com Funções de Janela
Agora que temos nosso conjunto de dados pronto, vamos explorá-lo usando as Funções de Janela do Hadoop (Hadoop Window Functions). Usaremos o Apache Hive, um software de data warehouse que facilita a consulta e o gerenciamento de grandes conjuntos de dados residentes em armazenamento distribuído.
Primeiro, inicie o shell do Hive executando o seguinte comando em seu terminal:
hive
Em seguida, crie uma nova tabela chamada artifacts para armazenar nosso conjunto de dados:
CREATE TABLE artifacts (
artifact_id INT,
material STRING,
age INT,
depth INT,
location STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
Carregue os dados do arquivo artifacts.txt na tabela artifacts:
LOAD DATA LOCAL INPATH '/home/hadoop/artifacts/artifacts.txt' INTO TABLE artifacts;
Vamos começar explorando a coluna age usando as funções de janela RANK() e DENSE_RANK(). Essas funções nos ajudarão a identificar as classificações de idade relativas dos artefatos:
SELECT
artifact_id,
material,
age,
RANK() OVER (ORDER BY age DESC) AS rank_age,
DENSE_RANK() OVER (ORDER BY age DESC) AS dense_rank_age
FROM
artifacts;
Esta consulta exibirá os detalhes do artefato junto com suas classificações de idade com base nas funções RANK() e DENSE_RANK().
Em seguida, vamos usar as funções LAG() e LEAD() para comparar as idades de artefatos consecutivos:
SELECT
artifact_id,
material,
age,
LAG(age, 1) OVER (ORDER BY age DESC) AS prev_age,
LEAD(age, 1) OVER (ORDER BY age DESC) AS next_age
FROM
artifacts;
Esta consulta exibirá os detalhes do artefato junto com as idades dos artefatos anterior e seguinte na sequência ordenada.
Analisando Padrões de Artefatos
Nesta etapa, usaremos funções de janela para analisar padrões e identificar artefatos significativos com base em vários critérios.
Vamos começar encontrando os artefatos mais antigos e mais novos para cada tipo de material:
CREATE TABLE result_1
AS
SELECT
material,
artifact_id,
age,
FIRST_VALUE(artifact_id) OVER (PARTITION BY material ORDER BY age DESC) AS oldest_artifact,
LAST_VALUE(artifact_id) OVER (PARTITION BY material ORDER BY age ASC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS newest_artifact
FROM
artifacts;
SELECT * FROM result_1;
Esta consulta usa as funções FIRST_VALUE() e LAST_VALUE() para identificar os artefatos mais antigos e mais novos para cada tipo de material, respectivamente.
Em seguida, vamos encontrar os artefatos que são significativamente mais antigos ou mais novos em comparação com a idade média para seu tipo de material:
CREATE TABLE result_2
AS
SELECT
artifact_id,
material,
age,
AVG(age) OVER (PARTITION BY material) AS avg_age_by_material,
CASE
WHEN age > AVG(age) OVER (PARTITION BY material) + 200 THEN 'Significantly Older'
WHEN age < AVG(age) OVER (PARTITION BY material) - 200 THEN 'Significantly Younger'
ELSE 'Average'
END AS age_category
FROM
artifacts;
SELECT * FROM result_2;
Esta consulta calcula a idade média para cada tipo de material usando a função de janela AVG() e, em seguida, categoriza cada artefato com base em se ele é significativamente mais antigo, significativamente mais novo ou médio em comparação com a idade média do material.
Resumo
Neste laboratório, exploramos o poder das Funções de Janela do Hadoop (Hadoop Window Functions) no contexto de uma expedição de arqueologia marinha. Ao simular um conjunto de dados de artefatos e relíquias, aprendemos a aproveitar várias funções de janela como RANK(), DENSE_RANK(), LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE() e AVG() para analisar e descobrir padrões dentro dos dados.
Através de exercícios práticos, obtivemos insights sobre a identificação de classificações de idade, a comparação de idades de artefatos consecutivos, a descoberta dos artefatos mais antigos e mais novos para cada tipo de material e a categorização de artefatos com base em sua idade em relação à média do material. Este laboratório proporcionou uma experiência prática e envolvente no uso das Funções de Janela do Hadoop para desvendar os mistérios da "Baía do Tesouro Submerso".
O design deste laboratório teve como objetivo combinar um cenário cativante com exercícios práticos de codificação, permitindo que os alunos desenvolvessem uma compreensão mais profunda das Funções de Janela do Hadoop enquanto exploravam uma aventura fictícia. Ao imergir os alunos em um contexto realista, o laboratório promoveu uma experiência de aprendizado mais envolvente e memorável.



