Modified: kylin/site/feed.xml
URL: 
http://svn.apache.org/viewvc/kylin/site/feed.xml?rev=1891875&r1=1891874&r2=1891875&view=diff
==============================================================================
--- kylin/site/feed.xml (original)
+++ kylin/site/feed.xml Thu Jul 29 14:22:05 2021
@@ -19,11 +19,108 @@
     <description>Apache Kylin Home</description>
     <link>http://kylin.apache.org/</link>
     <atom:link href="http://kylin.apache.org/feed.xml"; rel="self" 
type="application/rss+xml"/>
-    <pubDate>Wed, 21 Jul 2021 20:26:08 -0700</pubDate>
-    <lastBuildDate>Wed, 21 Jul 2021 20:26:08 -0700</lastBuildDate>
+    <pubDate>Thu, 29 Jul 2021 06:59:11 -0700</pubDate>
+    <lastBuildDate>Thu, 29 Jul 2021 06:59:11 -0700</lastBuildDate>
     <generator>Jekyll v2.5.3</generator>
     
       <item>
+        <title>Apache kylin4 新架构分享</title>
+        <description>&lt;p&gt;这篇文章主要分为以下几
个部分:&lt;br /&gt;
+- Apache Kylin 使用场景&lt;br /&gt;
+- Apache Kylin 基本原理&lt;br /&gt;
+- Apache Kylin 查询基本流程&lt;br /&gt;
+- Kylin On HBase&lt;br /&gt;
+- Kylin On Parquet&lt;/p&gt;
+
+&lt;h2 id=&quot;apache-kylin-&quot;&gt;01 Apache Kylin 使用场景&lt;/h2&gt;
+&lt;p&gt;&lt;img src=&quot;/images/blog/kylin4_cn/1kylinUseSec.jpg&quot; 
alt=&quot;&quot; /&gt;&lt;br /&gt;
+Apache Kylin™ 是一个开源的分布式分析引擎,提供 Hadoop/Spark 
之上的 SQL 查询接口及多维分析(OLAP)能力以支持超
大规模数据,最初由 eBay Inc 
开发并贡献至开源社区,它能在亚秒内查询巨大的 Hive 
表。&lt;/p&gt;
+
+&lt;p&gt;作为一个 SQL 加速层,Kylin 
可以下接各种数据源,例如 Hive/Kafka,上接各种 BI 
系统,比如 Tableau,PowerBI,也可以直接进行 Ad hoc 
的查询。&lt;/p&gt;
+
+&lt;p&gt;如果你们的产品/业务方找到你,说有一批查询太æ…
¢äº†å¸Œæœ›èƒ½å¤ŸåŠ 
速,要求查询速度要快;查询并发要高;资源占
用要少;完整支持 SQL 语法并且能够无缝集成 
BI,然后又没有更多的机器给你,那么这个时候你
可以考虑使用 Apache Kylin。&lt;/p&gt;
+
+&lt;h2 id=&quot;apache-kylin--1&quot;&gt;02 Apache Kylin 
基本原理&lt;/h2&gt;
+&lt;p&gt;&lt;img src=&quot;/images/blog/kylin4_cn/2CubeCacu.jpg&quot; 
alt=&quot;&quot; /&gt;&lt;br /&gt;
+&lt;img src=&quot;/images/blog/kylin4_cn/3CubeCacu.jpg&quot; alt=&quot;&quot; 
/&gt;&lt;br /&gt;
+Kylin 的核心思想是预计算,将数据按照指定的维度和指æ 
‡ï¼Œé¢„先计算出所有可能的查询结果,利用空间换时间来加
速查询模式固定的 OLAP 查询。&lt;/p&gt;
+
+&lt;p&gt;Kylin 的理论基础是 Cube 理论,每一种维度组合称之为 
Cuboid,所有 Cuboid 的集合是 Cube。其中由所有维度组成的 
Cuboid 称为 Base Cuboid,图中(time,item,location,supplier)即为 
Base Cuboid,所有的 Cuboid 都可以基于 Base Cuboid 
计算出来。Cuboid  我们可以理解为就是一张
预计算过后的大宽表,在查询时,Kylin 
会自动选择满足条件的最合适的 
Cuboid,比如上图的查询就会去找Cuboid(time,item,location),相比于从用户的原始表进行计算,从
 Cuboid 取数
 据进行计算能极大的降低扫描的数据量和计算量。&lt;/p&gt;
+
+&lt;h2 id=&quot;apache-kylin--2&quot;&gt;03 Apache Kylin 
查询基本流程&lt;/h2&gt;
+&lt;p&gt;&lt;img src=&quot;/images/blog/kylin4_cn/4QueryProgress.jpg&quot; 
alt=&quot;&quot; /&gt;&lt;br /&gt;
+下面来简单介绍下 Kylin 查询的基本原理,前三步是所有 
Query engine 的常规操作,我们这边借助了 Apache Calcite 
框架来完成这个操作,网上相å…
³çš„资料有很多这里不做过多展开,感兴趣的读者
可以自行查阅。&lt;/p&gt;
+
+&lt;p&gt;这边介绍重点在最后两步:Kylin 适配和 Query 
执行。为什么要做 Kylin 适配?因
为我们前面得到的查询计划是直接æ 
¹æ®ç”¨æˆ·çš„æŸ¥è¯¢è½¬åŒ–来的,这个查询计划不能直接查询预计算过的数据,这里需要
 rewrite 
这个执行计划,使得它可以查询预计算过后的数据(也就是Cube数据),来看下面的例子:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/images/blog/kylin4_cn/5QueryProgress.jpg&quot; 
alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;用户有一张商品访问表(stock),其中 Item 
商品,user_id 
表示商品被哪个用户访问过,用户希望分析商品的 
PV。用户定义了一个 Cube,维度是 
item,度量是COUNT(user_id),用户如果想分析商品的 
PV,会发出如下的 SQL:&lt;br /&gt;
+&lt;code class=&quot;highlighter-rouge&quot;&gt;SELECT item,COUNT(user_id) 
FROM stock GROUP BY item;&lt;/code&gt;&lt;br /&gt;
+这条 SQL 发给 Kylin 后,Kylin 
不能直接的用它原始的语义去查我们的 Cube 数据,这是因
为的数据经过预计算后,每个 item 的 key 
只会存在一行数据,原始表中相同 item key 
的行已经被提前聚合掉了,生成了一列新的 measure 
列,存放每个 item key 有多少 user_id 访问,所以 rewrite 的 SQL 
会类似这样:&lt;br /&gt;
+&lt;code class=&quot;highlighter-rouge&quot;&gt;SELECT item,SUM(M_C) FROM 
stockGROUP BY item;&lt;/code&gt;&lt;/p&gt;
+
+&lt;p&gt;为什么这里还会有一步 SUM/ GROUP BY 
的操作,而不是直接取出数据直接返回就 OK 了呢?因
为可能查询击中的 Cuboid 不止 item 
一个维度,即击中的不是最精确的 
Cuboid,所以还需从这些维度中再聚合一次,但是部分聚合的数据量相比起用户原始表中的数据,还是减少了非常多的数据量和计算。并且如果查询精确的命中Cuboid,我们是可以直接跳过
 Agg/GROUP BY 的流程,如下图:&lt;br /&gt;
+&lt;img src=&quot;/images/blog/kylin4_cn/6QueryProgress.jpg&quot; 
alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;上图是无预计算的场景,全部需要现场计算,Agg 和 
Join 因为都会牵涉到 shuffle 操作,故
当数据量很大的时候,性能就会比较差,同时也会占
用更多的资源,这也会影响查询的并发。&lt;br /&gt;
+&lt;img src=&quot;/images/blog/kylin4_cn/7QueryProgress.jpg&quot; 
alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;而进行了预计算过后,原来最耗时的两步操作 Agg/Join 
在后面改写过的执行计划上都消失了(Cuboid 精准匹é…
ï¼‰ï¼Œç”šè‡³æ›´è¿›ä¸€æ­¥ï¼Œæˆ‘们在定义 cube 的时候还可以选择按 
order by 的列进行排序,那么 Sort 
操作也不用计算,整个的计算只是一个 stage,没有一次 
shuffle,启动很少的 task 
就可以完成计算,查询的并发度也能够提高。&lt;/p&gt;
+
+&lt;h2 id=&quot;kylin-on-hbase&quot;&gt;04 Kylin On HBase&lt;/h2&gt;
+&lt;p&gt;#### 基本原理&lt;br /&gt;
+&lt;img src=&quot;/images/blog/kylin4_cn/8KylinOnHbase.jpg&quot; 
alt=&quot;&quot; /&gt;&lt;br /&gt;
+在目前开源版本的实现中,构建完的数据是存储在 HBase 
中的,在上面小节中,我们得到了一个能够查询 Cube 
数据的逻辑执行计划,Calcite 框架会æ 
¹æ®è¿™ä¸ªé€»è¾‘执行计划生成对应的物理执行计划,最终每个算子都会通过代ç
 ç”Ÿæˆç”Ÿæˆè‡ªå·±ç®—子的可执行代ç 
ï¼Œè¿™ä¸ªè¿‡ç¨‹æ˜¯ä¸€ä¸ªè¿­ä»£å™¨æ¨¡åž‹ï¼Œæ•°æ®ä»Žæœ€åº•层的 TableScan 
算子向上游算子流动,整个过程就像火山喷发一样,故又名 
Volcano Iterator Mode。而这个 TableScan ç
 ”Ÿæˆçš„代码会从 HBase 中取出 Cube 数据,当数据返回到 Kylin 
的 Query Server 端之后,再被上层的算子一层层消费。&lt;/p&gt;
+
+&lt;h4 id=&quot;kylin-on-hbase-&quot;&gt;Kylin On HBase 瓶颈&lt;/h4&gt;
+&lt;p&gt;&lt;img src=&quot;/images/blog/kylin4_cn/9KylinOnHbase.jpg&quot; 
alt=&quot;&quot; /&gt;&lt;br /&gt;
+这套方案对于简单的 SQL 并没有什么大问题,因为在精确匹é…
 Cuboid 的情况下,从 HBase 取回数据后,在 Kylin Query Server 
端并不会做太多计算,但当一些比较复杂的查询,例如一句查询
 join 了两个子查询,每个子查询都命中了各自的 
cube,并在最外层做一些比较复杂的 Aggregate 操作,比如 COUNT 
DISTINCT 等,在这种情况下,Kylin Query Server 端不仅要从 
HBase拉回大量的数据,并且还要在 Kylin Query Server 端计算 
Join/Aggregate 等非常耗时耗资源的
 操作,当数据量变大,Kylin 的Query Server 端就可能会 
OOM,解决的方式是提高 Query Server 端的内
存,但这是个垂直扩容的过程,这就成了一个单点瓶颈,而大数据方案中存在单点瓶颈,是一个非常严重的问题,可能直接导致å
…¬å¸åœ¨æž¶æž„选型的时候一键 pass 掉这个方案。&lt;/p&gt;
+
+&lt;p&gt;另外这套方案在使用中还有很多其他的局限:&lt;br 
/&gt;
+- 例如 HBase 的运维是出了名的难,一旦 HBase 
性能不好,那么可想而知 Kylin 的性能也不会好。&lt;br /&gt;
+- HBase 
的资源隔离能力也比较弱,当某个时刻有比较大的负载的时候,å
…¶ä»–使用 HBase 的业务也会受到影响,体现到 Kylin 
可能会是查询的性能比较不稳定,benchmark 
会有毛刺,解释起来比较麻烦并且需要集群 metric 
的支持,对前线人员要求比较高。&lt;br /&gt;
+- HBase 里存储的都是经过编码后的 Byte Array 
类型,序列化反序列化的开销也不能忽视。而对于我们开发人员来说,Calcite
 代码生成比较难以调试,并且我们 HBase 的技能æ 
‘修的比较少,想对 HBase 做源ç 
çº§åˆ«çš„æ€§èƒ½æ”¹è¿›ä¹Ÿæ¯”较困难。&lt;/p&gt;
+
+&lt;h2 id=&quot;kylin-on-parquet&quot;&gt;05 Kylin On Parquet&lt;/h2&gt;
+&lt;p&gt;&lt;img src=&quot;/images/blog/kylin4_cn/10KylinOnParquet.jpg&quot; 
alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;由于上述 Kylin on HBase 方案的诸多局限性,我们å…
¬å¸å¾ˆæ—©çš„æ—¶å€™å°±åœ¨å•†ä¸šç‰ˆæœ¬ä¸­ç ”发新一代基于 Spark + Parquet 
的方案用以替代开源的方案。下面介绍下该方案的整体架构:&lt;/p&gt;
+
+&lt;p&gt;其实整体来说,新的设计非常简洁:使用 visitor 
模式遍历之前生成的能够查询 Cube 数据的逻辑执行计划æ 
‘,执行计划树的节点代表一个算子,里面其实无
非就是保存了一些信息,比如要扫哪个表,要 filter/project 
哪些列等等。将原来树上的每一个算子都翻译成一个 Spark 
对于 Dataframe 
的一个操作,每个上游节点都问自己的下游节点它处理完之后的一个
 DF,一直到最下游的TableScan节点,由它生成初始ç�
 �„ DF,可以简单理解成 cuboidDF= 
spark.read.parquet(path),得到初始的 
DF之后,向它的上游返回,上游节点再对这个下游的 DF apply 
上自己的操作,再返回给自己的上游,最后最上层节点对这个
 DF 进行 collect 
就触发了整个计算流程。这套框架的思想很简单,不过中间 
Calcite 和 Spark 的 gap 
的坑比我们想象的要多一些,比如数据类型/两边支持函/行为定义不一致等等。后期我们也有打算替换
 Calcite 为 Catalyst,整套的架构会更加精�
 �‡´è‡ªç„¶ã€‚&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/images/blog/kylin4_cn/11KylinOnParquet.jpg&quot; 
alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;这一套 Kylin On Parquet 的方案,依托了 Spark:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;
+    
&lt;p&gt;所有计算都是分布式的,不存在单点瓶颈,可以通过横向扩容提高系统的计算能力;&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;资源调度有各种方案可以选择:Yarn/K8S/ 
Mesos,满足企业对于资源隔离的需求;&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;Spark 
在性能方面的努力可以天然享受到,上文提到 Kylin On HBase 
的序列化反序列化开销,就可以由 Spark 的 Tungsten  
项目进行优化;&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;减少了 HBase 
的依赖,带来了运维极大的方便,所有上下游依赖可以由 
Spark 帮我们搞定,减少了自己的依赖,也方便上云;&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;对于开发人员来讲,可以对每个算子生成的 DF 
直接进行进行 
collect,观察数据在这一层有没有出现问题,并且 Spark + 
Parquet 是目前非常流行的 SQL On Hadoop 
方案,我们团队对这两个项目也比较熟悉,维护了一个自己的
 Spark 和 Parquet 
分支,在上面进行了很多针对于我们特定场景的性能优化和稳定性提升的工作。&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ul&gt;
+</description>
+        <pubDate>Thu, 29 Jul 2021 08:00:00 -0700</pubDate>
+        
<link>http://kylin.apache.org/blog/2021/07/29/kylin-on-parquet-new-architecture-share/</link>
+        <guid 
isPermaLink="true">http://kylin.apache.org/blog/2021/07/29/kylin-on-parquet-new-architecture-share/</guid>
+        
+        
+        <category>blog</category>
+        
+      </item>
+    
+      <item>
         <title>Apache Kylin4 — A new storage and compute architecture</title>
         <description>&lt;p&gt;This article will discuss three aspects of 
Apache Kylin: First, we will briefly introduce query principles of Apache 
Kylin. Next, we will introduce Apache Parquet Storage, a project our team has 
been involved in that Kyligence is contributing back to the open source 
software community by the end of this year (2020). Finally, we will introduce 
the extensive use of precision count distinct by community users as well as its 
implementation in Kylin and some extensions.&lt;/p&gt;
 
@@ -1598,150 +1695,5 @@ From our users side, the most successful
         
       </item>
     
-      <item>
-        <title>Saiku + Kylin 搭建多维 OLAP 平台</title>
-        <description>&lt;p&gt;随着数据量的激增,传统的 OLTP 
平台已无法满足用户的分析需求。OLAP 平台应运而生,OLAP 
平台通常由 OLAP Engine 与用户操作分析页面组成。本文将会以 
Saiku + Kylin 的组合方式讲解多维 OLAP 平台的搭建。&lt;/p&gt;
-
-&lt;h3 id=&quot;saiku-&quot;&gt;Saiku 简介&lt;/h3&gt;
-&lt;p&gt;Saiku 是一个用于 OLAP 
分析的套件。用户可在浏览器中通过拖拽的方式进行分析。降低了使用è€
…的学习成本。它能够连接多种数据源,如 Microsoft SQL Server, 
Oracle Database, MySQL, MongoDB 等。&lt;br /&gt;
-Saiku 支持两种连接方式:一是 Mondrian,二是 XMLA。&lt;br /&gt;
-Mondrian 是一个开源的商务分析引擎。使用 
MDX(MultiDimensionalExpressions) 完成多维查询。&lt;br /&gt;
-XMLA(XML for Analysis)是一种基于简单对象访问协议(SOAP)的 
XML 协议。&lt;/p&gt;
-
-&lt;h3 id=&quot;kylin-&quot;&gt;Kylin 简介&lt;/h3&gt;
-&lt;p&gt;Kylin 是一个基于 Hadoop 的 OLAP 
引擎,可查询分析历史与实时数据,并在亚秒级返回查询结果。&lt;/p&gt;
-
-&lt;h3 id=&quot;section&quot;&gt;前期准备&lt;/h3&gt;
-&lt;ul&gt;
-  &lt;li&gt;安装 JAVA 并设置 JAVA_HOME&lt;/li&gt;
-  &lt;li&gt;从 &lt;a 
href=&quot;https://community.meteorite.bi/&quot;&gt;Saiku 
社区&lt;/a&gt;下载 Saiku 最新版本&lt;/li&gt;
-  &lt;li&gt;从 &lt;a 
href=&quot;http://kylin.apache.org/download/&quot;&gt;Kylin 
官网&lt;/a&gt;下载 Kylin 最新版本,即 2.6.2&lt;/li&gt;
-  &lt;li&gt;在 Kylin v2.6.2 中构建一个 Cube&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h3 id=&quot;saiku--kylin&quot;&gt;连接 Saiku 到 Kylin&lt;/h3&gt;
-&lt;p&gt;1.执行 &lt;code class=&quot;highlighter-rouge&quot;&gt;unzip 
saiku-latest.zip&lt;/code&gt; 解压下载好的 Saiku 包,切换至 
saiku-server 文件夹。解压下载好的 Kylin 包,进å…
¥è§£åŽ‹åŽæ–‡ä»¶å¤¹ï¼Œå°† lib/kylin-jdbc-&lt;version&gt;.jar 拷贝至 
saiku-server/tomcat/webapps/saiku/WEB-INF/lib&lt;/version&gt;&lt;/p&gt;
-
-&lt;p&gt;2.在 saiku-server 文件夹下执行 &lt;code 
class=&quot;highlighter-rouge&quot;&gt;./start-saiku.sh&lt;/code&gt; 
命令启动 Saiku,启动后可在浏览器中输入 http://localhost:8080 
访问 Saiku 页面。默认端口为 8080,可在 
saiku-server/tomcat/conf/server.xml 中进行修改。&lt;br /&gt;
-&lt;img src=&quot;/images/blog/saiku/start.png&quot; alt=&quot;&quot; 
/&gt;&lt;/p&gt;
-
-&lt;p&gt;3.访问 https://licensing.meteorite.bi/login 
进行注册并登录。&lt;/p&gt;
-
-&lt;p&gt;4.登录后,先创建公司(必须),再创建 
License,Hostname 为启动 Saiku 的机器 IP。创建完成后,下载 
License 到本地。&lt;br /&gt;
-&lt;img src=&quot;/images/blog/saiku/license.png&quot; alt=&quot;&quot; 
/&gt;&lt;/p&gt;
-
-&lt;p&gt;5.访问 http://localhost:8080/upload.html 上传 License。上传
所需用户名与密码均为 admin&lt;/p&gt;
-
-&lt;p&gt;6.访问 http://localhost:8080 进行登录,用户名密码均为 
admin。如果不执行上述 3-5 
步骤,直接登录将会报如下错。&lt;/p&gt;
-
-&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;Error fetching license. Get a free 
license from http://licensing.meteorite.bi. You can upload it at /upload.html
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;7.登录后,点击管理控制台,即顶部导航栏最右边包
含 A 的图标。然后点击 Add Schema,添加 Mondrian Schema 的 XML 
文件和 Schema Name,最后点击 Upload 按钮,显示 Upload Successful! 
即可。XML 文件由自己编写,官方提供两个参考样例 
Earthquakes.xml 和 FoodMart4.xml,在 saiku-server/data 目录下。å…
·ä½“语法可参考&lt;a 
href=&quot;https://mondrian.pentaho.com/documentation/schema.php&quot;&gt;这个网站&lt;/a&gt;&lt;br
 /&gt;
-&lt;img src=&quot;/images/blog/saiku/add_schema.png&quot; alt=&quot;&quot; 
/&gt;&lt;br /&gt;
-如下为本次使用的示例 XML 文件。其中包含一张名为 
KYLIN_SALES 的表,包含 TRANS_ID,PART_DT,LSTG_FORMAT_NAME 这 3 
个维度和 1 个 SUM(PRICE) 度量。&lt;br /&gt;
-&lt;em&gt;注意&lt;/em&gt;:表(列)名大小写敏感,需与 Kylin 
中加载的数据源表(列)名称对应&lt;/p&gt;
-
-&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span 
class=&quot;cp&quot;&gt;&amp;lt;?xml version=&#39;1.0&#39;?&amp;gt;&lt;/span&gt;
-&lt;span class=&quot;nt&quot;&gt;&amp;lt;Schema&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;default&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;metamodelVersion=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;4.0&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
-    &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;PhysicalSchema&amp;gt;&lt;/span&gt;
-        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Table&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;KYLIN_SALES&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
-        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Table&amp;gt;&lt;/span&gt;
-         &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/PhysicalSchema&amp;gt;&lt;/span&gt;
-    &lt;span class=&quot;nt&quot;&gt;&amp;lt;Cube&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;kylin_sales_cube&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;defaultMeasure=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Sum PRICE&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
-    &lt;span class=&quot;nt&quot;&gt;&amp;lt;Dimensions&amp;gt;&lt;/span&gt;
-    &lt;span class=&quot;nt&quot;&gt;&amp;lt;Dimension&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Trans_id&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;table=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;KYLIN_SALES&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
-        &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;Attributes&amp;gt;&lt;/span&gt;
-            &lt;span class=&quot;nt&quot;&gt;&amp;lt;Attribute&lt;/span&gt; 
&lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Trans_id&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;keyColumn=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;TRANS_ID&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;hasHierarchy=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;true&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
-        &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/Attributes&amp;gt;&lt;/span&gt;
-    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Dimension&amp;gt;&lt;/span&gt;
-    &lt;span class=&quot;nt&quot;&gt;&amp;lt;Dimension&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;Date&quot;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;table=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;KYLIN_SALES&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
-        &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;Attributes&amp;gt;&lt;/span&gt;
-            &lt;span class=&quot;nt&quot;&gt;&amp;lt;Attribute&lt;/span&gt; 
&lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Order_date&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;keyColumn=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;PART_DT&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;hasHierarchy=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;true&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
-        &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/Attributes&amp;gt;&lt;/span&gt;
-    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Dimension&amp;gt;&lt;/span&gt;
-       &lt;span class=&quot;nt&quot;&gt;&amp;lt;Dimension&lt;/span&gt; 
&lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Trans_type&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;table=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;KYLIN_SALES&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
-        &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;Attributes&amp;gt;&lt;/span&gt;
-                       &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;Attribute&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Trans_type&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;keyColumn=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;LSTG_FORMAT_NAME&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;hasHierarchy=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;true&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
-        &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/Attributes&amp;gt;&lt;/span&gt;
-    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Dimension&amp;gt;&lt;/span&gt;
-    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Dimensions&amp;gt;&lt;/span&gt;
-    &lt;span class=&quot;nt&quot;&gt;&amp;lt;MeasureGroups&amp;gt;&lt;/span&gt;
-            &lt;span class=&quot;nt&quot;&gt;&amp;lt;MeasureGroup&lt;/span&gt; 
&lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;SUM&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;table=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;KYLIN_SALES&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
-                &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;Measures&amp;gt;&lt;/span&gt;
-                    &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;Measure&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Sum PRICE&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;column=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;PRICE&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;aggregator=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;sum&#39;&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;formatString=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Standard&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
-                &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/Measures&amp;gt;&lt;/span&gt;
-                  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;DimensionLinks&amp;gt;&lt;/span&gt;
-                    &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;FactLink&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;dimension=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Trans_id&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
-                    &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;FactLink&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;dimension=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Date&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
-                                       &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;FactLink&lt;/span&gt; &lt;span 
class=&quot;na&quot;&gt;dimension=&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&#39;Trans_type&#39;&lt;/span&gt;&lt;span 
class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
-                &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/DimensionLinks&amp;gt;&lt;/span&gt;
-            &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/MeasureGroup&amp;gt;&lt;/span&gt;
-        &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/MeasureGroups&amp;gt;&lt;/span&gt;
-&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Cube&amp;gt;&lt;/span&gt;
-&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Schema&amp;gt;&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;8.点击 Add Data Source,填写如下参数。&lt;/p&gt;
-
-&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;Name: Kylin_Demo
-Connection Type: Mondrian
-URL: jdbc:kylin://localhost:7070/{project_name}
-Schema: {mondrian_schema}
-JDBC Driver: org.apache.kylin.jdbc.Driver
-Username: {kylin_username} (Default: ADMIN)
-Password: {kylin_password} (Default: KYLIN)
-Security: (depend on your security setting)
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-&lt;p&gt;点击 Save 按钮保存。&lt;/p&gt;
-
-&lt;p&gt;9.点击 Home Tab;点击 Create a new query 进å…
¥æŸ¥è¯¢åˆ†æžé¡µé¢ã€‚&lt;br /&gt;
-&lt;img src=&quot;/images/blog/saiku/home.png&quot; alt=&quot;&quot; 
/&gt;&lt;/p&gt;
-
-&lt;p&gt;10.点击选择多维数据集下拉框,选择刚刚创建好的 
Kylin 数据源。&lt;br /&gt;
-&lt;img src=&quot;/images/blog/saiku/mul_datasets.png&quot; alt=&quot;&quot; 
/&gt;&lt;/p&gt;
-
-&lt;p&gt;11.通过拖拽的方式选择维度和度量进行分析。结果以表æ
 ¼å½¢å¼å±•示,可在页面右边切换图表模式。&lt;br /&gt;
-&lt;img src=&quot;/images/blog/saiku/query_result.png&quot; alt=&quot;&quot; 
/&gt;&lt;br /&gt;
-上图所示拖拽方式会首先转换为 MDX 发送给 Mondrian,Mondrian 
会将其转换为 SQL 发送给 Kylin,Kylin 查找可回答该 SQL 语句的 
Cube,将查询结果返回给 Mondrian,再由 Mondrian 返回给 Saiku 
进行展示。上图所示方式生成的 SQL 语句如下:&lt;/p&gt;
-
-&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;select 
&quot;KYLIN_SALES&quot;.&quot;TRANS_ID&quot; as &quot;c0&quot;, 
&quot;KYLIN_SALES&quot;.&quot;LSTG_FORMAT_NAME&quot; as &quot;c1&quot;, 
sum(&quot;KYLIN_SALES&quot;.&quot;PRICE&quot;) as &quot;m0&quot; from 
&quot;KYLIN_SALES&quot; as &quot;KYLIN_SALES&quot; group by 
&quot;KYLIN_SALES&quot;.&quot;TRANS_ID&quot;, 
&quot;KYLIN_SALES&quot;.&quot;LSTG_FORMAT_NAME&quot;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;h3 id=&quot;section-1&quot;&gt;常见问题&lt;/h3&gt;
-&lt;ol&gt;
-  &lt;li&gt;
-    &lt;p&gt;tomcat 启动报错。java.lang.IllegalStateException: Unable to 
complete the scan for annotations for web application [] due to a 
StackOverflowError. Possible root causes include a too low setting for -Xss and 
illegal cyclic inheritance dependencies. The class hierarchy being processed 
was 
[org.bouncycastle.asn1.ASN1EncodableVector-&amp;gt;org.bouncycastle.asn1.DEREncodableVector-&amp;gt;org.bouncycastle.asn1.ASN1EncodableVector]&lt;br
 /&gt;
-解决方案:在 saiku-server/tomcat/conf/catalina.properties 中的 
tomcat.util.scan.DefaultJarScanner.jarsToSkip=\ 后加,*&lt;/p&gt;
-  &lt;/li&gt;
-  &lt;li&gt;
-    &lt;p&gt;选择 schema 后,指æ 
‡å’Œç»´åº¦ä¸æ˜¾ç¤ºã€‚日志中报如下错:java.lang.NoClassDefFoundError: 
mondrian/olap/LevelType&lt;br /&gt;
-解决方案:解压 saiku-server/tomcat/webapps/saiku/WEB-INF/lib 下的 
saiku-query-0.4-SNAPSHOT.jar,删除 mondrain 文件夹后重新打包
,并替换原有 jar 包。&lt;/p&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;h3 id=&quot;section-2&quot;&gt;参考文献&lt;/h3&gt;
-&lt;ul&gt;
-  &lt;li&gt;https://saiku-documentation.readthedocs.io/en/latest/&lt;/li&gt;
-  &lt;li&gt;https://baike.baidu.com/item/XMLA/8711067&lt;/li&gt;
-  &lt;li&gt;https://community.hitachivantara.com/docs/DOC-1009853&lt;/li&gt;
-  &lt;li&gt;https://www.jianshu.com/p/14b57d000fe5&lt;/li&gt;
-  &lt;li&gt;https://blog.csdn.net/csdn_g_y/article/details/78184747&lt;/li&gt;
-  
&lt;li&gt;https://blog.csdn.net/qq_28725695/article/details/84322821&lt;/li&gt;
-&lt;/ul&gt;
-</description>
-        <pubDate>Thu, 23 May 2019 08:00:00 -0700</pubDate>
-        
<link>http://kylin.apache.org/cn_blog/2019/05/23/saiku-kylin-molap/</link>
-        <guid 
isPermaLink="true">http://kylin.apache.org/cn_blog/2019/05/23/saiku-kylin-molap/</guid>
-        
-        
-        <category>cn_blog</category>
-        
-      </item>
-    
   </channel>
 </rss>

Added: kylin/site/images/blog/kylin4_cn/10KylinOnParquet.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/10KylinOnParquet.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/10KylinOnParquet.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/blog/kylin4_cn/11KylinOnParquet.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/11KylinOnParquet.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/11KylinOnParquet.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/blog/kylin4_cn/1kylinUseSec.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/1kylinUseSec.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/1kylinUseSec.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/blog/kylin4_cn/2CubeCacu.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/2CubeCacu.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/2CubeCacu.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/blog/kylin4_cn/3CubeCacu.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/3CubeCacu.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/3CubeCacu.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/blog/kylin4_cn/4QueryProgress.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/4QueryProgress.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/4QueryProgress.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/blog/kylin4_cn/5QueryProgress.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/5QueryProgress.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/5QueryProgress.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/blog/kylin4_cn/6QueryProgress.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/6QueryProgress.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/6QueryProgress.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/blog/kylin4_cn/7QueryProgress.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/7QueryProgress.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/7QueryProgress.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/blog/kylin4_cn/8KylinOnHbase.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/8KylinOnHbase.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/8KylinOnHbase.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/blog/kylin4_cn/9KylinOnHbase.jpg
URL: 
http://svn.apache.org/viewvc/kylin/site/images/blog/kylin4_cn/9KylinOnHbase.jpg?rev=1891875&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/blog/kylin4_cn/9KylinOnHbase.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream


Reply via email to