目录

一、HiveSQL中的数据类型

1、基本数据类型 

2、复杂数据类型

二、分隔符指定 

三、表的修改 

四、表的删除 

五、表的分类

1、内部表:默认创建的都是内部表

2、外部表 :

3、修改表的类型

 六、表数据写入

方式一、使用HDFS直接上传

方式二、使用hivesql的load语句上传

方式三、通过insert将数据写入到表目录的文件中

七、表数据导出

八、表的分区

1、意义

2、创建分区表

3、静态分区

4、动态分区 :可以根据select中指定的字段数据最为分区的依据

5、多层分区​编辑 

引言:

Hive和MySQL中还是有很多微妙的差别,例如:

1.查询语言不同:hive是hql语言,mysql是sql语言

2.数据存储位置不同:hive是把数据存储到hdfs,而mysql数据存储在自己的系统中

3.数据格式:hive数据格式可以用户自定义,mysql有自己的系统定义格式

4.数据更新:hive不支持数据更新,只可以读,不可以写,sql支持数据的读写

5.索引:hive没有索引,因此查询数据的时候是通过mapreduce很暴力的把数据都查询一遍,也造成了hive查询数据速度很慢的原因,而mysql有索引;

6.延迟性:hive没有索引,因此查询数据的时候通过mapreduce很暴力 的把数据都查询一遍,也造成了hive查询数据速度很慢的原因,而mysql有索引;

7、数据规模:hive存储的数据量超级大,而mysql只是存储一些少量的业务数据

8.底层执行原理:hive底层是用的mapreduce,而mysql是excutor执行器;

一、HiveSQL中的数据类型

1、基本数据类型 

整型tinyint  smallintintbigint浮点型floatdoubledecimal字符串string时间类型datetimestamps注释comment布尔类型boolean

2、复杂数据类型

array   数组类型  [   ,  ]map     字典类型 {key:values}

 具体详细内容可参考官网LanguageManual Types - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-NumericTypes

二、分隔符指定 

对hdfs上的文件数据存储时的分割符进行指定

hive在将行数据存储在hdfs上时,默认字段之间的数据分隔符 \001

在创建表时可以指定分割符

row format delimited fields terminated by '分割符'

最终的意义就是,在HDFS中可看的数据中以逗号(,)隔开

三、表的修改 

1、查看表

desc  formatted(extended) 表名

2、修改表名字

alter table 表名 rename to 新表名 

3、对字段进行修改

添加字段 alter table 表名 add columns(字段名 字段类型)

修改字段 alter table 表名 change 旧字段名 新字段名 字段类型

注:只能小调大,并非大调小 

4、修改表属性

alter table 表名 set tblproperties() 

四、表的删除 

1、表删除  会删除表的目录和表的元数据信息

drop table 表名;

2、表清空数据  把存储数据的文件一并删除 

truncate table 表名;

五、表的分类

1、内部表:默认创建的都是内部表

2、外部表 :

create external table 表名(     字段 字段类型 )

区别:

在删除表时,

内部表会把表的所有数据删除(元数据和行数据)

外部表会把表的元数据删除,保留hdfs上的文件数据

3、修改表的类型

desc formatted tb_managed; alter table tb_managed set tblproperties('EXTERNAL'='TRUE'); -- 设置为外部表 alter table tb_managed set tblproperties('EXTERNAL'='FALSE');-- 设置为内部表

 六、表数据写入

直接将数据文件存储上传到指定的表目录下

方式一、使用HDFS直接上传

方式二、使用hivesql的load语句上传

hive运行的位置就是文件上传的位置追加上传:load data local inpath 'file://路径' into table 表名覆盖上传:load data local inpath 'file://路径' overwrite into table 表名

方式三、通过insert将数据写入到表目录的文件中

追加写入:insert into 表名 values覆盖写入:insert overwrite table 表名 values可以将select的查询结果写入:insert into 表名 select * 

七、表数据导出

导出到本地

insert overwrite local directory 'file://路径' row format delimited fields terminated by ',' select 

八、表的分区

1、意义

在公司会产生大量数据,数据存储在hdfs上时,需要对数据进行拆分,在进行数据查询时就可以快速查询到需要的内容

2、创建分区表

create table 表名()

partitioned by(分区字段)

row format delimited fields terminated by ',';

3、静态分区

手动指定分区insert into 表名partition(分区字段) values(); 

4、动态分区 :可以根据select中指定的字段数据最为分区的依据

1、需要先开启设置:set hive.exec.dynamic.partition.mode=nonstrict;

2、insert into tb_user_partiton partition(gender) select id,name,age,create_time,gender from tb_user; 

5、多层分区 

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: