SQL on Hadoop
DWS支持直接读取存储在Hadoop HDFS文件系统上的结构化数据,对外提供标准SQL语言查询接口,通过向量化引擎完成Hadoop原生数据的复杂分析查询工作。
技术架构
DWS将HDFS上存储的结构化数据映射为外部表,从而重用已有的成熟数据库SQL编译器和向量化执行引擎,对外提供标准SQL接口,完成HDFS上Hadoop原生数据的分析查询。
DWS的SQL编译器中引入了新的Scheduler(调度器)组件。在SQL编译时,如果有针对HDFS外表的访问,Scheduler组件会访问HDFS Name Node元数据信息,获得外表文件在HDFS上的存储路径。CN的SQL引擎在编译查询语句时,将会调用Scheduler获得并指定每个DN将要访问的HDFS文件的具体路径。
HDFS外表数据文件在DN间的分配原则是:
- 首先以本地读为主任务分配策略。
- 其次考虑DN之间的任务负载均衡。
技术特点
- 支持标准SQL查询语法
完全继承GaussDB(DWS)的SQL查询语法的支持,实现HDFS分布式文件系统上的结构化数据分析查询,支持连接、聚合、字符日期等系统函数,支持子查询以及HDFS结构化数据和GaussDB(DWS)本地数据的联合访问,支持窗口函数等。
- 针对HDFS数据的代价估算模型
在GaussDB(DWS)基于代价估算(Cost-based)的SQL优化器中,增加了针对HDFS分布式文件系统上结构化数据访问的代价估算模型,从而可以制定HDFS数据的最优执行计划。
- 智能扫描
GaussDB(DWS)可以将适用的谓词条件直接下推到存储在HDFS上的Hadoop原生数据上,在压缩数据上进行谓词过滤,且针对Hadoop ORC(Optimized Row Columnar)列式存储实现后期物化(Late-materialization),从而显著减少HDFS数据读取。
- LLVM(Low Level Virtual Machine)优化
基于智能扫描,将下推到Hadoop原生数据上的适用谓词进行LLVM优化,使其谓词条件生成中间表示IR,最终生成与平台相关的机器码,进而提高谓词过滤及查询性能。
- 支持信息约束(Informational Constraint)
若表上的列具有唯一性特征,则在数据库中创建该表时指定对应列具有信息约束属性,在执行阶段利用该属性提供查询性能。
- 向量引擎
针对HDFS上存储的ORC列式结构化数据,直接对接GaussDB(DWS)已有成熟的向量化执行引擎,提升分析查询性能。
- 支持分区表
适配HDFS上依据Hive语法定义的分区表数据,由GaussDB(DWS) SQL优化器来实现自动的分区表访问的剪枝操作,提高分析查询性能。
- 分布式高效读取HDFS数据
GaussDB(DWS) SQL编译器引入Scheduler组件,来达到GaussDB(DWS) Data Nodes的HDFS数据访问负载均衡,并可以通过HDFS组件的本地读特性(short-circuit)来提升数据读取性能。