【Hive】笔试题 04 (求学生选课情况)

1、数据说明

(1)数据格式

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

(2)字段含义

表示有id为1,2,3的学生选修了课程a,b,c,d,e,f中其中几门。

2、数据准备

(1)建表t_course

create table t_course(id int,course string)
row format delimited fields terminated by ",";

(2)导入数据

load data local inpath "/home/hadoop/course/course.txt" into table t_course;

3、需求

编写Hive的HQL语句来实现以下结果:表中的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

4、解析

第一步:

select collect_set(course) as courses from id_course;

第二步:

set hive.strict.checks.cartesian.product=false;

create table id_courses as select t1.id as id,t1.course as id_courses,t2.course courses 
from 
( select id as id,collect_set(course) as course from id_course group by id ) t1 
join 
(select collect_set(course) as course from id_course) t2;

启用严格模式:

hive.mapred.mode = strict // Deprecated
hive.strict.checks.large.query = true

该设置会禁用:

  1. 不指定分页的orderby
  2. 对分区表不指定分区进行查询
  3. 和数据量无关,只是一个查询模式
hive.strict.checks.type.safety = true

严格类型安全,该属性不允许以下操作:

  1. bigint和string之间的比较
  2. bigint和double之间的比较
hive.strict.checks.cartesian.product = true

该属性不允许笛卡尔积操作

第三步:得出最终结果:
思路:
拿出course字段中的每一个元素在id_courses中进行判断,看是否存在。

select id,
case when array_contains(id_courses, courses[0]) then 1 else 0 end as a,
case when array_contains(id_courses, courses[1]) then 1 else 0 end as b,
case when array_contains(id_courses, courses[2]) then 1 else 0 end as c,
case when array_contains(id_courses, courses[3]) then 1 else 0 end as d,
case when array_contains(id_courses, courses[4]) then 1 else 0 end as e,
case when array_contains(id_courses, courses[5]) then 1 else 0 end as f 
from id_courses;
Hadoop和Hive是大数据处理领域中经常使用的工具和框架。 Hadoop是一个开源的分布式计算框架,旨在解决处理大规模数据的问题。它通过将大型数据集分布到多个计算机节点上,利用集群中的多个计算资源进行计算和存储,从而实现高效地处理大数据。Hadoop包括Hadoop分布式文件系统(HDFS)和Hadoop资源调度器(YARN),它们共同构成了Hadoop的核心组件。HDFS负责将数据分布式存储到集群中的各个节点上,而YARN则负责管理集群中的资源和任务调度。Hadoop还提供了一个分布式计算编程模型MapReduce,用于编计算任务。通过使用Hadoop,可以实现大规模数据的存储、处理和分析,从而提供有关数据的洞察力。 Hive立在Hadoop之上的数据仓库基础架构,它提供了一个类似于SQL的查询语言——HiveQL,用于将结构化数据映射到Hadoop分布式文件系统上,提供高级查询和分析能力。Hive将用户提交的HiveQL查询转换为MapReduce任务,在Hadoop集群上执行Hive的设计目标是提供高效灵活的数据查询和分析解决方案,同时隐藏底层的复杂性。它支持用户自定义函数(UDF)、数据压缩和数据分区等功能,以及与其他工具(如Pig、Sqoop和Flume)的集成。通过使用Hive,用户可以方便地使用SQL语言进行数据查询、过滤、转换和分析,而无需深入了解Hadoop的底层技术。 总结来说,Hadoop和Hive是大数据处理领域中非常重要的工具和框架。Hadoop提供了一个分布式计算和存储的平台,可用于处理大规模数据,而Hive立在Hadoop之上,提供了更高级的查询和分析能力,使用户可以通过类似SQL的语言对大数据进行查询和分析。这些工具的使用可以帮助用户更高效、方便地处理和分析大规模数据挖掘出有价值的信息。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值