目录:
- HIVE - sql
- 数据基本类型
- Hive sql分类
- HIVE - DDL之数据库的创建
- HIVE - DDL之建表和表操作
- HIVE分区与分桶
- HIVE- DDL之修改表
- HIVE- DML之数据管理
- HIVE- DQL之数据查询
- 使用navicat作为mysql可视化工具查看数据库和表,也可以在hdfs中查看
一.HIVE - sql
1.Hive数据类型
2.Hive sql分类
二.HIVE - DDL之数据库的创建
三.HIVE - DDL之建表和表操作
建表和基本表操作
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later)
[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
[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]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later)
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later)
[AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
说明:
1.创建最简单的一张表:create table if not exists 表名(字段 字段类型);
2.TEMPORARY:临时表
3.EXTERNAL:外部表
4.在hive中表的类型有哪些
5.如何查看哪些是内部表、哪些是外部表?
6.创建一张表到指定数据库:两种方式
7.创建一张表,带有备注信息,同时创建多个字段
8.创建一张带有集合类型的表
9.创建一张外部表,指定存储位置(不在默认的位置中)
一般情况下内部表是在默认的位置下,外部表一般情况下不在默认的位置下。
create external table employees(name1 string comment "aaa",name2 string comment "bbb")location "/hive_data/table03";
10.如何加载文本进行数据的插入?
11.在创建表时,如何指定字段的分隔符?
12.关于集合类型的值的加载
操作:
1.创建一个文本 table05_1.txt
2.将此文本加载到数据表
3.查看表数据
13.like、as的使用
14.在cli中可以直接执行linux命令
例如:
四.分区和分桶
- 分区
- 概念
hive select 查询中一般会扫描整个表内容,会消耗很多时间做没有必要的工作。
而分区表指的是在创建表的时候指定partition的分区空间。create table tablename( name string ) partitioned by(column type[,column type]
- 分区的理解
- 操作
步骤1:创建一个最简单的分区表
步骤2:创建一个数据文本
步骤3:将数据文本加载到分区表中
步骤4:查看分区表数据 - 其他操作
说明: - 创建多个分区字段
并为其加载数据
说明: - 动态分区:hive动态分区
- 概念
- 分桶
- 概念
- 理解
- 操作
1.根据表创建分桶
2.根据区创建分桶
- 概念
- 分区和分桶的区别
- 分区是对某个字段设置一定的规则
- 分桶是对列哈希取值,然后除以桶的个数的方式决定记录放在哪个桶中,分桶是比分区更细粒度的操作。
五.HIVE- DDL之修改表
修改表结构
alter table table_name [partition partition_spsc] change [column] col_old_name col_new_name column_type
[comment col_commnet] [first|alter column_name] [cascade|restrict];
- 添加列:添加一个字段
alter table emloyee add columns(test String); - 修改列名
alter table employee change old_name new_name String;
alter table employee change old_name new_name String after age;//修改列名,并改变name列的位置,如果此列有数据的情况下,数据不会发生交换。
注意:在改变字段名位置的时候,类型需要匹配。
这里只是将字段的名称进行了交换,如果表中已有数据不会进行交换。
六.HIVE- DML之数据管理
- 导入数据
- 从本地加载数据到hive表
LOAD DATA LOCAL INPATH ‘employee.txt’ OVERWRITE INTO TABLE company.employee patition(sex,age); - 从另一个表加载数据到hive表
注意: - 从HDFS中导入数据(有数据还原的功能)
- 从本地加载数据到hive表
- 导出数据
- 导出数据到HDFS(有数据备份的功能)
- 导出数据到HDFS(有数据备份的功能)
- 其他
- 将某张的数据清空
TRUNCATE TABLE table04;
- 将某张的数据清空
七.HIVE- DQL之数据查询
- HiveSQL 支持的几种排序各代表什么意思(Sort By/Order By/Cluster By/Distrbute By)
https://blog.csdn.net/lzm1340458776/article/details/43306115
说明:
2.这三者的区别
- 执行效果上:
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
count(1)包括了所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计 . - 执行效率上:
列名为主键,count(列名)会比count(1)快
列名不为主键,count(1)会比count(列名)快
如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
如果有主键,则 select count(主键)的执行效率是最优的
如果表只有一个字段,则 select count(*)最优
八.使用navicat作为mysql可视化工具查看数据库和表,也可以在hdfs中查看
navcat查看
在hdfs的web界面查看