Hive是基于Hadoop的应用程序,受限于Hadoop 的设计,Hive不能提供完整的数据库功能。最大的限制就是Hive不支持行级别的更新、插入或者删除 *** 作。同时,因为MapReduce任务的启动过程需要消耗较长的时间,所有Hive查询延迟比较严重。传统数据库中在秒级别可以完成的查询,在Hive中,即使数据集相对较小,往往也需要执行更长的时间。最后需要说明的是,Hive不支持事务。
在这里插入图片描述
Hive中附带的客户端有三种:CLI(命令行客户端)、HWI(网页客户端)和Thrift Server(编程客户端)。
(1)查看Hadoop版本号,命令如下:
hadoop version
(2)启动Hadoop,命令如下:
- 启动HDFS:start-dfs.sh - 启动Yarn:start-yarn.sh - 检查Hadoop进程:jpsHive中的数据库
(1)创建数据库
CREATE DATAbase school; CREATE DATAbase 数据库名称;
(2)查看Hive中所包含的数据库
SHOW DATAbaseS;
(3)切换数据库
USE school; USE 数据库名字;
(4)删除数据库
DROp DATAbase IF EXISTS school CASCADE; DROP DATAbase IF EXISTS 数据库名 CASCADE;
– 默认导入的是HDFS数据,导入本地数据需要添加LOCAL关键字
–默认导入的是执行追加 *** 作,如果需要执行覆盖 *** 作,需要添加OVERWRITE关键字
–内部表控制着数据的生命周期,当内部表删除的时候,目录和其中的文件也会被删除
–如果需要和其他系统共享数据,可以创建外部表
–EXTERNAL外部表的关键字,外部表不会在school.db目录下创建子目录
–LOCATION 设置外部表数据文件的位置,外部表不需要导入数据
–LOCATION需要指定为数据文件所在的目录,会把目录中的所有文件加载到表
--内部表:管理数据,创建目录,剪切文件,随着表的删除,表结构.目录和数据文件都删除 --外部表:共享文件,不创建目录,不 *** 作文件,随着表的删除,只删除表结构,不删除数据文件 --在查询 *** 作上,内部表和外部表没有任何区别分区表
–分区字段也是表中的列,叫做虚拟列(虚拟字段)
–因为他们的值不在数据文件中,需要在导入数据的时候手动添加
LOAD DATA INPATH '/usr/hive/student/student_cs_a1.txt' INTO TABLE student PARTITION (college='cs',clazz='a1');--hdfs上面导入 LOAD DATA INPATH '/usr/hive/student/student_cs_a2.txt' INTO TABLE student PARTITION (college='cs',clazz='a2'); LOAD DATA INPATH '/usr/hive/student/student_ai_b1.txt' INTO TABLE student PARTITION (college='ai',clazz='b1');聚合函数
常用的Hive的内置聚合函数
查询学生的总人数
SELECT COUNT(*) FROM student;
查询学生的平均年龄:
SELECt AVG(age) FROM student;
查询学生的最大年龄:
SELECt MAX(age) FROM student;
查询学生的最小年龄:
SELECt MIN(age) FROM student;排序
查询所有学生信息并按照年龄升序排列
SELECt * FROM student ORDER BY age; SELECt * FROM student ORDER BY age ASC;
查询所有学生信息并按照年龄降序排列
SELECt * FROM student ORDER BY age DESC;
我们分别使用ORDER BY和SORT BY按照成绩降序排列:
SELECt * FROM score ORDER BY score DESC; SELECt * FROM score SORT BY score DESC;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)