Impala 如何支持分区?

Posted

技术标签:

【中文标题】Impala 如何支持分区?【英文标题】:How does Impala support partitioning? 【发布时间】:2014-10-21 10:30:10 【问题描述】:

Impala 如何支持分区的概念,如果支持,Hive 分区和 Impala 分区有什么区别?

【问题讨论】:

cloudera.com/content/cloudera/en/documentation/cloudera-impala/… 【参考方案1】:

默认情况下,一个表的所有数据文件都位于一个目录中。

分区是一种在加载期间根据一个或多个列的值对数据进行物理划分的技术,以加快测试这些列的查询。

例如,对于在 year 列上分区的 school_records 表,每个不同的年份值都有一个单独的数据目录,并且该年份的所有数据都存储在该目录中的数据文件中。包含 WHERE 条件(例如 YEAR=1966、YEAR IN (1989,1999) 或 YEAR BETWEEN 1984 AND 1989 的查询)可以仅检查相应目录中的数据文件,从而大大减少要读取和测试的数据量.

静态和动态分区

在 SQL 语句中指定所有分区列称为“静态分区”,因为该语句影响单个可预测分区。例如,您将静态分区与仅影响一个分区的 ALTER TABLE 语句或将所有值插入同一分区的 INSERT 语句一起使用:

insert into t1 partition(x=10, y='a') select c1 from some_other_table;

当您在 INSERT 语句中指定了一些分区键列,但省略了值时,Impala 会确定要插入哪个分区 这种技术称为 “动态分区” em>

insert into t1 partition(x, y='b') select c1, c2 from some_other_table;

必要时根据可变年月日创建新分区;插入单个值。

插入天气分区(年、月、日)选择'cloudy',2014,4,21;

如有必要,为指定的年月创建新分区,但日期可变;插入单个值。

插入天气分区(年=2014,月=04,日)选择'晴天',22;

您在 PARTITION 子句中指定的键列越多,SELECT 列表中所需的列就越少。 SELECT 列表中的尾随列按顺序替换为没有指定值的分区键列。

您可以参考this link进一步阅读。

希望有帮助!

【讨论】:

以上是关于Impala 如何支持分区?的主要内容,如果未能解决你的问题,请参考以下文章

如何查看 impala 表中的分区数

Impala分区表

Impala - 替换表分区中的所有数据

通过分区控制 Impala 中的数据局部性

带 hdfs 的 Impala 分区表

Impala 分区查询运行缓慢