目录
一般情况下hive在创建表时默认的存储格式是textfile,hive常用的存储格式有五种,textfile、sequencefile、rcfile、orc、parquet。

| 存储格式 | 文件存储编码格式 | 建表指定 |
|---|---|---|
| textfile | 将表中的数据在hdfs上以正常文本的格式存储,下载后可以直接查看。 | stored as textfile |
| sequencefile | 将表中的数据在hdfs上以二进制格式编码,并将数据压缩,下载的数据是二进制格式,不可以直接查看,无法可视化。 | stored as sequecefile |
| rcfile | 将表中的数据在hdfs上以二进制格式编码,并且支持压缩。下载后的数据无法可视化。 | stored as rcfile |
| orc | 文件存储方式为二进制文件。orc文件格式从hive0.11版本后提供,是RcFile格式的优化版,主要在压缩编码,查询性能方面做了优化。按行组分割整个表,行组内进行列式存储。 | stored as orc |
| parquet | 文件存储方式为二进制文件。parquet基于dremel的数据模型和算法实现,列式存储。 | stored as parquet |
textfile利弊:
sequencefile利弊:
rcfile利弊:
orc利弊:
parquet利弊:
下图红框标出的部分是利用hadoop本身InputFormat API从不同的数据源读取数据,OutputFormat API将数据写成不同的格式。所以对于不同的数据源,不同的存储格式就需要不同对应的InputFormat和Outputformat类来实现。
- CREATE TABLE teacher(
- name string,
- age int
- )row format delimited fields terminated by ','
- stored as textfile;

- CREATE TABLE teacher01(
- name string,
- age int
- )stored as sequencefile;

这里没有使用row format delimited fields terminated by ',',是因为没有必要,单纯的load以逗号分隔的文本进去会报错。
FAILED: SemanticException Unable to load data to destination table. Error: The file that you are trying to load does not match the file format of the destination table.
- CREATE TABLE teacher02(
- name string,
- age int
- )stored as rcfile;

这里也没有使用row format delimited fields terminated by ',',是因为没有必要,单纯的load以逗号分隔的文本进去会报错。
- CREATE TABLE teacher03(
- name string,
- age int
- )stored as orc;

这里也没有使用row format delimited fields terminated by ',',是因为没有必要,单纯的load以逗号分隔的文本进去会报错。
- CREATE TABLE teacher04(
- name string,
- age int
- )stored as parquet;

这里也没有使用row format delimited fields terminated by ',',是因为可以load以逗号分隔的文本进去。但是select 查询会报错。
- hive> select * from teacher12;
- OK
- Failed with exception java.io.IOException:java.lang.RuntimeException: hdfs://master.com:8020/user/hive/warehouse/teacher12/teacher.txt is not a Parquet file. expected magic number at tail [80, 65, 82, 49] but found [44, 49, 52, 10]
- Time taken: 0.095 seconds