Introdução
No futuro, um torneio intergaláctico de corridas de alta competição é realizado em uma série de pistas traiçoeiras por todo o cosmos. Como Oficial de Segurança de Corridas Espaciais, sua principal responsabilidade é garantir a segurança e a justiça dessas corridas cósmicas, monitorando de perto as pistas e as naves espaciais participantes.
A missão é analisar os dados de telemetria coletados de várias seções das pistas para identificar potenciais perigos, rastrear violações e otimizar a experiência de corrida tanto para competidores quanto para espectadores. Ao aproveitar as poderosas capacidades de processamento de dados do Hadoop, você pode descobrir insights valiosos que ajudarão a manter a integridade e a emoção das corridas cósmicas.
Explorar Funções de Operação de Coleção no Hive
Nesta etapa, você aprenderá como usar funções de operação de coleção no Hive para processar e analisar os dados de telemetria coletados das pistas de corrida.
Primeiro, certifique-se de estar logado como o usuário hadoop executando o seguinte comando no terminal:
su - hadoop
Em seguida, vamos criar um conjunto de dados de amostra para trabalhar. Abra um editor de texto e crie um novo arquivo chamado racetrack_data.txt com o seguinte conteúdo:
1,Sector1,Benny,32.5,12.7,45.2
2,Sector2,Zara,28.9,14.1,43.0
3,Sector1,Alex,30.2,11.5,41.7
4,Sector3,Benny,35.7,10.2,45.9
5,Sector2,Zara,31.1,12.8,43.9
6,Sector3,Alex,29.8,15.7,45.5
Este conjunto de dados representa dados de telemetria de diferentes setores da pista de corrida, com colunas representando o ID do registro, nome do setor, nome do corredor, velocidade, altitude e pontuação total.
Agora, vamos iniciar a CLI do Hive:
hive
Em seguida, crie uma nova tabela Hive para armazenar esses dados:
CREATE TABLE racetrack_data (
id INT,
sector STRING,
racer STRING,
speed DOUBLE,
altitude DOUBLE,
total_score DOUBLE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
Carregue os dados do arquivo racetrack_data.txt na tabela Hive:
LOAD DATA LOCAL INPATH '/home/hadoop/racetrack_data.txt' OVERWRITE INTO TABLE racetrack_data;
Agora, vamos explorar algumas funções de operação de coleção no Hive:
- Obtenha uma lista de nomes de corredores distintos.
SELECT DISTINCT racer FROM racetrack_data;
- Obtenha uma lista de nomes de setores e a contagem de registros para cada setor.
SELECT sector, COUNT(*) AS record_count FROM racetrack_data GROUP BY sector;
- Obtenha a velocidade máxima para cada corredor.
SELECT racer, MAX(speed) AS max_speed FROM racetrack_data GROUP BY racer;
- Obtenha a lista de corredores e suas pontuações médias.
SELECT racer, AVG(total_score) AS avg_score FROM racetrack_data GROUP BY racer;
Esses exemplos demonstram como usar funções como DISTINCT, COUNT, MAX e AVG para analisar os dados de telemetria e extrair insights valiosos.
Analisar Dados Usando Coleções de Structs Nomeadas
Nesta etapa, você aprenderá como usar a função named_struct no Hive para criar estruturas de dados complexas e analisar os dados de telemetria de forma mais eficaz.
Primeiro, vamos criar uma nova tabela Hive com uma estrutura aninhada para armazenar informações adicionais sobre os corredores:
CREATE TABLE racer_info (
id INT,
racer STRUCT<name:STRING, team:STRING, age:INT>,
performance STRUCT<speed:DOUBLE, altitude:DOUBLE, total_score:DOUBLE>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '#'
STORED AS TEXTFILE;
Agora, vamos inserir alguns dados de amostra na tabela racer_info:
INSERT INTO TABLE racer_info
VALUES
(1, named_struct('name', 'Benny', 'team', 'Cosmic Racers', 'age', 28), named_struct('speed', CAST(32.5 AS DOUBLE), 'altitude', CAST(12.7 AS DOUBLE), 'total_score', CAST(45.2 AS DOUBLE))),
(2, named_struct('name', 'Zara', 'team', 'Stellar Speeders', 'age', 32), named_struct('speed', CAST(28.9 AS DOUBLE), 'altitude', CAST(14.1 AS DOUBLE), 'total_score', CAST(43.0 AS DOUBLE))),
(3, named_struct('name', 'Alex', 'team', 'Galactic Gliders', 'age', 25), named_struct('speed', CAST(30.2 AS DOUBLE), 'altitude', CAST(11.5 AS DOUBLE), 'total_score', CAST(41.7 AS DOUBLE))),
(4, named_struct('name', 'Benny', 'team', 'Cosmic Racers', 'age', 28), named_struct('speed', CAST(35.7 AS DOUBLE), 'altitude', CAST(10.2 AS DOUBLE), 'total_score', CAST(45.9 AS DOUBLE))),
(5, named_struct('name', 'Zara', 'team', 'Stellar Speeders', 'age', 32), named_struct('speed', CAST(31.1 AS DOUBLE), 'altitude', CAST(12.8 AS DOUBLE), 'total_score', CAST(43.9 AS DOUBLE))),
(6, named_struct('name', 'Alex', 'team', 'Galactic Gliders', 'age', 25), named_struct('speed', CAST(29.8 AS DOUBLE), 'altitude', CAST(15.7 AS DOUBLE), 'total_score', CAST(45.5 AS DOUBLE)));
Agora, vamos analisar os dados usando a função named_struct:
- Obtenha os nomes dos corredores e suas equipes.
SELECT racer.name, racer.team FROM racer_info;
- Obtenha os nomes dos corredores e suas velocidades máximas.
SELECT racer.name, performance.speed AS max_speed FROM racer_info;
- Obtenha os nomes dos corredores, suas equipes e suas pontuações médias.
SELECT racer.name, racer.team, AVG(performance.total_score) AS average_score
FROM racer_info
GROUP BY racer.name, racer.team;
Esses exemplos demonstram como usar a função named_struct para criar estruturas de dados complexas e analisar os dados.
Analisar Dados Usando Funções de Conjunto de Coleções
Nesta etapa, você aprenderá como usar a função collect_set no Hive para realizar operações de conjunto nos dados de telemetria.
Primeiro, vamos criar uma nova tabela Hive para armazenar os rankings dos corredores:
CREATE TABLE racer_rankings (
race_id INT,
sector STRING,
racer_names ARRAY<STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '#'
STORED AS TEXTFILE;
Agora, vamos inserir alguns dados de amostra na tabela racer_rankings:
INSERT INTO TABLE racer_rankings
VALUES
(1, 'Sector1', ARRAY('Benny', 'Alex')),
(2, 'Sector2', ARRAY('Zara', 'Alex')),
(3, 'Sector3', ARRAY('Benny', 'Zara', 'Alex')),
(4, 'Sector1', ARRAY('Benny', 'Zara')),
(5, 'Sector2', ARRAY('Zara', 'Alex')),
(6, 'Sector3', ARRAY('Benny', 'Alex'));
Agora, vamos analisar os dados usando a função collect_set:
- Obtenha a lista de corredores distintos em todos os setores.
SELECT DISTINCT racer_name
FROM racer_rankings
LATERAL VIEW EXPLODE(racer_names) rn AS racer_name;
- Obtenha a lista de corredores que participaram de todos os setores.
SELECT racer_name
FROM (
SELECT collect_set(racer_names) AS all_racers
FROM racer_rankings
) t
LATERAL VIEW EXPLODE(all_racers) rn AS racer_name;
- Obtenha a lista de corredores que participaram de pelo menos dois setores.
SELECT racer_name
FROM (
SELECT racer_name, COUNT(DISTINCT sector) AS num_sectors
FROM racer_rankings LATERAL VIEW explode(racer_names) exploded_table AS racer_name
GROUP BY racer_name
) t
WHERE num_sectors >= 2;
Esses exemplos demonstram como usar a função collect_set para realizar operações de conjunto como DISTINCT, INTERSECTION e UNION nos dados de telemetria.
Resumo
Neste laboratório, exploramos várias funções de operação de coleção no Hive, como DISTINCT, COUNT, MAX, AVG, named_struct, LATERAL VIEW, EXPLODE e collection_set. Ao trabalhar com conjuntos de dados de amostra representando dados de telemetria de um torneio de corrida cósmica, aprendemos a analisar e extrair informações valiosas de estruturas de dados complexas.
Através de exercícios práticos, adquirimos experiência prática na criação de estruturas de dados aninhadas, na realização de operações de conjunto e na agregação de dados com base em critérios específicos. Este conhecimento provará ser inestimável em nosso papel como Oficiais de Segurança de Corridas Espaciais, permitindo-nos monitorar efetivamente as pistas de corrida, identificar perigos potenciais e garantir a justiça e a integridade das corridas cósmicas.
No geral, este laboratório forneceu uma introdução abrangente às funções de operação de coleção do Hive, equipando-nos com as habilidades necessárias para analisar e processar grandes conjuntos de dados de forma eficiente no ecossistema Hadoop.



