写在前面的话:
该系列博文是我学习《 Hive源码解析与开发实战》视频课程的一个笔记,或者说总结,暂时没有对视频中的操作去做验证,只是纯粹的学习记录。
有兴趣看该视频的博友可以留言,我会共享出来,相互交流学习 ^.^。
*********************************************************************************************************
1、Hive数据类型:
2、Hive文件格式:
文件类型主要包括:文本文件格式、序列化文件格式、列式文件格式。
对于列文件格式,它是针对hdfs中的一个block块的:
它首先把hdfs上的一个块划分成了一个个行组,每一个行组是按照多少行来进行分组的,比如说把100行分为一个行组(row group),然后再对这一个Row Group进行压缩,压缩过程如下:
首先把每一列的数据转化为行的数据,也就是所有的列都变成行,这样做是为了方便有时候我们需要某一列的数据,但为了高效,我们不需要把其他列的数据也查询出来;
然后把转化后的行中重复的数据去掉,也就是“压缩”的由来,这样可以节省hdfs的存储空间;
3、Hive表的创建:
hive里面所有的数据都是以表的形式来管理的,所以表是hive的一个基础,关于表的创建语法如下:
解释:
CREATE :创建表的关键字;
EXTERNAL:是可选的,主要用来区分是内部表还是外部表,内部表和外部表主要是hive表的两大类;
TABLE: 关键字;
IF NOT EXISTS:这个是可选的,表示当我创建一个表的时候,如果不存在才创建,已经存在该表了就不创建。
主要是为了防止在没有该语句的时候,创建一个已有的表时报错;
db_name. :表示数据库的名字,后面跟一个点,用来接对应表的名字;
table_name:表的名字;
col_name date_type :分别为字段名字和类型;
COMMENT col_comment:字段的描述信息,COMMENT后面接字段描述信息col_comment;
PARTITIONED BY: 通过哪些字段进行分区,后面接小括号,然后里面写相应的字段名和字段类型,如果有描述信息的还可以添加相应字段的描述信息;
CLUSTERED BY:也就是把一些字段作为key,集合到一块,(个人理解:对应到mapreduce中最后reduce拿到相应分区数据后的分组操作,相同的key作为一组,
这里也就是把这些字段相同值的分为一个组),后面接小括号,里面写一些字段名;
SORTED BY: 后面接小括号,里面写相应的字段名,以及标示是正序还是倒序排,表示按照那些字段进行排序排序;
INTO num_buckets BUCKETS: 表示划分为多少个桶,个人理解:这个对应到mapreduce的reduce个数;
ROW FORMAT:设置行的格式,后面接row_format格式,row_format表示某种格式,个人猜测:表示行里面的字段是以什么进行分割的,如空格或逗号;
STORED AS :后面接文件格式,表示以什么格式进行存储,这里的文件格式就是前面讲的文本格式、序列化文件格式、列式格式;
STORED BY:个人猜测,是表示通过自定义的输入输出类,进行处理,然后存储;
LOCATION hdfs_path:表示把创建的这个表数据存储在hdfs上的位置;
TABLEPROPERTIES:后面接小括号,里面设置属性名=属性值;这里用来设置表的属性;
AS select_statement:通过select查询出一些其他表的结果,然后直接把得到的这些数据放入到创建的这张表里面去;
以上就是hive创建表的基本语法解释。
下面列举一个hive创建表的列子:
4、Hive操作表: