hive文件存储格式
1.textfile
textfile为默认格式
存储方式:行存储
磁盘开销大 数据解析开销大
压缩的text文件 hive无法进行合并和拆分
2.sequencefile
二进制文件,以<key,value>的形式序列化到文件中
存储方式:行存储可分割 压缩一般选择block压缩,
优势是文件和Hadoop api中的mapfile是相互兼容的。
3.rcfile
存储方式:数据按行分块 每块按照列存储
压缩快 快速列存取
读记录尽量涉及到的block最少
读取需要的列只需要读取每个row group 的头部定义。
读取全量数据的操作 性能可能比sequencefile没有明显的优势
4.orc
存储方式:数据按行分块 每块按照列存储
压缩快 快速列存取
效率比rcfile高,是rcfile的改良版本
5.自定义格式
用户可以通过实现inputformat和 outputformat来自定义输入输出格式。
总结:
textfile 存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高
sequencefile 存储空间消耗最大,压缩的文件可以分割和合并 查询效率高,需要通过text文件转化来加载
rcfile 存储空间最小,查询的效率最高 ,需要通过text文件转化来加载,加载的速度最低
个人建议:text,seqfile能不用就尽量不要用 最好是选择orc
例子:
use PDATA;
DROP TABLE IF EXISTS EXCH_USER_JOUR;
CREATE TABLE IF NOT EXISTS EXCH_USER_JOUR
(
SERIAL_NO STRING COMMENT '流水序号',
BR_ORG STRING COMMENT '分支机构',
OPER_NO STRING COMMENT '操作员编号',
OPR_BR_ORG STRING COMMENT '操作分支机构',
STATION_ADDR STRING COMMENT '站点地址',
ENTRUST_MODE_CODE STRING COMMENT '委托方式代码',
USER_NO STRING COMMENT '用户编号',
PRSNT_DATE STRING COMMENT '当前日期',
PRSNT_TIME STRING COMMENT '当前时间',
BUSI_FLAG STRING COMMENT '业务标志',
USER_CATE_CODE STRING COMMENT '用户类别',
OBLIGATE_INFO STRING COMMENT '预留信息',
PWD STRING COMMENT '密码',
SRV_PWD STRING COMMENT '服务密码',
ASSIGN_FLAG STRING COMMENT '指定标志',
OLD_PWD STRING COMMENT '旧密码',
OLD_SRV_PWD STRING COMMENT '旧服务密码',
ONLYREAD_FLAG STRING COMMENT '只读标志',
REMARK STRING COMMENT '备注',
POSITIONING STRING COMMENT '定位串',
DATA_TIME STRING COMMENT '数据时间'
)
PARTITIONED BY (BUSI_DATE STRING COMMENT '业务时间')
STORED AS ORC;