文档详情

基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(三).doc

发布:2017-05-21约1.94万字共16页下载文档
文本预览下载声明
基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(三) 三、Impala OLAP实例 本节使用前面销售订单的例子说明如何使用Impala做OLAP类型的查询,以及实际遇到的问题及解决方案。为了处理SCD和行级更新,我们前面的ETL使用了Hive ORCFile格式的表,可惜到目前为止,Impala还不支持ORCFile。用Impala查询ORCFile表时,错误信息如下图所示。 这是一个棘手的问题。如果我们再建一套和dw库中表结构一样的表,但使用Impala能够识别的文件类型,如Parquet,又会引入两个新的问题:一是CDH 5.7.0的Hive版本是1.1.0,有些数据类型不支持,如date。另一个更大的问题是增量装载数据问题。dw库的维度表和事实表都有update操作,可Impala只支持数据装载,不支持update和delete等DML操作。如果每天都做insert overwrite覆盖装载全部数据,对于大数据量来说很不现实。 尽管Impala不支持update语句,但通过使用HBase作为底层存储可是达到同样的效果。相同键值的数据被插入时,会自动覆盖原有的数据行。这样只要在每天定期ETL时,记录当天产生变化(包括修改和新增)的记录,只将这些记录插入到Impala表中,就可以实现增量数据装载。这个方案并不完美,毕竟冗余了一套数据,既浪费空间,又增加了ETL的额外工作。其实前面ETL的Hive表也可以使用HBase做底层存储而不用ORCFile文件类型,利用HBase的特性,既可以用Hive做ETL,又可以用Impala做OLAP,真正做到一套数据,多个引擎。这个方案也需要一些额外的工作,如安装HBase,配置Hive、Impala与HBase协同工作等,它最主要的问题是Impala在HBase上的查询性能并不适合OLAP场景。 如果没有累积快照事实表,可以对相对较小的维度表全量覆盖插入,而对大的事实表增量插入,这也是本实例中采用的方案。也就是说,为了保证查询性能和数据装载可行性,牺牲了对累积快照事实表的支持。希望Impala尽快支持ORCFile并能达到和Parquet同样的性能,这样就可以省却很多麻烦。 1. 建立olap库、表、视图 用下面的查询语句从MySQL的hive库生成建表文件: [sql] view plain copy 在CODE上查看代码片派生到我的代码片 use hive; select concat(create table , t1.tbl_name, (,group_concat(concat(t2.column_name, ,t2.type_name) order by eger_idx),) stored as parquet;) into outfile /data/hive/create_table.sql from (select t1.tbl_id, t1.tbl_name from TBLS t1, DBS t2 where t1.db_id = t2. db_id and = dw and tbl_type VIRTUAL_VIEW and (tbl_name like %dim or tbl_name like %fact)) t1, (select case when v.column_name = date then date1 else v.column_name end column_name, replace(v.type_name,date,timestamp) type_name, eger_idx, t.tbl_id from COLUMNS_V2 v, CDS c, SDS s, TBLS t where v.cd_id = c.cd_id and c.cd_id = s.cd_id and s.sd_id = t.sd_id) t2 where t1.tbl_id = t2.tbl_id group by t1.tbl_name; 生
显示全部
相似文档