kylin-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lid...@apache.org
Subject svn commit: r1755142 [1/2] - in /kylin/site: blog/2016/08/ blog/2016/08/01/ blog/2016/08/01/count-distinct-in-kylin/ blog/2016/08/01/count-distinct-in-kylin/index.html blog/index.html feed.xml
Date Thu, 04 Aug 2016 06:02:20 GMT
Author: lidong
Date: Thu Aug  4 06:02:20 2016
New Revision: 1755142

URL: http://svn.apache.org/viewvc?rev=1755142&view=rev
Log:
add blog 'count distinct in kylin'

Added:
    kylin/site/blog/2016/08/
    kylin/site/blog/2016/08/01/
    kylin/site/blog/2016/08/01/count-distinct-in-kylin/
    kylin/site/blog/2016/08/01/count-distinct-in-kylin/index.html
Modified:
    kylin/site/blog/index.html
    kylin/site/feed.xml

Added: kylin/site/blog/2016/08/01/count-distinct-in-kylin/index.html
URL: http://svn.apache.org/viewvc/kylin/site/blog/2016/08/01/count-distinct-in-kylin/index.html?rev=1755142&view=auto
==============================================================================
--- kylin/site/blog/2016/08/01/count-distinct-in-kylin/index.html (added)
+++ kylin/site/blog/2016/08/01/count-distinct-in-kylin/index.html Thu Aug  4 06:02:20 2016
@@ -0,0 +1,347 @@
+<!--
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+-->
+<!doctype html>
+<html>
+	<!--
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+-->
+
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+
+  <title>Apache Kylin | Use Count Distinct in Apache Kylin</title>
+  <meta name="description" content="Since v.1.5.3">
+  <meta name="author"      content="Apache Kylin">
+  <link rel="shortcut icon" href="fav.png" type="image/png">
+
+
+
+<link rel="stylesheet" href="/assets/css/animate.css">
+<!-- Bootstrap -->
+<link rel="stylesheet" href="/assets/css/bootstrap.min.css">
+
+<!-- Fonts -->
+<!-- <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Alice|Open+Sans:400,300,700">
-->
+
+<!-- Icons -->
+<link rel="stylesheet" href="/assets/css/font-awesome.min.css">
+
+  <!-- Custom styles -->
+  <link rel="stylesheet" href="/assets/css/styles.css">
+  <link rel="stylesheet" href="/assets/css/docs.css">
+  <link rel="stylesheet" href="/assets/css/pygments.css">
+
+  <link rel="canonical" href="http://kylin.apache.org/blog/2016/08/01/count-distinct-in-kylin/">
+  <link rel="alternate" type="application/rss+xml" title="Apache Kylin" href="http://kylin.apache.org/feed.xml"
/>
+
+<!--[if lt IE 9]> <script src="assets/js/html5shiv.js"></script> <![endif]-->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+  //oringal tracker for kylin.io
+  ga('create', 'UA-55534813-1', 'auto');
+  //new tracker for kylin.apache.org
+  ga('create', 'UA-55534813-2', 'auto', {'name':'toplevel'});
+
+  ga('send', 'pageview');
+  ga('toplevel.send', 'pageview');
+
+
+</script>
+<script type="text/javascript" src="/assets/js/jquery-1.9.1.min.js"></script>
+<script type="text/javascript" src="/assets/js/nside.js"></script> </script>
+<script type="text/javascript" src="/assets/js/nnav.js"></script> </script>
+</head>
+
+	<body>
+		<!--
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+-->
+
+<header id="header" >
+  
+  <div id="head" class="parallax" parallax-speed="3" >
+    <div id="logo" class="text-center"> <img class="img-circle" id="circlelogo"
src="/assets/images/kylin_logo.jpg"> <span class="title" >Apache Kylin™</span>
<span class="tagline">Extreme OLAP Engine for Big Data</span> 
+    </div>
+  </div>
+  
+
+  <!-- Main Menu -->
+  <nav class="navbar navbar-default" role="navigation" id="nav-wrapper">
+  <div class="container-fluid" id="nav">
+    <!--
+    <img class="img-circle" width="40px" height="40px" id="circlelogo" src="/assets/images/kylin_logo.jpg">
+    -->
+    <!-- Brand and toggle get grouped for better mobile display -->
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+        <span class="sr-only">Toggle navigation</span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+     
+    </div>
+
+    <!-- Collect the nav links, forms, and other content for toggling -->
+    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+      <ul class="nav navbar-nav">
+     <li><a href="/">Home</a></li>
+          <li><a href="/docs15" >Docs</a></li>
+          <li><a href="/download">Download</li>
+          <li><a href="/community" >Community</a></li>
+          <li><a href="/development" >Development</a></li>
+          <li><a href="/blog">Blog</li>
+          <li><a href="/cn" >中文版</a></li>  
+          <li><a href="https://twitter.com/apachekylin" target="_blank" class="fa
fa-twitter fa-lg" title="Twitter: @ApacheKylin" ></a></li>
+          <li><a href="https://github.com/apache/kylin" target="_blank" class="fa
fa-github-alt fa-lg" title="Github: apache/kylin" ></a></li>          
+          <li><a href="https://www.facebook.com/kylinio" target="_blank" class="fa
fa-facebook fa-lg" title="Facebook: kylin.io" ></a></li>   
+      </ul>      
+    </div><!-- /.navbar-collapse -->
+  </div><!-- /.container-fluid -->
+</nav>
+ </header>
+
+		<div class="page-content">
+			<header style=" padding:2em 0 0 0">
+			<div class="container" >
+				<h4 class="section-title"><span>Apache Kylin™ Technical Blog</span></h4>
+			</div>
+		</div>
+
+		<div class="container">
+			<div>
+				<article class="post-content" >	
+				<!--
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+-->
+
+<div class="post" style=" padding:2em 4em 4em 4em">
+
+  <header class="post-header">
+    <h1 class="post-title">Use Count Distinct in Apache Kylin</h1>
+    <p class="post-meta" >Aug 1, 2016 • Yerui Sun</p>
+  </header>
+
+  <article class="post-content" >
+    <p>Since v.1.5.3</p>
+
+<h2 id="background">Background</h2>
+<p>Count Distinct is a commonly measure in OLAP analyze, usually used for uv, etc.
Apache Kylin offers two kinds of count distinct, approximately and precisely, differs on resource
and performance.</p>
+
+<h2 id="approximately-count-distinct">Approximately Count Distinct</h2>
+<p>Apache Kylin implements approximately count distinct using HyperLogLog algorithm,
offered serveral precision, with the error rates from 9.75% to 1.22%. <br />
+The result of measure has theorically upper limit in size, as 2^N bytes. For the max precision
N=16, the upper limit is 64KB, and the max error rate is 1.22%. <br />
+This implementation’s pros is fast caculating and storage resource saving, but can’t
be used for precisely requirements.</p>
+
+<h2 id="precisely-count-distinct">Precisely Count Distinct</h2>
+<p>Apache Kylin also implements precisely count distinct based on bitmap. For the data
with type tiny int(byte), small int(short) and int, project the value into the bitmap directly.
For the data with type long, string and others, encode the value as String into a dict, and
project the dict id into the bitmap.<br />
+The result of measure is the serialized data of bitmap, not just the count value. This makes
sure that the rusult is always right with any roll-up, even across segments.<br />
+This implementation’s pros is precesily result, without error, but needs more storage
resources. One result size maybe hundreds of MB, when the count distinct value over millions.</p>
+
+<h2 id="global-dictionary">Global Dictionary</h2>
+<p>Apache Kylin encode value into dictionay at the segment level by default. That means
one same value in different segments maybe encoded into different id, which means the result
of precisely count distinct maybe not correct.<br />
+We introduced Global Dictionary with ensurance that one same value always encode into same
id in different segments, to resolve this problem. Meanwhile, the capacity of dict has expanded
dramatically, upper to support 2G values in one dict. It can also be used to replace default
dictionary which has 5M values limitation.<br />
+Current version has no UI for global dictionary yet, and the cube desc json shoule be modified
to enable it:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>"dictionaries":
[
+    {
+          "column": "SUCPAY_USERID",
+	  "reuse": "USER_ID",
+          "builder": "org.apache.kylin.dict.GlobalDictionaryBuilder"
+    }
+]
+</code></pre>
+</div>
+
+<p>The <code class="highlighter-rouge">column</code> means the column which
to be encoded, the <code class="highlighter-rouge">builder</code> specifies the
dictionary builder, only <code class="highlighter-rouge">org.apache.kylin.dict.GlobalDictionaryBuilder</code>
is available for now.<br />
+The ‘reuse` is used to optimize the dict of more than one columns based on one dataset,
please refer the next section ‘Example’ for more details.<br />
+The global dictionay can’t be used for dimensiion encoding for now, that means if one
column is used for dimension and count distinct measure in one cube, the dimension encoding
should be others but not dict.</p>
+
+<h2 id="example">Example</h2>
+<p>Here’s some example data:<br />
+| DT           | USER_ID | FLAG1 | FLAG2 | USER_ID_FLAG1 | USER_ID_FLAG2 |<br />
+| :———-: | :——: | :—: | :—: | :————-:
| :————-: |<br />
+| 2016-06-08   | AAA      | 1     | 1     | AAA             | AAA             |<br />
+| 2016-06-08   | BBB      | 1     | 1     | BBB             | BBB             |<br />
+| 2016-06-08   | CCC      | 0     | 1     | NULL            | CCC             |<br />
+| 2016-06-09   | AAA      | 0     | 1     | NULL            | AAA             |<br />
+| 2016-06-09   | CCC      | 1     | 0     | CCC             | NULL            |<br />
+| 2016-06-10   | BBB      | 0     | 1     | NULL            | BBB             |</p>
+
+<p>There’s basic columns <code class="highlighter-rouge">DT</code>,
<code class="highlighter-rouge">USER_ID</code>, <code class="highlighter-rouge">FLAG1</code>,
<code class="highlighter-rouge">FLAG2</code>, and condition columns <code class="highlighter-rouge">USER_ID_FLAG1=if(FLAG1=1,USER_ID,null)</code>,
<code class="highlighter-rouge">USER_ID_FLAG2=if(FLAG2=1,USER_ID,null)</code>.
Supposed the cube is builded by day, has 3 segments.</p>
+
+<p>Without the global dictionay, the precisely count distinct in semgent is correct,
but the roll-up acrros segments result is wrong. Here’s an example:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>select count(distinct
user_id_flag1) from table where dt in ('2016-06-08', '2016-06-09')
+</code></pre>
+</div>
+<p>The result is 2 but not 3. The reason is that the dict in 2016-06-08 segment is
AAA=&gt;1, BBB=&gt;1, and the dict in 2016-06-09 segment is CCC=&gt; 1.<br
/>
+With global dictionary config as below, the dict became as AAA=&gt;1, BBB=&gt;2,
CCC=&gt;3, that will procude correct result.<br />
+<code class="highlighter-rouge">
+"dictionaries": [
+    {
+      "column": "USER_ID_FLAG1",
+      "builder": "org.apache.kylin.dict.GlobalDictionaryBuilder"
+    }
+]
+</code></p>
+
+<p>Actually, the data of USER_ID_FLAG1 and USER_ID_FLAG2 both are a subset of USER_ID
dataset, that made the dictionary re-using possible. Just encode the USER_ID dataset, and
config USER_ID_FLAG1 and USER_ID_FLAG2 resue USER_ID dict:<br />
+<code class="highlighter-rouge">
+"dictionaries": [
+    {
+      "column": "USER_ID",
+      "builder": "org.apache.kylin.dict.GlobalDictionaryBuilder"
+    },
+    {
+      "column": "USER_ID_FLAG1",
+      "reuse": "USER_ID",
+      "builder": "org.apache.kylin.dict.GlobalDictionaryBuilder"
+    },
+    {
+      "column": "USER_ID_FLAG2",
+      "reuse": "USER_ID",
+      "builder": "org.apache.kylin.dict.GlobalDictionaryBuilder"
+    }
+]
+</code></p>
+
+<h2 id="performance-tunning">Performance Tunning</h2>
+<p>When using global dictionary and the dictionary is large, the step ‘Build Base
Cuboid Data’ may took long time. That mainly caused by the dictionary cache loading and
eviction cost, since the dictionary size is bigger than mapper memory size. To solve this
problem, overwrite the cube configuration as following, adjust the mapper size to 8GB:<br
/>
+<code class="highlighter-rouge">
+kylin.job.mr.config.override.mapred.map.child.java.opts=-Xmx8g
+kylin.job.mr.config.override.mapreduce.map.memory.mb=8500
+</code></p>
+
+<h2 id="conclusions">Conclusions</h2>
+<p>Here’s some basically pricipal to decide which kind of count distinct will
be used:<br />
+ - If the result with error rate is acceptable, approximately way is always an better way<br
/>
+ - If you need precisely result, the only way is precisely count distinct<br />
+ - If you don’t need roll-up across segments, or the column data type is tinyint/smallint/int,
or the values count is less than 5M, just use default dictionary; otherwise the global dictionary
should be configured, and consider the reuse column optimization</p>
+
+  </article>
+
+</div>
+
+
+
+
+
+				</article>
+			</div>
+		</div>		
+		<!--
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+-->
+
+<footer id="underfooter">
+    <div class="container">
+        <div class="row">
+            <div class="col-md-12 widget">
+                <div class="widget-body" style="text-align:center">
+                    <a href="http://www.apache.org">
+                        <img id="asf-logo" alt="Apache Software Foundation" src="/assets/images/feather-small.gif">
+                    </a>
+
+                    <div>
+                        The contents of this website are © 2015 Apache Software Foundation
under the terms of the <a
+                            href="http://www.apache.org/licenses/LICENSE-2.0"> Apache
License v2 </a>. Apache Kylin and
+                        its logo are trademarks of the Apache Software Foundation.
+                    </div>
+
+                </div>
+            </div>
+        </div>
+        <!-- /row of widgets -->
+
+    </div>
+    <div></div>
+
+</footer>
+
+	<script src="/assets/js/jquery-1.9.1.min.js"></script> 
+	<script src="/assets/js/bootstrap.min.js"></script> 
+	<script src="/assets/js/main.js"></script>
+	</body>
+</html>
+
+
+
+

Modified: kylin/site/blog/index.html
URL: http://svn.apache.org/viewvc/kylin/site/blog/index.html?rev=1755142&r1=1755141&r2=1755142&view=diff
==============================================================================
--- kylin/site/blog/index.html (original)
+++ kylin/site/blog/index.html Thu Aug  4 06:02:20 2016
@@ -174,6 +174,12 @@
             
             <li>
         <h2 align="left" style="margin:0px">
+          <a class="post-link" href="/blog/2016/08/01/count-distinct-in-kylin/">Use
Count Distinct in Apache Kylin</a></h2><div align="left" class="post-meta">posted:
Aug 1, 2016</div>
+        
+      </li>
+    
+            <li>
+        <h2 align="left" style="margin:0px">
           <a class="post-link" href="/cn/blog/2016/07/28/release-v1.5.3/">Apache Kylin
v1.5.3 正式发布</a></h2><div align="left" class="post-meta">posted:
Jul 28, 2016</div>
         
       </li>
@@ -204,25 +210,25 @@
     
             <li>
         <h2 align="left" style="margin:0px">
-          <a class="post-link" href="/cn/blog/2016/05/26/release-v1.5.2/">Apache Kylin
v1.5.2 正式发布</a></h2><div align="left" class="post-meta">posted:
May 26, 2016</div>
+          <a class="post-link" href="/blog/2016/05/26/release-v1.5.2/">Apache Kylin
v1.5.2 Release Announcement</a></h2><div align="left" class="post-meta">posted:
May 26, 2016</div>
         
       </li>
     
             <li>
         <h2 align="left" style="margin:0px">
-          <a class="post-link" href="/blog/2016/05/26/release-v1.5.2/">Apache Kylin
v1.5.2 Release Announcement</a></h2><div align="left" class="post-meta">posted:
May 26, 2016</div>
+          <a class="post-link" href="/cn/blog/2016/05/26/release-v1.5.2/">Apache Kylin
v1.5.2 正式发布</a></h2><div align="left" class="post-meta">posted:
May 26, 2016</div>
         
       </li>
     
             <li>
         <h2 align="left" style="margin:0px">
-          <a class="post-link" href="/blog/2016/04/12/release-v1.5.1/">Apache Kylin
v1.5.1 Release Announcement</a></h2><div align="left" class="post-meta">posted:
Apr 12, 2016</div>
+          <a class="post-link" href="/cn/blog/2016/04/12/release-v1.5.1/">Apache Kylin
v1.5.1 正式发布</a></h2><div align="left" class="post-meta">posted:
Apr 12, 2016</div>
         
       </li>
     
             <li>
         <h2 align="left" style="margin:0px">
-          <a class="post-link" href="/cn/blog/2016/04/12/release-v1.5.1/">Apache Kylin
v1.5.1 正式发布</a></h2><div align="left" class="post-meta">posted:
Apr 12, 2016</div>
+          <a class="post-link" href="/blog/2016/04/12/release-v1.5.1/">Apache Kylin
v1.5.1 Release Announcement</a></h2><div align="left" class="post-meta">posted:
Apr 12, 2016</div>
         
       </li>
     
@@ -270,37 +276,37 @@
     
             <li>
         <h2 align="left" style="margin:0px">
-          <a class="post-link" href="/blog/2015/12/25/support-powerbi-tableau9/">Apache
Kylin supports Tableau 9 and MS Excel, Power BI now</a></h2><div align="left"
class="post-meta">posted: Dec 25, 2015</div>
+          <a class="post-link" href="/cn/blog/2015/12/25/support-powerbi-tableau9/">Apache
Kylin增加对Tableau 9及微软Excel, Power BI的支持</a></h2><div
align="left" class="post-meta">posted: Dec 25, 2015</div>
         
       </li>
     
             <li>
         <h2 align="left" style="margin:0px">
-          <a class="post-link" href="/cn/blog/2015/12/25/support-powerbi-tableau9/">Apache
Kylin增加对Tableau 9及微软Excel, Power BI的支持</a></h2><div
align="left" class="post-meta">posted: Dec 25, 2015</div>
+          <a class="post-link" href="/blog/2015/12/25/support-powerbi-tableau9/">Apache
Kylin supports Tableau 9 and MS Excel, Power BI now</a></h2><div align="left"
class="post-meta">posted: Dec 25, 2015</div>
         
       </li>
     
             <li>
         <h2 align="left" style="margin:0px">
-          <a class="post-link" href="/cn/blog/2015/12/23/release-v1.2/">Apache Kylin
v1.2 正式发布</a></h2><div align="left" class="post-meta">posted:
Dec 23, 2015</div>
+          <a class="post-link" href="/blog/2015/12/23/release-v1.2/">Apache Kylin v1.2
Release Announcement</a></h2><div align="left" class="post-meta">posted:
Dec 23, 2015</div>
         
       </li>
     
             <li>
         <h2 align="left" style="margin:0px">
-          <a class="post-link" href="/blog/2015/12/23/release-v1.2/">Apache Kylin v1.2
Release Announcement</a></h2><div align="left" class="post-meta">posted:
Dec 23, 2015</div>
+          <a class="post-link" href="/cn/blog/2015/12/23/release-v1.2/">Apache Kylin
v1.2 正式发布</a></h2><div align="left" class="post-meta">posted:
Dec 23, 2015</div>
         
       </li>
     
             <li>
         <h2 align="left" style="margin:0px">
-          <a class="post-link" href="/blog/2015/10/25/release-v1.1-incubating/">Apache
Kylin v1.1 (incubating) Release Announcement</a></h2><div align="left" class="post-meta">posted:
Oct 25, 2015</div>
+          <a class="post-link" href="/cn/blog/2015/10/25/release-v1.1-incubating/">Apache
Kylin v1.1 (incubating) 正式发布</a></h2><div align="left"
class="post-meta">posted: Oct 25, 2015</div>
         
       </li>
     
             <li>
         <h2 align="left" style="margin:0px">
-          <a class="post-link" href="/cn/blog/2015/10/25/release-v1.1-incubating/">Apache
Kylin v1.1 (incubating) 正式发布</a></h2><div align="left"
class="post-meta">posted: Oct 25, 2015</div>
+          <a class="post-link" href="/blog/2015/10/25/release-v1.1-incubating/">Apache
Kylin v1.1 (incubating) Release Announcement</a></h2><div align="left" class="post-meta">posted:
Oct 25, 2015</div>
         
       </li>
     



Mime
View raw message