注:MaxCompute原名ODPS,是阿里云自研的大数据计算平台,文中出现的MaxCompute与ODPS都指代同一平台,不做区分
QlikView简介
QlikView是一款成熟的商业分析软件,作为QlikTech的旗舰产品,近几年逐渐成为了全球增长率最快的BI产品。MaxCompute作为一款有志于打造计算和数据生态的平台产品,实现与主流BI软件的连通性势在必行,本文将带领读者来一起看看如何打通QlikView访问MaxCompute的通路,并以此为基础完成简单的数据分析与可视化。
安装QlikView
QlikView目前只支持Windows系统,所以如果你是非Windows的用户,首先需要安装一个虚拟机来支持Windows系统。
准备好Windows系统之后,我们可以从官网下载QlikView的Personal Edition,该版本可供免费安装试用,但是在获得下载链接前,需要完成一次下载注册。
下载后的安装不作赘述。
两种连通方式
我们可以通过两种主流的标准方式来实现与QlikView的连通,它们分别是 JDBC与ODBC。就MaxCompute而言,这两种方式各有利弊,下文将一一阐述。
JDBC连接
首先,我们需要安装Java(version>=1.7), 这步不作赘述。
QlikView本身并不直接支持连接到JDBC数据源,需要借助一个外挂的连接器才可以。所以我们需要准备好两样东西,分别是
QlikView JDBCConnector
官方提供的外挂连接器,可以从这里下载JDBCConnector,解压后安装,默认试用期只有30天
ODPS的JDBC驱动包
ODPS的JDBC驱动实现,下载链接
接着,打开QlikView:
然后按CTRL+e,进入Script编辑器,在底部“Data”页中的“Database”项选择JDBCConnector对应的版本(比如我是64位的),然后点击“Configuration”按钮:
QlikView将打开JDBCConnector,我们先在“Java VM Options”页配置JVM,包括选择安装的JVM所在路径以及配置JVM启动参数:
然后切换到“JDBC Driver”页配置JDBC驱动,添加准备好的MaxCompute驱动Jar包:
切换到“Advanced Settings”页继续配置,此处MaxCompute的JDBC驱动类是com.aliyun.odps.jdbc.Driver:
然后点击OK完成配置。接着我们点击Connect按钮,在弹出框中输入JDBC URL,其中User和Password留空:
JDBC URL格式如下:
jdbc:odps:http://x.x.x.x:8100/api?project_name=odps_dev&access_id=123456&access_key=6789abc%3D&charset=utf-8
URL中的project_name、access_id和access_key等各项参数分别改成你自己的配置,http://x.x.x.x:8100/api 处改成对应的endpoint。其中有一点值得注意是,如果你的accessKey中含有=,需要事先转义成%3D(如上图所示),否则QlikView无法正常解析并传递该参数,会导致后续的请求报签名不一致的错误。
填写完后点击“Test”,如下图表示连接测试成功:
然后点击确定,你会看到Script编辑器中已经为你添加了相关的连接语句,然后继续添加类似如下的脚本:
line1 :表示连接到odps jdbc,由上一步骤自动生成
line4-line5 :执行你指定的SQL并将结果赋给data变量
line7:将data存到指定的qvd文件中
然后点击Reload按钮,会展示如下窗口,表示SQL正在执行中:
完成后会如下所示:
在相应的目录中已经可以找到保存好的qvd文件,自此我们已经完成了通过JDBC方式对MaxCompute的数据连通。下一次,我们可以直接打开该文件来进行结果数据的离线分析。
ODBC连接
由于MaxCompute通过HiveServer2 proxy完成了对Hive生态的兼容,所以我们可以利用Hive的ODBC数据源来为QlikView打通到MaxCompute的通路。
如何安装HiveServer2 Proxy及Hive ODBC驱动见这篇文章,本文不做赘述。
假设用户已经安装了某个Hive的ODBC驱动,我们首先去“控制面板”-“管理工具”设置ODBC数据源:
选择已经安装的Hive ODBC驱动,新建一个用户数据源:
然后按下图配置:
其中Host和Port填写与你HiveServer2 Proxy一致的配置,Database填写默认的project,User Name和Password可以分别填写root和1234,然后点击“Test”,如下显示表示连接测试成功:
然后点击“OK”完成配置。
打开QlikView,在左下角“Data”-“Database”选择“ODBC”,然后点击“Connect”,弹出后选择刚才配置的数据源,并点击“Test Connection”:
点击“OK”后,弹出如下窗口(如没有弹出,请点击“Connect”下方的“Select”按钮):
在第一次加载时,这个过程可能会比较慢,因为需要一次性从服务端获取你的meta数据,具体视你的带宽和表数量而定。HiveServer2 Proxy默认会针对这些数据进行缓存,即一次获取后会一直使用本地缓存,所以如果你在HiveServer2 Proxy运行过程中添加的新表,在QlikView中是无法看到的。有两种方式来解决这类问题。第一种是重启HiveServer2 Proxy,第二种是在启动HiveServer2 Proxy前在其配置文件conf/hive-site.xml中增加如下配置项来禁用缓存,但是这样的副作用就是每次点击都可能都需要从远端获取meta数据,造成操作的响应时间过慢。
<property>
<name>odps.enablecache</name>
<value>false</value>
</property>
等上述界面出现后,可以看到我们已经连接上MaxCompute,上图中“Database Tables”区域中罗列出了odps_dev这个project下的所有表,“Fields”选中表的所有可选字段。值得注意的是QlikView将我们的project放置于“Owner”字段处,而“Database”对应的值是“HIVE”,这与MaxCompute自身的概念是有所出入的,不过先不必在意,我们可以点击“OK”来为Script编辑器生成相应的SQL,如下图:
图中箭头所指向的“HIVE.” 这部分我们可以选择手动删除掉,刚才曾提到这是与MaxCompute有所出入的一个概念,但是HiveServer2 proxy也对此做了兼容。当然你也可以直接在这里编写任意符合MaxCompute语法的SQL,而不是通过刚才可视化选择的方式来生成SQL。编写完后,点击“Reload”完成脚本的执行:
至此,我们已经成功通过ODBC完成了QlikView到MaxCompute的连通。
数据分析与可视化
接着,我们来看看如何实现数据分析和可视化。当我们成功完成当前脚本的执行之后(也可以通过导入之前保存的QVD文件),数据便已经加载到QlikView中,可以点击如下菜单来进入“快速图表向导”为我们生成丰富的分析图表:
并在弹出窗口中依次选择图表的类型、维度、表达式及格式:
并最终可以生成类似如下的丰富的可视化图表,包含饼图、折线图等:
总结
本文的目的并不在于详细的讲述QlikView的各种功能特性与使用方式,如果对这块感兴趣的读者可以关注该产品的官方文档。笔者的目的主要还是带领读者熟悉两种QlikView打通MaxCompute数据通路的方式,它们分别是JDBC和ODBC。前者的优势是部署方便,性能也略好(因为是只连MaxCompute的),而其缺点则是QlikView JDBCConnector只有30天试用期,说到底并不算是可以长期免费使用的。而ODBC的优势是HiveServer2 proxy是永久免费的,而且这种方式可以以可视化的方式来生成SQL,但是需要你独立配置并部署该组件。
欢迎加入MaxCompute钉钉群讨论