Impala如何支持分区的概念,如果它支持它,Hive分区和Impala分区之间有什么区别?
答案 0 :(得分:0)
默认情况下,表的所有数据文件都位于单个目录中。
分区是一种在加载期间根据来自一列或多列的值物理划分数据的技术,以加速测试这些列的查询。
例如,对于在year列上分区的school_records表,每个不同年份值都有一个单独的数据目录,该年份的所有数据都存储在该目录中的数据文件中。包含WHERE条件(如YEAR = 1966,YEAR IN(1989,1999)或YEAR BETWEEN 1984和1989)的查询只能检查相应目录中的数据文件,从而大大减少了要读取和测试的数据量。
静态和动态分区
在SQL语句中指定所有分区列称为 "静态分区" ,因为该语句会影响单个可预测分区。例如,您将静态分区与仅影响一个分区的 ALTER TABLE 语句一起使用,或者使用 INSERT 语句将所有值插入同一分区:
插入t1分区(x = 10,y =' a')从some_other_table中选择c1;
当您在 INSERT 语句中指定一些分区键列但忽略值时,Impala会确定要插入的分区此技术称为 "动态分区& #34; 强>:
插入t1分区(x,y =' b')从some_other_table中选择c1,c2;
根据变量年,月和日,根据需要创建新分区;插入单个值。
插入天气分区(年,月,日)选择'多云',2014,4,21;
如果需要,为指定的年份和月份创建新分区,但是变量日;插入单个值。
插入天气分区(年= 2014年,月= 04,天)选择“晴天”,22;
在 PARTITION 子句中指定的键列越多,SELECT列表中需要的列越少。将替换SELECT列表中的尾随列,以使分区键列没有指定值。
您可以参考this link进一步阅读。
希望有所帮助!