Hive表 建表

分区表

一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。
分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。
分区表的好处:
在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。表中的一个 Partition 对应于表下的一个目录,Partition 就是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的规格和条件进行管理。

内部表 外部表

未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
区别:

  • 内部表数据由Hive自身管理,外部表数据由HDFS管理;
  • 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
  • 删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;外部表删除时,不会删除数据,这是与内部表的最大区别,一般80%企业都是 外部表。
  • 对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

Hive文件的存储格式

Hive中,文件的存储格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET。
其中,TEXTFILE、SEQUENCEFILE是基于行存储,ORC、PARQUET基于列存储。
当查询结果为一整行的时候,行存储效率会高一些;当查询表中某几列时,列存储的效率会更高。
在对数据的压缩方面,列存储比行存储更有优势,所以列存储占用空间相对小一些。
Parquet是面向分析型系统的列式存储格式,Parquet文件是以二进制格式存储的,所以不能直接读取。

创建表

创建表需要设置表的存储格式

DROP TABLE IF EXISTS mcpc_data.mcpc_D_A_B_CPC_PYMT_CO_PDHS_T;
CREATE TABLE IF NOT EXISTS mcpc_data.mcpc_D_A_B_CPC_PYMT_CO_PDHS_T(
	STMT_CODE CHAR(16) ,
	STMT_NO CHAR(3),
	PYMT_DATE CHAR(10),
	POSTING_DATE CHAR(10),
	CURRENCY CHAR(3),
	AMT DECIMAL(15,2)
)
PARTITIONED BY (PRT_DAY VARCHAR(10) COMMENT '分区日期')
STORED AS PARQUET;

HiveQL (HQL) 与 SQL 区别

  1. HQL不支持行级别的增、改、删,所有数据在加载时就已经确定,不可更改。

  2. 不支持事务。

  3. 支持分区存储。

猜你喜欢

转载自blog.csdn.net/weixin_43260719/article/details/120873398
今日推荐