hive文件存储格式包括以下几类:

1、TEXTFILE
2、SEQUENCEFILE
3、RCFILE
4、ORCFILE(0.11以后出现)
5、PARQUET

     其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理;

    SEQUENCEFILE,RCFILE,ORCFILE,PARQUET格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入SequenceFile,RCFile,ORCFile,PARQUET表中;或者用复制表结构及数据的方式(create table as select * from table )。

 

1. textfile

默认格式;

存储方式为行存储;

磁盘开销大 数据解析开销大;

但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。

 

2. sequencefile

二进制文件,以<key,value>的形式序列化到文件中;

存储方式:行存储;

可分割 压缩;

一般选择block压缩;

优势是文件和Hadoop api中的mapfile是相互兼容的

 

3. rcfile

存储方式:数据按行分块 每块按照列存储;

压缩快 快速列存取;

读记录尽量涉及到的block最少;

读取需要的列只需要读取每个row group 的头部定义;

读取全量数据的操作 性能可能比sequencefile没有明显的优势,

 

4. orcfile

存储方式:数据按行分块 每块按照列存储;

压缩快 快速列存取;

效率比rcfile高,是rcfile的改良版本。

 

5. parquet 

类似于orc,相对于orc文件格式,hadoop生态系统中大部分工程都支持parquet文件。

6. 示例:

// 创建textfile文件格式的表:ods_g2asp_profile_rent_situation_init

CREATE TABLE `ods_g2asp_profile_rent_situation_init` (

  `id` INT COMMENT 'id',

  `park_code` STRING COMMENT '园区编码',

  `rent_code` STRING COMMENT '租户编码',

  `rent_name` STRING COMMENT '租户名称',

  `rent_area` INT  COMMENT '租赁面积(m²)',

  `rent_amount` DOUBLE  COMMENT '租赁金额(¥)',

  `rent_start_date` STRING  COMMENT '租赁起始日期',

  `rent_end_date` STRING  COMMENT '租赁结束日期',

  `created_by` INT  COMMENT '创建人',

  `created_time` STRING  COMMENT '创建时间',

  `updated_by` INT  COMMENT '更新人',

  `updated_time` STRING  COMMENT '更新时间',

  `deleted` BOOLEAN  COMMENT '是否删除(0:未删除、1:已删除)'

) COMMENT '园区profile租赁情况-现有租户' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' LINES TERMINATED BY '\012' STORED AS TEXTFILE;





// 创建orcfile文件格式的表:cdm_profile_rent_situation

CREATE TABLE IF NOT EXISTS `cdm_profile_rent_situation` (

  `id` INT COMMENT 'id',

  `park_code` STRING COMMENT '园区编码',

  `rent_code` STRING COMMENT '租户编码',

  `rent_name` STRING COMMENT '租户名称',

  `rent_area` INT  COMMENT '租赁面积(m²)',

  `rent_amount` DOUBLE  COMMENT '租赁金额(¥)',

  `rent_start_date` STRING  COMMENT '租赁起始日期',

  `rent_end_date` STRING  COMMENT '租赁结束日期',

  `created_by` INT  COMMENT '创建人',

  `created_time` STRING  COMMENT '创建时间',

  `updated_by` INT  COMMENT '更新人',

  `updated_time` STRING  COMMENT '更新时间',

  `deleted` BOOLEAN  COMMENT '是否删除(0:未删除、1:已删除)'

) COMMENT '园区profile租赁情况-现有租户' PARTITIONED BY (pt_day STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' LINES TERMINATED BY '\012' STORED AS orcfile;





//将ods_g2asp_profile_rent_situation_init 表以动态分区的格式导入cdm_profile_rent_situation表中

insert into table cdm_profile_rent_situation partition (pt_day) select id,park_code,rent_code,rent_name,rent_area,rent_amount,rent_start_date,rent_end_date,created_by,created_time,updated_by,updated_time,deleted,rent_start_date from  ods_g2asp_profile_rent_situation_init