Hive 文件格式

Hive 文件存储格式支持以下几类:
TEXTFILESEQUENCEFILERCFILEORCFILEPARQUET
其中 TEXTFILE 为默认格式,文件格式分为两类:行存储和列存储。

TEXTFILE

默认的文件格式,行存储。导入数据时把数据文件拷贝至 HDFS 不进行处理。

  • 优点:最简单的数据格式,便于和其他工具(Pig、grep、sed、awk)共享数据,便于查看和编辑;加载较快。
  • 缺点:耗费存储空间,I/O性能较低;Hive 不进行数据切分合并,不能进行并行操作,查询效率低。

适用于小型查询,查看具体数据内容的测试操作。

Hive 中默认记录和字段分隔符

符号 描述
\n 换行符,分割记录
^A(ctrl+A) 用于分割字段,可以用 \001 表示
^B 分割 Array 或 Struct 中的元素,用 \002 表示
^C 分割 Map 的 key 和 value,用 \003 表示
create table employees (
    name string,
    salary float,
    subordinates array<string>,
    deductions map<string,float>,
    address struct<street:string,city:string,state:string,zip:string>
);

可以用以下格式表示文件内容,Hive 可以读取

john^A1000.0^AMary^BTed^ATax^C0.2^BStateTax^C0.05^AMAve^BNewYork^BIL^B600100\n

创建表示可以指定分隔符

create table employees (
    name string,
    salary float,
    subordinates array<string>,
    deductions map<string,float>,
    address struct<street:string,city:string,state:string,zip:string>
)
ROW FORMAT DELIMITED            --需要写在前面
FIELDS TERMINATES BY '\001'
COLLECTION ITEMS TERMINATES BY '\002'
MAP KEYS TERMINATES BY '\003'
LINE TERMINATES BY '\n'         --目前只支持\n
STORED AS TEXTFILE;             --支持多种文件格式

SEQUENCEFILE

键值对格式的二进制文件,行存储。

  • 优点:可压缩、可分割,优化磁盘利用率和I/O;可并行操作数据,查询效率高;
  • 缺点:存储空间消耗最大;对于 Hadoop 生态系统之外的工具不适用,需要通过 TEXT 文件转化加载。

适用于数据量较小、大部分列的查询。

RCFILE

行列式存储。将数据按行分块,同一个 Record 在一个块上,避免读一条记录需要读多个 Block;然后块数据列式存储。

  • 优点:可压缩,高效的列存取;查询效率较高。
  • 缺点:加载时性能消耗较大,需要通过 TEXT 文件转化加载;读取全量数据性能低。

ORCFILE

优化后的 RCFILE,行列式存储。
优缺点与 RCFILE 类似,查询效率最高。

适用于 Hive 中大型的存储、查询。

PARQUET

列存储。

  • 优点:更高效的压缩和编码;不与任何数据处理技术绑定,可用于多种数据处理框架(Hive、Impala、Presto 查询引擎;MapReduce、Spark 计算框架;Avro、Thrift、PB 数据模型 )。
  • 缺点:不支持 UPDATE、INSERT、DELETE、ACID

适用于字段数非常多,无更新,只取部分列的查询。


References:
http://www.cnblogs.com/milazhou/p/9329480.html

Tags:

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注

7 + 20 =