HIVE基础

HIVE特征

  • Hive 只适合用来做海量离线数 据统计分析,也就是数据仓库

  • Hive 中所有的数据都存储在 HDFS 中,没有专门的数据存储格式,因为 Hive 是读模式 (Schema On Read),可支持 TextFile,SequenceFile,RCFile 或者自定义格式等

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]

语法对比

  • Sort By:对于大规模的数据集order by的效率非常低。在很多情况下,并不需要全局排序,此时可以使用sort by,按照分区排序。
  • Sort by为每个reducer产生一个排序文件。每个Reducer内部进行排序,对全局结果集来说不是排序
# 设置reduce个数
set mapreduce.job.reduces=3;
# 查看设置reduce个数
set mapreduce.job.reduces;
# 根据部门编号降序查看员工信息
select * from emp sort by deptno desc;
# 将查询结果导入到文件中(按照部门编号降序排序)
insert overwrite local directory '/home/xuzheng/datas/sortby-result' select * from emp sort by deptno desc;
  • Distribute By: 在有些情况下,我们需要控制某个特定行应该到哪个reducer,通常是为了进行后续的聚集操作。distribute by 子句可以做这件事。distribute by类似MR中partition(自定义分区),进行分区,结合sort by使用
  • Hive要求DISTRIBUTE BY语句要写在SORT BY语句之
# 设置reduce个数
set mapreduce.job.reduces=3;
# 先按照部门编号分区,再按照员工编号降序排序
select * from emp distribute by deptno sort by empno desc;
  • 当distribute by和sorts by字段相同时,可以使用cluster by方式
  • cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC
# 按照部门编号分区排序
select * from emp cluster by deptno;
# 与上面语句等价
select * from emp distribute by deptno sort by deptno;
  • ROW_NUMBER、RANK和DENSE_RANK的区别
    row_number: 按顺序编号,不留空位
    rank: 按顺序编号,相同的值编相同号,留空位
    dense_rank: 按顺序编号,相同的值编相同的号,不留空位

执行语法

hive [-hiveconf x=y]* [<-i filename>]* [<-f filename>|<-e query-string>] [-S]

1、-i 从文件初始化 HQL

2、-e 从命令行执行指定的 HQL

3、-f 执行 HQL 脚本

4、-v 输出执行的 HQL 语句到控制台

5、-p connect to Hive Server on port number

6、-hiveconf x=y(Use this to set hive/hadoop configuration variables)

7、-S:表示以不打印日志的形式执行命名操作

HIVE内部架构

hive的内部架构由四部分组成:

  1. 用户接口
  2. 跨语言服务
  3. 底层的Driver
  4. 元数据存储系统

HIVE数据表

1、Hive数据库相关的元数据表(DBS、DATABASE_PARAMS)

  • DBS —— 存储Hive中所有数据库的基本信息
  • DATABASE_PARAMS —— 该表存储数据库的相关参数,在CREATE DATABASE时候用

2、Hive表和视图相关的元数据表(TBLS、TABLE_PARAMS、TBL_PRIVS)

  • TBLS —— 该表中存储Hive表、视图、索引表的基本信息
  • TABLE_PARAMS —— 该表存储表/视图的属性信息
  • TBL_PRIVS —— 该表存储表/视图的授权信息

3、Hive文件存储信息相关的元数据表(SDS、SD_PARAMS、SERDES、SERDE_PARAMS)

由于HDFS支持的文件格式很多,而建Hive表时候也可以指定各种文件格式,Hive在将HQL解析成MapReduce时候,需要知道去哪里,使用哪种格式去读写HDFS文件,而这些信息就保存在这几张表中。

  • SDS —— 该表保存文件存储的基本信息,如INPUT_FORMAT、OUTPUT_FORMAT、是否压缩等。TBLS表中的SD_ID与该表关联,可以获取Hive表的存储信息。
  • SD_PARAMS —— 该表存储Hive存储的属性信息,在创建表时候使用
  • SERDES —— 该表存储序列化使用的类信息
  • SERDE_PARAMS —— 该表存储序列化的一些属性、格式信息,比如:行、列分隔符

4、Hive表字段相关的元数据表(COLUMNS_V2)

  • COLUMNS_V2 —— 该表存储表对应的字段信息

5、Hive表分区相关的元数据表(PARTITIONS、PARTITION_KEYS、PARTITION_KEY_VALS、PARTITION_PARAMS)

  • PARTITIONS —— 该表存储表分区的基本信息
  • PARTITION_KEYS —— 该表存储分区的字段信息
  • PARTITION_KEY_VALS —— 该表存储分区字段值
  • PARTITION_PARAMS —— 该表存储分区的属性信息

HIVE连接的方法

  • CLI连接
  • HiveServer2/beeline
  • Web UI

Hive 的视图和关系型数据库的视图区别

和关系型数据库一样,Hive 也提供了视图的功能,不过请注意,Hive 的视图和关系型数据库的数据还是有很大的区别:

  • 只有逻辑视图,没有物化视图;

  • 视图只能查询,不能 Load/Insert/Update/Delete 数据;

  • 视图在创建时候,只是保存了一份元数据,当查询视图的时候,才开始执行视图对应的 那些子查询

更多资料可以参考:

HIVE系列快速入门

HIVE笔记,来自作者—哈工大的许政

你可能感兴趣的:(hive,hive,数据库,大数据)