SQL专项练习第一天

news2024/10/4 7:31:21

        在大数据处理中,Hive 是一个非常强大的工具。今天,为大家分享五个 Hive 数据处理的实际案例,展示 Hive 在数据清洗、转换和分析方面的强大能力。

        先在home文件夹下建一个hivedata文件夹,把我们所需的数据写成txt文件导入到/home/hivedata/文件夹下面。

第一题、合并相同星座和血型的人

        我们有一组人员信息,包括名字、星座和血型。我们的目标是将相同星座和血型的人合并在一起。

如下数据:

小狮 水瓶座 A
小猿 射手座 A
小云 水瓶座 B
小锋 水瓶座 A
小琪 射手座 A

变为:
指标:将相同星座和血型的人合并在一起

射手座,A            小猿|小琪
水瓶座,A            小狮|小锋
水瓶座,B            小云

建表:

create table person_info(
name string,
constellation string,
blood_type string)
row format delimited
fields terminated by " "
stored as textfile;

加载数据:

load data local inpath '/home/hivedata/constellation.txt' into table person_info;

查询数据是否导入成功

select * from person_info;

通过以下 Hive 语句,我们可以实现

select concat(constellation, "," ,blood_type)as cb,
  concat_ws('|', collect_list(name)) as names
from person_info
group by constellation, blood_type;

第二题、电影分类展开

        我们有一组电影信息,包括电影名称和分类。我们的目标是将每个电影的分类展开,以便更好地进行分析。

如下数据:

《阿凡达2》 悬疑,动作,科幻,剧情
《满江红》 悬疑,警匪,动作,心理,剧情
《流浪地球》 科幻,动作,灾难

想得到如下数据:

《阿凡达2》     悬疑
《阿凡达2》     动作
《阿凡达2》     科幻
《阿凡达2》     剧情
《满江红》       悬疑
《满江红》       警匪
《满江红》       动作
《满江红》       心理
《满江红》       剧情
《流浪地球》     科幻
《流浪地球》     动作
《流浪地球》     灾难

 建表:

create table movie(
    movie string,
    category array<string>
)
row format delimited
fields terminated by ' '
collection items terminated by ','
tblproperties("skip.header.line.count"="1"); -- 跳过第一行数据

加载数据:

load data local inpath '/home/hivedata/movies.txt' into table movie ;

查询数据是否导入成功

select * from movie;

 通过以下 Hive 语句,我们可以实现

-- 字段是array类型
select movie, category1 from movie lateral view explode(category) mytable as category1;

-- 字段是string类型
select movie, category1 from movie lateral view explode(category) mytable as category1;

第三题、查找三个表中互不重复的数据

        我们有三个表,分别是 A、B、C。数据如下我们的目标是找出这三个表中互不重复的数据。

        提示: 不重复的数据,即在三张表中所有的数据加在一起时,只出现了一次。

A.txt

1 
2
3
4
5
6
7
8
9
6
7

B.txt

2 
3 
11
12
14
15
16
18
35
30
40

C.txt

1
2
3
11
5
6
7
8
20

 建表:

-- 新建三个表:
create table a(id int);
create table b(id int);
create table c(id int);

加载数据:

load data local inpath '/home/hivedata/zuoye03_a.txt' into table A;
load data local inpath '/home/hivedata/zuoye03_b.txt' into table B;
load data local inpath '/home/hivedata/zuoye03_c.txt' into table C;

查询数据是否导入成功

select * from a;
select * from b;
select * from c;

 通过以下 Hive 语句,我们可以实现

select aa.id from (
    select id from a
    union all
    select id from b
    union all
    select id from c
    ) aa group by aa.id
having count(*) = 1;

第四题、求出场次数最多的前三的英雄

        我们有一组游戏数据,包括游戏 ID 和英雄列表。我们的目标是找出出场次数最多的前三的英雄。

如下数据:

1 廉颇,镜,沈梦溪,李元芳,太乙真人
2 关羽,兰陵王,嬴政,虞姬,鲁班大师
3 梦琪,盘古,周瑜,狄仁杰,大乔
4 廉颇,澜,上官婉儿,公孙离,盾山
5 吕布,娜可露露,姜子牙,公孙离,张飞
6 马超,猪八戒,狄仁杰,沈梦溪,太乙真人
7 吕布,盘古,嫦娥,公孙离,张飞
8 廉颇,橘右京,西施,虞姬,大乔
9 关羽,镜,姜子牙,狄仁杰,鲁班大师
10 梦琪,阿古朵,周瑜,后羿,蔡文姬
11 夏侯惇,娜可露露,不知火舞,孙尚香,太乙真人
12 猪八戒,镜,嫦娥,伽罗,孙膑
13 廉颇,镜,上官婉儿,马可波罗,蔡文姬
14 梦琪,裴擒虎,沈梦溪,虞姬,鲁班大师
15 梦琪,盘古,不知火舞,成吉思汗,太乙真人
16 夏侯惇,澜,周瑜,马可波罗,张飞
17 猪八戒,露娜,周瑜,狄仁杰,盾山
18 吕布,橘右京,西施,蒙伢,蔡文姬
19 吕布,赵云,西施,公孙离,张飞
20 廉颇,兰陵王,沈梦溪,虞姬,大乔

 建表:

create table game(
id int,
heros array<string>
)row format delimited
fields terminated by ' '
collection items terminated by ',' ;

加载数据:

load data local inpath '/home/hivedata/heros.txt' into table game;

查询数据是否导入成功

select * from game;

 通过以下 Hive 语句,我们可以实现

with t as(
    select name, count(1) cs
    from game lateral view explode(heros) mytable as name
    group by name
), t2 as (
    select name, cs, dense_rank() over (order by cs desc ) pm from t
)
select * from t2 where pm <= 3;

第五题、行转列展示学生选修课程

        我们有一组学生选修课程的数据。我们的目标是将这些数据转换为行转列的形式,以便更好地展示每个学生的选修情况。

 有如下数据,表示1、2、3三名学生选修了a、b、c、d、e、f中的若干课程

id  course
1 a
1 b
1 c
1 e
2 a
2 c
2 d
2 f
3 a
3 b
3 c
3 e

根据如上数据,查询出如下结果,其中1表示选修,0表示未选修

id  a  b  c  d  e  f
1   1  1  1  0  1  0
2   1  0  1  1  0  1
3   1  1  1  0  1  0

 建表:

create table courses(
id  int,
course string
)
row format delimited
fields terminated by ' '
tblproperties("skip.header.line.count"="1"); -- 跳过第一行数据

加载数据:

load data local inpath '/home/hivedata/homework0823/course.txt' into table courses;

查询数据是否导入成功

select * from courses;

 通过以下 Hive 语句,我们可以实现

--方法一
select id,
        max(case  when course='a' then 1 else 0 end) a,
        max(case  when course='b' then 1 else 0 end) b,
        max(case  when course='c' then 1 else 0 end) c,
        max(case  when course='d' then 1 else 0 end) d,
        max(case  when course='e' then 1 else 0 end) e,
        max(case  when course='f' then 1 else 0 end) f
from courses group by id;


--方法二
select id,
        sum(case  when course='a' then 1 else 0 end) a,
        sum(case  when course='b' then 1 else 0 end) b,
        sum(case  when course='c' then 1 else 0 end) c,
        sum(case  when course='d' then 1 else 0 end) d,
        sum(case  when course='e' then 1 else 0 end) e,
        sum(case  when course='f' then 1 else 0 end) f
from courses group by id;

        通过以上五个案例,我们可以看到 Hive 在数据处理方面的强大能力。无论是数据清洗、转换还是分析,Hive 都提供了丰富的函数和工具,帮助我们轻松地处理大规模数据。希望这些案例对大家在 Hive 数据处理方面有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

The 14th Jilin Provincial Collegiate Programming Contest

题目 #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long long #define pii pair<int, int> #define ld lo…

C语言 | Leetcode C语言题解之第455题分发饼干

题目&#xff1a; 题解&#xff1a; int cmp(int* a, int* b) {return *a - *b; }int findContentChildren(int* g, int gSize, int* s, int sSize) {qsort(g, gSize, sizeof(int), cmp);qsort(s, sSize, sizeof(int), cmp);int m gSize, n sSize;int count 0;for (int i …

D26【python 接口自动化学习】- python 基础之判断与循环

day26 语句嵌套 学习日期&#xff1a;20241003 学习目标&#xff1a;判断与循环&#xfe63;-36 语句嵌套&#xff1a;如何处理多重嵌套的问题&#xff1f; 学习笔记&#xff1a; 语句嵌套的用途 在条件语句中使用另外一个条件语句 在循环中使用条件语句 多重循环 总结 1…

Authentication Lab | JWT None Algorithm

关注这个靶场的其他相关笔记&#xff1a;Authentication Lab —— 靶场笔记合集-CSDN博客 0x01&#xff1a;JWT None Algorithm 前情提要 本关的考点是 JWT&#xff08;Json Web Token&#xff09;漏洞&#xff0c;JWT 是一个用于跨域认证的技术。如果你不了解 JWT&#xff0c…

<<迷雾>> 第6章 加法机的诞生(3)--三比特加法电路 示例电路

用全加器组成一个三比特加法电路 info::操作说明 鼠标单击开关切换开合状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch03-02-3-bit-adder.txt 原图 加法机的简单图示 info::操…

Python案例--数字组合

在编程和数据处理中&#xff0c;我们经常需要从给定的元素中生成所有可能的组合。本文将通过一个简单的Python程序&#xff0c;展示如何生成由四个给定数字&#xff08;0-9&#xff09;组成的所有可能的无重复三位数组合。这可以应用于多种场景&#xff0c;如密码生成、数据校验…

【MySQL实战45讲6】全局锁和表锁

文章目录 全局锁表级锁 全局锁 顾名思义&#xff0c;全局锁就是对整个数据库实例加锁。MySQL提供了一个对全局读锁的方法&#xff0c;命令是Flush tables with read lock (FTWRL) 当需要让整个库处于只读状态的时候&#xff0c;可以使用这个命令&#xff0c;之后其他线程的以下…

计算机毕业设计python+spark知识图谱课程推荐系统 课程预测系统 课程大数据 课程数据分析 课程大屏 mooc慕课推荐系统 大数据毕业设计

《PythonSpark知识图谱课程推荐系统》开题报告 一、研究背景与意义 随着互联网技术的快速发展&#xff0c;在线教育平台已成为人们获取知识、提升技能的重要途径。然而&#xff0c;面对海量的课程资源&#xff0c;用户往往难以快速找到符合自己兴趣和需求的课程。传统的课程推…

Web安全 - 安全防御工具和体系构建

文章目录 安全标准和框架1. 国内安全标准&#xff1a;等级保护制度&#xff08;等保&#xff09;2. 国际安全标准&#xff1a;ISO27000系列3. NIST安全框架&#xff1a;IDPRR方法4. COBIT与ITIL框架 防火墙防火墙的基本作用防火墙的三种主要类型防火墙的防护能力防火墙的盲区 W…

【C++前缀和】3026. 最大好子数组和|1816

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode3026. 最大好子数组和 给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个 子数组 中&#xff0c;第一个元素和最后一个元素 差的绝对值恰…

8643 简单选择排序

### 思路 简单选择排序是一种原地排序算法&#xff0c;通过在未排序部分中选择最小&#xff08;或最大&#xff09;元素并将其放置在已排序部分的末尾来进行排序。每次选择后输出当前排序结果。 ### 伪代码 1. 读取输入的待排序关键字个数n。 2. 读取n个待排序关键字并存储在数…

探索聚丙烯酸水凝胶,从制备到特性,再到3D打印实践

大家好&#xff01;今天我们来了解一种基于聚丙烯酸的自修复水凝胶——《Preparation and Characterization of Poly(Acrylic Acid)-Based Self-Healing Hydrogel for 3D Shape Fabrication via Extrusion-Based 3D Printing》发表于《Materials》。在材料科学领域&#xff0c;…

Visual Studio 字体与主题推荐

个人推荐&#xff0c;仅供参考&#xff1a; 主题&#xff1a;One Monokai VS Theme 链接&#xff1a;One Monokai VS Theme - Visual Studio Marketplacehttps://marketplace.visualstudio.com/items?itemNameazemoh.onemonokai 效果&#xff1a; 字体&#xff1a;JetBrain…

RTSP作为客户端 推流 拉流的过程分析

之前写过一个 rtsp server 作为服务端的简单demo 这次分析下 rtsp作为客户端 推流和拉流时候的过 A.作为客户端拉流 TCP方式 1.Client发送OPTIONS方法 Server回应告诉支持的方法 2.Client发送DESCRIPE方法 这里是从海康摄像机拉流并且设置了用户名密码 Server回复未认证 3.客…

【ubuntu】Ubuntu20.04安装中文百度输入法

1.download 百度Linux输入法-支持全拼、双拼、五笔 2.unzip unzip Ubuntu_Deepin-fcitx-baidupinyin-64.zip 3.setting 3.1 setting fcitx sudo apt install aptitude sudo aptitude install fcitx-bin fcitx-table fcitx-config-gtk fcitx-frontend-all sudo aptitude in…

QT学习笔记2.2(安装部署_编译器)

QT学习笔记2.2&#xff08;安装部署_编译器) 编译器的版本&#xff0c;32位64位的 目前只用32位vs编译过&#xff0c;其他的还没有搞过。 一直没有搞清楚qt qtcreator 生成软件&#xff0c;32位和64位之间的关系 目前只使用32位qt生成打包了32位的项目。 编译器的安装 …

yolov8/9/11模型在中医舌苔分类中的应用【代码+数据集+python环境+GUI系统】

yolov8、9、11模型在中医舌苔分类中的应用【代码数据集python环境GUI系统】 背景意义 目前随着人们生活水平的不断提高&#xff0c;对于中医主张的理念越来越认可&#xff0c;对中医的需求也越来越多。 传统中医的舌诊主要依赖于医生的肉眼观察&#xff0c;仅仅通过这种人工诊…

【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操作案例。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操…

算法【Java】—— 递归

递归思路 首先我们要分析主问题&#xff0c;如果主问题可以拆分成一个又一个小问题的时候&#xff0c;并且这些小问题的解决方案也是一样的话&#xff0c;我们可以使用递归来解决。 递归函数头的设计是根据子问题的解决需要而设计的 函数体部分则是由如何解决子问题组成 最…

0基础学习CSS(十六)尺寸和Display(显示) 与 Visibility(可见性)

CSS 尺寸 (Dimension) 所有CSS 尺寸 (Dimension)属性 属性描述height设置元素的高度。line-height设置行高。max-height设置元素的最大高度。max-width设置元素的最大宽度。min-height设置元素的最小高度。min-width设置元素的最小宽度。width设置元素的宽度。 CSS Display(显…