Você está na página 1de 6

Aluno: Thiago Henrique Gaspar

A PUCPR conta com um ambiente compartilhado de utilização do Hadoop para alunos, em caso de dúvidas
ou orientações recomenda-se contatar a equipe do suporte do PPGIA (suporte@ppgia.pucpr.br). As práticas
devem ser feitas no ambiente da PUCPR. A localização dos arquivos deve ser atualizada de acordo com
orientação do suporte.

Professor Vinícius M. A. Souza


Big Data – Engenharia de Software

Prática Apache HIVE

Considerando o caso a seguir, implemente as soluções em HQL para extrair o conjunto de informações
solicitadas
Descrição: Você foi contratado por uma empresa para efetuar uma análise de dados. Esta empresa possui
acesso a uma base de dados com dados sobre as transações comerciais entre países nos últimos 30 anos.
Sendo que, para cada transação comercial presente nesta base de dados os seguintes campos são
fornecidos:
Campo Descrição
País País envolvido na transação comercial
Ano Ano em que a transação foi efetuada
Código Código da mercadoria
Mercadoria Descrição da mercadoria
Fluxo Fluxo, e.g. Exportação ou Importação
Valor Valor em dólares
Peso Peso da mercadoria
Unidade Unidade de medida da mercadoria, e.g. Quantidade de itens
Quantidade Quantidade conforme a unidade especificada da mercadoria
Categoria Categoria da mercadoria, e.g. Produto Animal

No total, a base de dados possui mais de 8 milhões de transações comerciais. A base de dados
foi fornecida no formato CSV, sendo que cada entrada (transação comercial), é representada por uma
linha no arquivo. Enquanto cada linha possui os campos listados previamente, estes separados pelo
caractere “;”. A imagem a seguir exibe as 5 primeiras transações comerciais presentes na base.

Diante desse contexto, você foi encarregado pelo desenvolvimento das consultas HQL e extração
das seguintes informações:
1. País com a maior quantidade de transações comerciais efetuadas; OBS Fiquei na dúvida se
era somente o primeiro ou os 10.
SELECT
country_or_area,
COUNT(*) AS TOTAL
FROM base_100_mil
GROUP BY country_or_area
ORDER BY TOTAL DESC
LIMIT 10;

2. Mercadoria com a maior quantidade de transações comerciais no Brasil (como a base de


dados está em inglês utilize Brazil, com Z); OBS Fiquei na dúvida se era somente o primeiro
ou os 10.
SELECT
commodity,
COUNT(*) as qnt
FROM base_100_mil
WHERE country_or_area =
'Brazil'
GROUP BY commodity
ORDER BY qnt desc
LIMIT 10;

3. Quantidade de transações financeiras realizadas por ano;


SELECT
year,
COUNT(*) as qnt
FROM base_100_mil
GROUP BY year
ORDER BY qnt DESC
LIMIT 10;

4. Mercadoria com maior quantidade de transações financeiras;


SELECT
commodity,
COUNT(*) as qnt
FROM base_100_mil
GROUP BY commodity
ORDER BY qnt DESC
LIMIT 1;

5. Mercadoria com maior quantidade de transações financeiras em 2016;


SELECT
commodity,
COUNT(*) as qnt
FROM base_100_mil
WHERE year = 2016
GROUP BY commodity
ORDER BY qnt DESC
LIMIT 1;

6. Mercadoria com maior quantidade de transações financeiras em 2016, no Brasil (como a


base de dados está em inglês utilize Brazil, com Z);
SELECT
commodity,
COUNT(*) as qnt
FROM base_100_mil
WHERE year = 2016 and
country_or_area = 'Brazil'
GROUP BY commodity
ORDER BY qnt DESC
LIMIT 1;

7. Mercadoria com maior total de peso, de acordo com todas transações comerciais;
SELECT
commodity,
MAX(weight_kg) as
maior_peso
FROM base_100_mil
GROUP BY commodity
LIMIT 1;

8. Mercadoria com maior total de peso, de acordo com todas transações comerciais, separadas
de acordo com o ano;
SELECT
commodity,
year,
MAX(weight_kg) as
maior_peso
FROM base_100_mil
GROUP BY commodity, year
LIMIT 10;

9. Média de peso por mercadoria, separadas de acordo com o ano;


SELECT
commodity,
year,
AVG(weight_kg) as
peso_medio
FROM base_100_mil
GROUP BY commodity, year
LIMIT 10;

10. Média de peso por mercadoria comercializadas no Brasil (como a base de dados está em
inglês utilize Brazil, com Z), separadas de acordo com o ano;
SELECT
commodity,
year,
AVG(weight_kg) as
peso_medio
FROM base_100_mil
WHERE country_or_area =
'Brazil'
GROUP BY commodity, year
LIMIT 10;

11. Média de peso por mercadoria comercializadas no Brasil (como a base de dados está em
inglês utilize Brazil, com Z), em relação ao fluxo, separadas de acordo com o ano;
SELECT
commodity,
year,
flow,
AVG(weight_kg) as
peso_medio
FROM base_100_mil
WHERE
country_or_area =
'Brazil'
GROUP BY
commodity, year, flow
LIMIT 10;

12. Média de valor por peso, de acordo com a mercadoria comercializadas no Brasil (como a
base de dados está em inglês utilize Brazil, com Z), separadas de acordo com o ano;
SELECT
commodity,
year,
AVG(trade_usd) as
valor_medio
FROM base_100_mil
WHERE country_or_area =
'Brazil'
GROUP BY commodity, year
LIMIT 10;

13. Valor máximo de código;


SELECT
MAX(comm_code) as max_codigo
FROM base_100_mil;

14. Mercadoria com o maior preço por unidade de peso;


SELECT
commodity,
quantity_name
as unidade,
max(trade_usd)
as preco
FROM
base_100_mil
GROUP BY
commodity,
quantity_name
LIMIT 10;

15. Quantidade de transações comerciais de acordo com o fluxo, de acordo com o ano;
SELECT
flow,
year,
COUNT(*) as qnt
FROM base_100_mil
GROUP BY flow, year
LIMIT 10;

Com base no seu conhecimento em Apache HIV, para cada uma das soluções requisitadas, forneça:
1. A consulta HQL
2. O resultado solicitado
Dicas
• Localização dos arquivos

Máquina Base parcial


Host /home/Disciplinas/FundamentosBigData/OperacoesComerciais/base_100_mil.csv
Hadoop /home/Disciplinas/FundamentosBigData/OperacoesComerciais/base_100_mil.csv

Você também pode gostar