1.hive中sort by与order by的区别
sort by – 局部排序,只保证单个reduce内有顺序
order by – 全局排序,保证所有的reduce中的数据都有顺序
ps:如果reduce只有一个,两者都一样
两者通常和asc desc搭配,默认使用升序asc
只要使用order by,reduce的个数就是1个
也可以自定义设置reduce数量:set mapreduce.job.reduces=3;(设置reduce数量为3)默认为-1.
2.hive与mysql的区别
回答思路:hive背景(原理、本质)–>两者操作、本质的差别–>读写差别–>其它差别。
Hive的诞生背景:学mysql的也想入门大数据,但又不会java,于是hive就诞生了。Hive是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表。本质是将HQL语句转化为MR程序。
hive总体来说操作等方面和MySQL没有太大差别。但是本质却有差别,Hive注重联机分析的处理,mysql注重事务的处理。Hive注重的是分析,mysql注重的是处理。
MySQL在写的时候检查字段,hive在读的时候检查字段。所以在新增数据时,hive比较快,只需要直接load就行,而MySQL需要先检查字段。
hive与mysql的其它差别如下:
1)数据存储位置:Hive的数据都是存储在 HDFS 中的。而数据库则可以将数据保存在块设备或者本地文件系统中。
2) 存储引擎: mysql用自己的存储引擎,hive使用的hdfs来存储。
3)执行引擎:mysql使用自己的执行引擎,而hive使用的是hadoop的mapreduce来执行。
4) 使用环境: mysql使用环境几乎没有限制,hive是基于hadoop的。
5)执行延迟:hive高延迟,mysql低延迟。
6)可扩展性:hive的可扩展性高,而mysql由于ACID语义限制,扩展性有限。
7)数据量:mysql的handle的数据量较小,而hive的handle数据量较大。
3.hive内部表和外部表的 区别
1、内部表 表目录会创建在hdfs的/user/hive/warehouse/的相应的库目录下
2、外部表 外部表会根据建表是LOCATION关键字所指定的路径来创建表目录(如果没有指定LOCATION,则表目录位置与内部表相同)
内部表的创建和外部表的创建,就差两个关键字:EXTERNAL LOCATION
内部表 – CREATE TABLE IF NOT EXISTS T_INNER(ID INT);
外部表 – CREATE EXTERNAL TABLE IF NOT EXISTS T_OUTER(ID INT) LOCATION ‘/AAA/BBB’;
HIVE中建表语句所做的事情:
1、在hdfs上创建相应的表目录
2、在元数据库中创建相应表的描述信息(元数据)
内部表和外部表删除时的不同的特性:
1、drop时,元数据都会被删除
2、drop时,内部表的表目录会被删除,但是,外部表的数据目录不会被删除
外部表的使用场景:
使用后不删除数据的场景使用外部表(推荐使用外部表)
所以,整个的数据仓库中的最底层的表(与仓库外对接的数据表ODS)使用外部表
4.hive中union和union all的区别
Union去重、排序,union all不去重不排序。
5.公司中使用内部表多还是外部表多
内部表。
6.hive中创建库和创建表的本质是什么
创建库的本质:在hive的数据仓库下创建一个目录(库名.db的目录)
创建表的本质:在hdfs上创建表目录
7.说一下你所学过的窗口函数
FIRST_VALUE:取分组内排序后,截止到当前行,第一个值 。
LAST_VALUE: 取分组内排序后,截止到当前行,最后一个值 。
LEAD(col,n,DEFAULT) :用于统计窗口内往下第n行值。第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL) 。
LAG(col,n,DEFAULT) :与lead相反,用于统计窗口内往上第n行值。第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)。
8.hive内部表和外部表的转换
alter table t_newuser set TBLPROPERTIES(‘EXTERNAL’=‘TRUE’); ###true一定要大写
alter table t_newuser set TBLPROPERTIES(‘EXTERNAL’=‘false’); ###false大小写都没关系
9.hive分区的三种类型
静态分区:加载数据的时候指定分区的值。
动态分区:数据未知,根据分区的值确定创建分区。
混合分区:静态加动态。
10.hive的存储格式
hive默认的存储格式:textfile
textfile:普通的文本文件存储,不压缩
sequencefile:hive为用户提供的 二进制存储,本身就压缩。
rcfile:hive提供的行列混合存储,hive在该格式下,将会尽量把附近的行和列的块存储到一起。仍然压缩,查询效率较高。
Orc是rcfile的升级版本。
Parquet列式存储。
11.hive的建表语法
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], …)] 列名 列数据类型 列的说明
[COMMENT table_comment] 表的说明
[PARTITIONED BY (col_name data_type [COMMENT col_comment], …)] 分区,
[CLUSTERED BY (col_name, col_name, …) 分桶
[SORTED BY (col_name [ASC|DESC], …)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format] 读写格式
[STORED AS file_format] 存储文件格式
[LOCATION hdfs_path] 指定文件路径