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