们已经介绍过在 Hive 中使用 Avro,Parquet 格式来存储数据。今天我们将介绍一下如何在 Impala中使用 Parquet 格式。
1. 跟 Hive 中一样,我们在创建表的时候可以通过 STORED AS PARQUET 语句来指定文件的存储格式。
[sql] view plain copy
- CREATE TABLE stocks_parquet LIKE stocks STORED AS PARQUET;
2. 我们可以使用 Insert 语句来将一张旧表中的数据拷贝到新的 Parquet 存储格式的表中。
[sql] view plain copy
- INSERT OVERWRITE TABLE stocks_parquet SELECT * FROM stocks;
3. 检查 Parquet 表的创建:
[sql] view plain copy
- > SHOW TABLE STATS stocks_parquet;
- Query: show TABLE STATS stocks_parquet
- +-------+--------+--------+---------+
- | #Rows | #Files | Size | Format |
- +-------+--------+--------+---------+
- | -1 | 1 | 2.56KB | PARQUET |
- +-------+--------+--------+---------+
你也可以在创建表的时候就指定文件的存储格式:
[sql] view plain copy
- CREATE TABLE stocks_parquet_internal (
- sym STRING,
- dt STRING,
- open DOUBLE,
- high DOUBLE,
- low DOUBLE,
- close DOUBLE,
- volume INT,
- adj_close DOUBLE
- ) STORED AS PARQUET;
Impala 非常好的一点就是它允许 Insert...Values 语法。这一点跟传统的 SQL 很像,也更容易获取数据。 注意:对于大型表的数据加载,我们不建议使用 INSERT..VALUES. 相反的,使用 Load DATA 语句或者 INSERT INTO...select 或者 Create Table AS SELECT 。。语句可以更高效的将文件移到你在 HDFS 目录中。前两个选项会将文件 move 到表的 HDFS 目录,后两个会并行 Load 数据。
[sql] view plain copy
- INSERT INTO stocks_parquet_internal
- VALUES ("YHOO","2000-01-03",442.9,477.0,429.5,475.0,38469600,118.7);
Parquet 是一种柱状存储格式,所有在查询中选择更少的列会让查询执行更快。我们应该尽量避免以下这种查询方式:
[delphi] view plain copy
- SELECT * FROM stocks;
当然,我们也可以在 Hive 中使用 Parquet 数据存储格式,具体应用介绍请参考:Hive_1. 数据存储 & 压缩