大数据时代快速SQL引擎-Impala( 四 )

Impala除了支持简单类型之外 , 还支持String、timestamp、decimal等多种类型 , 用户还可以对于特殊的逻辑实现自定义函数(UDF)和自定义聚合函数(UDAF) , 前者可以使用Java和C++实现 , 后者目前仅支持C++实现 , 除此之外的schema操作都可以在Hive上实现 , 由于Impala的存储由HDFS实现 , 因此不能够实现update、delete语句 , 如果有此类需求 , 还是需要重新计算整个分区的数据并且覆盖老数据 , 这点对于修改的实时性要求比较高的需求还是不能满足的 , 如果有此类需求还是期待Kudu的支持吧 , 或者尝试一下传统的MPP数据库 , 例如GreenPlum 。

当完成数据导入之后 , 用户需要执行COMPUTE STATS

以收集和更新表的统计信息 , 这些统计信息对于CBO优化器提供数据支持 , 用于生成更优的物理执行计划 。 测试发现这个操作的速度还是比较快的 , 可以将其看做数据导入的一部分 , 另外需要注意的是这个语句不会自动执行 , 因此建议用户在load完数据之后手动的执行一次该命令 。

系统架构

从用户的使用方式上来看 , Impala和Hive还是很相似的 , 并且可以共享一份元数据 , 这也大大简化了接入流程 , 下面我们从实现的角度来看一下Impala是如何工作的 。 下图展示了Impala的系统架构和查询的执行流程 。

推荐阅读