You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2018/12/21 23:04:58 UTC

svn commit: r1849503 [3/5] - in /calcite/site: community/ docs/ downloads/ img/ news/ news/2014/06/27/release-0.8.0-incubating/ news/2014/08/19/release-0.9.0-incubating/ news/2014/10/02/release-0.9.1-incubating/ news/2014/11/05/release-0.9.2-incubating...

Modified: calcite/site/docs/lattice.html
URL: http://svn.apache.org/viewvc/calcite/site/docs/lattice.html?rev=1849503&r1=1849502&r2=1849503&view=diff
==============================================================================
--- calcite/site/docs/lattice.html (original)
+++ calcite/site/docs/lattice.html Fri Dec 21 23:04:58 2018
@@ -108,6 +108,17 @@
 and for recognizing that a materialized view can be used to solve a
 particular query.</p>
 
+<ul id="markdown-toc">
+  <li><a href="#concept" id="markdown-toc-concept">Concept</a></li>
+  <li><a href="#demonstration" id="markdown-toc-demonstration">Demonstration</a></li>
+  <li><a href="#statistics" id="markdown-toc-statistics">Statistics</a></li>
+  <li><a href="#lattice-suggester" id="markdown-toc-lattice-suggester">Lattice suggester</a></li>
+  <li><a href="#further-directions" id="markdown-toc-further-directions">Further directions</a></li>
+  <li><a href="#references" id="markdown-toc-references">References</a></li>
+</ul>
+
+<h2 id="concept">Concept</h2>
+
 <p>A lattice represents a star (or snowflake) schema, not a general
 schema. In particular, all relationships must be many-to-one, heading
 from a fact table at the center of the star.</p>
@@ -199,17 +210,218 @@ Examples:</p>
 </ul>
 
 <p>A “tile” is a materialized table in a lattice, with a particular
-dimensionality. (What Kylin calls a “cuboid”.) The “tiles” attribute
+dimensionality. The “tiles” attribute
 of the <a href="/docs/model.html#lattice">lattice JSON element</a>
 defines an initial set of tiles to materialize.</p>
 
-<p>If you run the algorithm, you can omit the tiles attribute. Calcite
-will choose an initial set. If you include the tiles attribute, the
-algorithm will start with that list and then start finding other tiles
-that are complementary (i.e. “fill in the gaps” left by the initial
-tiles).</p>
+<h2 id="demonstration">Demonstration</h2>
+
+<p>Create a model that includes a lattice:</p>
+
+<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
+  </span><span class="s2">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.0"</span><span class="p">,</span><span class="w">
+  </span><span class="s2">"defaultSchema"</span><span class="p">:</span><span class="w"> </span><span class="s2">"foodmart"</span><span class="p">,</span><span class="w">
+  </span><span class="s2">"schemas"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">{</span><span class="w">
+    </span><span class="s2">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jdbc"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"foodmart"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"jdbcUser"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FOODMART"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"jdbcPassword"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FOODMART"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"jdbcUrl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jdbc:hsqldb:res:foodmart"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"jdbcSchema"</span><span class="p">:</span><span class="w"> </span><span class="s2">"foodmart"</span><span class="w">
+  </span><span class="p">},</span><span class="w">
+  </span><span class="p">{</span><span class="w">
+    </span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"adhoc"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"lattices"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">{</span><span class="w">
+      </span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"star"</span><span class="p">,</span><span class="w">
+      </span><span class="s2">"sql"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
+        </span><span class="s2">"select 1 from </span><span class="se">\"</span><span class="s2">foodmart</span><span class="se">\"</span><span class="s2">.</span><span class="se">\"</span><span class="s2">sales_fact_1997</span><span class="se">\"</span><span class="s2"> as </span><span class="se">\"</span><span class="s2">s</span><span class="se">\"</span><span class="s2">"</span><span class="p">,</span><span class="w">
+        </span><span class="s2">"join </span><span class="se">\"</span><span class="s2">foodmart</span><span class="se">\"</span><span class="s2">.</span><span class="se">\"</span><span class="s2">product</span><span class="se">\"</span><span class="s2"> as </span><span class="se">\"</span><span class="s2">p</span><span class="se">\"</span><span class="s2"> using (</span><span class="se">\"</span><span class="s2">product_id</span><span class="se">\"</span><span class="s2">)"</span><span class="p">,</span><span class="w">
+        </span><span class="s2">"join </span><span class="se">\"</span><span class="s2">foodmart</span><span class="se">\"</span><span class="s2">.</span><span class="se">\"</span><span class="s2">time_by_day</span><span class="se">\"</span><span class="s2"> as </span><span class="se">\"</span><span class="s2">t</span><span class="se">\"</span><span class="s2"> using (</span><span class="se">\"</span><span class="s2">time_id</span><span class="se">\"</span><span class="s2">)"</span><span class="p">,</span><span class="w">
+        </span><span class="s2">"join </span><span class="se">\"</span><span class="s2">foodmart</span><span class="se">\"</span><span class="s2">.</span><span class="se">\"</span><span class="s2">product_class</span><span class="se">\"</span><span class="s2"> as </span><span class="se">\"</span><span class="s2">pc</span><span class="se">\"</span><span class="s2"> on </span><span class="se">\"</span><span class="s2">p</span><span class="se">\"</span><span class="s2">.</span><span class="se">\"</span><span class="s2">product_class_id</span><span class="se">\"</span><span class="s2"> = </span><span class="se">\"</span><span class="s2">pc</span><span class="se">\"</span><span class="s2">.</span><span class="se">\"</span><span class="s2">product_class_id</span><span class="se">\"</span><span class="s2">"</span><span class="w">
+      </span><span class="p">],</span><span class="w">
+      </span><span class="s2">"auto"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
+      </span><span class="s2">"algorithm"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
+      </span><span class="s2">"rowCountEstimate"</span><span class="p">:</span><span class="w"> </span><span class="mi">86837</span><span class="p">,</span><span class="w">
+      </span><span class="s2">"defaultMeasures"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">{</span><span class="w">
+        </span><span class="s2">"agg"</span><span class="p">:</span><span class="w"> </span><span class="s2">"count"</span><span class="w">
+      </span><span class="p">}</span><span class="w"> </span><span class="p">]</span><span class="w">
+    </span><span class="p">}</span><span class="w"> </span><span class="p">]</span><span class="w">
+  </span><span class="p">}</span><span class="w"> </span><span class="p">]</span><span class="w">
+</span><span class="p">}</span></code></pre></figure>
+
+<p>This is a cut-down version of
+<a href="https://github.com/apache/calcite/blob/master/core/src/test/resources/hsqldb-foodmart-lattice-model.json">hsqldb-foodmart-lattice-model.json</a>
+that does not include the “tiles” attribute, because we are going to generate
+tiles automatically. Let’s log into sqlline and connect to this schema:</p>
+
+<figure class="highlight"><pre><code class="language-sql" data-lang="sql"><span class="err">$</span> <span class="n">sqlline</span> <span class="k">version</span> <span class="mi">1</span><span class="p">.</span><span class="mi">3</span><span class="p">.</span><span class="mi">0</span>
+<span class="n">sqlline</span><span class="o">&gt;</span> <span class="o">!</span><span class="k">connect</span> <span class="n">jdbc</span><span class="p">:</span><span class="n">calcite</span><span class="p">:</span><span class="n">model</span><span class="o">=</span><span class="n">core</span><span class="o">/</span><span class="n">src</span><span class="o">/</span><span class="n">test</span><span class="o">/</span><span class="n">resources</span><span class="o">/</span><span class="n">hsqldb</span><span class="o">-</span><span class="n">foodmart</span><span class="o">-</span><span class="n">lattice</span><span class="o">-</span><span class="n">model</span><span class="p">.</span><span class="n">json</span> <span class="nv">"sa"</span> <span class="nv">""</span></code></pre></figure>
+
+<p>You’ll notice that it takes a few seconds to connect.
+Calcite is running the optimization algorithm, and creating and
+populating materialized views. Let’s run a query and check out its plan:</p>
+
+<figure class="highlight"><pre><code class="language-sql" data-lang="sql"><span class="n">sqlline</span><span class="o">&gt;</span> <span class="k">select</span> <span class="nv">"the_year"</span><span class="p">,</span><span class="nv">"the_month"</span><span class="p">,</span> <span class="k">count</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="k">as</span> <span class="k">c</span>
+<span class="p">.</span> <span class="p">.</span> <span class="p">.</span> <span class="p">.</span><span class="o">&gt;</span> <span class="k">from</span> <span class="nv">"sales_fact_1997"</span>
+<span class="p">.</span> <span class="p">.</span> <span class="p">.</span> <span class="p">.</span><span class="o">&gt;</span> <span class="k">join</span> <span class="nv">"time_by_day"</span> <span class="k">using</span> <span class="p">(</span><span class="nv">"time_id"</span><span class="p">)</span>
+<span class="p">.</span> <span class="p">.</span> <span class="p">.</span> <span class="p">.</span><span class="o">&gt;</span> <span class="k">group</span> <span class="k">by</span> <span class="nv">"the_year"</span><span class="p">,</span><span class="nv">"the_month"</span><span class="p">;</span>
+<span class="o">+</span><span class="c1">----------+-----------+------+</span>
+<span class="o">|</span> <span class="n">the_year</span> <span class="o">|</span> <span class="n">the_month</span> <span class="o">|</span>    <span class="k">C</span> <span class="o">|</span>
+<span class="o">+</span><span class="c1">----------+-----------+------+</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">September</span> <span class="o">|</span> <span class="mi">6663</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">April</span>     <span class="o">|</span> <span class="mi">6590</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">January</span>   <span class="o">|</span> <span class="mi">7034</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">June</span>      <span class="o">|</span> <span class="mi">6912</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">August</span>    <span class="o">|</span> <span class="mi">7038</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">February</span>  <span class="o">|</span> <span class="mi">6844</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">March</span>     <span class="o">|</span> <span class="mi">7710</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">October</span>   <span class="o">|</span> <span class="mi">6479</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">May</span>       <span class="o">|</span> <span class="mi">6866</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">December</span>  <span class="o">|</span> <span class="mi">8717</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">July</span>      <span class="o">|</span> <span class="mi">7752</span> <span class="o">|</span>
+<span class="o">|</span> <span class="mi">1997</span>     <span class="o">|</span> <span class="n">November</span>  <span class="o">|</span> <span class="mi">8232</span> <span class="o">|</span>
+<span class="o">+</span><span class="c1">----------+-----------+------+</span>
+<span class="mi">12</span> <span class="k">rows</span> <span class="n">selected</span> <span class="p">(</span><span class="mi">0</span><span class="p">.</span><span class="mi">147</span> <span class="n">seconds</span><span class="p">)</span>
+
+<span class="n">sqlline</span><span class="o">&gt;</span> <span class="k">explain</span> <span class="n">plan</span> <span class="k">for</span>
+<span class="p">.</span> <span class="p">.</span> <span class="p">.</span> <span class="p">.</span><span class="o">&gt;</span> <span class="k">select</span> <span class="nv">"the_year"</span><span class="p">,</span><span class="nv">"the_month"</span><span class="p">,</span> <span class="k">count</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="k">as</span> <span class="k">c</span>
+<span class="p">.</span> <span class="p">.</span> <span class="p">.</span> <span class="p">.</span><span class="o">&gt;</span> <span class="k">from</span> <span class="nv">"sales_fact_1997"</span>
+<span class="p">.</span> <span class="p">.</span> <span class="p">.</span> <span class="p">.</span><span class="o">&gt;</span> <span class="k">join</span> <span class="nv">"time_by_day"</span> <span class="k">using</span> <span class="p">(</span><span class="nv">"time_id"</span><span class="p">)</span>
+<span class="p">.</span> <span class="p">.</span> <span class="p">.</span> <span class="p">.</span><span class="o">&gt;</span> <span class="k">group</span> <span class="k">by</span> <span class="nv">"the_year"</span><span class="p">,</span><span class="nv">"the_month"</span><span class="p">;</span>
+<span class="o">+</span><span class="c1">--------------------------------------------------------------------------------+</span>
+<span class="o">|</span> <span class="n">PLAN</span>                                                                           <span class="o">|</span>
+<span class="o">+</span><span class="c1">--------------------------------------------------------------------------------+</span>
+<span class="o">|</span> <span class="n">EnumerableCalc</span><span class="p">(</span><span class="n">expr</span><span class="o">#</span><span class="mi">0</span><span class="p">..</span><span class="mi">2</span><span class="o">=</span><span class="p">[</span><span class="err">{</span><span class="n">inputs</span><span class="err">}</span><span class="p">],</span> <span class="n">the_year</span><span class="o">=</span><span class="p">[</span><span class="err">$</span><span class="n">t1</span><span class="p">],</span> <span class="n">the_month</span><span class="o">=</span><span class="p">[</span><span class="err">$</span><span class="n">t0</span><span class="p">],</span> <span class="k">C</span><span class="o">=</span><span class="p">[</span><span class="err">$</span><span class="n">t2</span><span class="p">])</span> <span class="o">|</span>
+<span class="o">|</span>   <span class="n">EnumerableAggregate</span><span class="p">(</span><span class="k">group</span><span class="o">=</span><span class="p">[</span><span class="err">{</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="err">}</span><span class="p">],</span> <span class="k">C</span><span class="o">=</span><span class="p">[</span><span class="err">$</span><span class="n">SUM0</span><span class="p">(</span><span class="err">$</span><span class="mi">7</span><span class="p">)])</span>                           <span class="o">|</span>
+<span class="o">|</span>     <span class="n">EnumerableTableScan</span><span class="p">(</span><span class="k">table</span><span class="o">=</span><span class="p">[[</span><span class="n">adhoc</span><span class="p">,</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span><span class="p">]])</span>        <span class="o">|</span>
+<span class="o">+</span><span class="c1">--------------------------------------------------------------------------------+</span></code></pre></figure>
+
+<p>The query gives the right answer, but plan is somewhat surprising.
+It doesn’t read the <code class="highlighter-rouge">sales_fact_1997</code> or <code class="highlighter-rouge">time_by_day</code> tables, but instead
+reads from a table called <code class="highlighter-rouge">m{16, 17, 27, 31, 32, 36, 37}</code>. This is one of the
+tiles created at the start of the connection.</p>
+
+<p>It’s a real table, and you can even query it directly. It has only 120 rows,
+so is a more efficient way to answer the query:</p>
+
+<figure class="highlight"><pre><code class="language-sql" data-lang="sql"><span class="n">sqlline</span><span class="o">&gt;</span> <span class="o">!</span><span class="k">describe</span> <span class="nv">"adhoc"</span><span class="p">.</span><span class="nv">"m{16, 17, 27, 31, 32, 36, 37}"</span>
+<span class="o">+</span><span class="c1">-------------+-------------------------------+--------------------+-----------+-----------------+</span>
+<span class="o">|</span> <span class="n">TABLE_SCHEM</span> <span class="o">|</span> <span class="k">TABLE_NAME</span>                    <span class="o">|</span> <span class="k">COLUMN_NAME</span>        <span class="o">|</span> <span class="n">DATA_TYPE</span> <span class="o">|</span> <span class="n">TYPE_NAME</span>       <span class="o">|</span>
+<span class="o">+</span><span class="c1">-------------+-------------------------------+--------------------+-----------+-----------------+</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span> <span class="o">|</span> <span class="n">recyclable_package</span> <span class="o">|</span> <span class="mi">16</span>        <span class="o">|</span> <span class="n">BOOLEAN</span>         <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span> <span class="o">|</span> <span class="n">low_fat</span>            <span class="o">|</span> <span class="mi">16</span>        <span class="o">|</span> <span class="n">BOOLEAN</span>         <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span> <span class="o">|</span> <span class="n">product_family</span>     <span class="o">|</span> <span class="mi">12</span>        <span class="o">|</span> <span class="n">VARCHAR</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>     <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span> <span class="o">|</span> <span class="n">the_month</span>          <span class="o">|</span> <span class="mi">12</span>        <span class="o">|</span> <span class="n">VARCHAR</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>     <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span> <span class="o">|</span> <span class="n">the_year</span>           <span class="o">|</span> <span class="mi">5</span>         <span class="o">|</span> <span class="n">SMALLINT</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span> <span class="o">|</span> <span class="n">quarter</span>            <span class="o">|</span> <span class="mi">12</span>        <span class="o">|</span> <span class="n">VARCHAR</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>     <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span> <span class="o">|</span> <span class="n">fiscal_period</span>      <span class="o">|</span> <span class="mi">12</span>        <span class="o">|</span> <span class="n">VARCHAR</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>     <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span> <span class="o">|</span> <span class="n">m0</span>                 <span class="o">|</span> <span class="o">-</span><span class="mi">5</span>        <span class="o">|</span> <span class="n">BIGINT</span> <span class="k">NOT</span> <span class="k">NULL</span> <span class="o">|</span>
+<span class="o">+</span><span class="c1">-------------+-------------------------------+--------------------+-----------+-----------------+</span>
+
+<span class="n">sqlline</span><span class="o">&gt;</span> <span class="k">select</span> <span class="k">count</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="k">as</span> <span class="k">c</span>
+<span class="p">.</span> <span class="p">.</span> <span class="p">.</span> <span class="p">.</span><span class="o">&gt;</span> <span class="k">from</span> <span class="nv">"adhoc"</span><span class="p">.</span><span class="nv">"m{16, 17, 27, 31, 32, 36, 37}"</span><span class="p">;</span>
+<span class="o">+</span><span class="c1">-----+</span>
+<span class="o">|</span>   <span class="k">C</span> <span class="o">|</span>
+<span class="o">+</span><span class="c1">-----+</span>
+<span class="o">|</span> <span class="mi">120</span> <span class="o">|</span>
+<span class="o">+</span><span class="c1">-----+</span>
+<span class="mi">1</span> <span class="k">row</span> <span class="n">selected</span> <span class="p">(</span><span class="mi">0</span><span class="p">.</span><span class="mi">12</span> <span class="n">seconds</span><span class="p">)</span></code></pre></figure>
+
+<p>Let’s list the tables, and you will see several more tiles. There are also
+tables of the <code class="highlighter-rouge">foodmart</code> schema, and the system tables <code class="highlighter-rouge">TABLES</code> and <code class="highlighter-rouge">COLUMNS</code>,
+and the lattice itself, which appears as a table called <code class="highlighter-rouge">star</code>.</p>
+
+<figure class="highlight"><pre><code class="language-sql" data-lang="sql"><span class="n">sqlline</span><span class="o">&gt;</span> <span class="o">!</span><span class="n">tables</span>
+<span class="o">+</span><span class="c1">-------------+-------------------------------+--------------+</span>
+<span class="o">|</span> <span class="n">TABLE_SCHEM</span> <span class="o">|</span> <span class="k">TABLE_NAME</span>                    <span class="o">|</span> <span class="n">TABLE_TYPE</span>   <span class="o">|</span>
+<span class="o">+</span><span class="c1">-------------+-------------------------------+--------------+</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span>         <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span> <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">4</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span>       <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">4</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span>       <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">7</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span>      <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">m</span><span class="err">{</span><span class="mi">7</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">37</span><span class="err">}</span>  <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">adhoc</span>       <span class="o">|</span> <span class="n">star</span>                          <span class="o">|</span> <span class="n">STAR</span>         <span class="o">|</span>
+<span class="o">|</span> <span class="n">foodmart</span>    <span class="o">|</span> <span class="n">customer</span>                      <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">foodmart</span>    <span class="o">|</span> <span class="n">product</span>                       <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">foodmart</span>    <span class="o">|</span> <span class="n">product_class</span>                 <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">foodmart</span>    <span class="o">|</span> <span class="n">promotion</span>                     <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">foodmart</span>    <span class="o">|</span> <span class="n">region</span>                        <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">foodmart</span>    <span class="o">|</span> <span class="n">sales_fact_1997</span>               <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">foodmart</span>    <span class="o">|</span> <span class="n">store</span>                         <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">foodmart</span>    <span class="o">|</span> <span class="n">time_by_day</span>                   <span class="o">|</span> <span class="k">TABLE</span>        <span class="o">|</span>
+<span class="o">|</span> <span class="n">metadata</span>    <span class="o">|</span> <span class="n">COLUMNS</span>                       <span class="o">|</span> <span class="n">SYSTEM_TABLE</span> <span class="o">|</span>
+<span class="o">|</span> <span class="n">metadata</span>    <span class="o">|</span> <span class="n">TABLES</span>                        <span class="o">|</span> <span class="n">SYSTEM_TABLE</span> <span class="o">|</span>
+<span class="o">+</span><span class="c1">-------------+-------------------------------+--------------+</span></code></pre></figure>
+
+<h2 id="statistics">Statistics</h2>
+
+<p>The algorithm that chooses which tiles of a lattice to materialize depends on
+a lot of statistics. It needs to know <code class="highlighter-rouge">select count(distinct a, b, c) from star</code>
+for each combination of columns (<code class="highlighter-rouge">a, b, c</code>) it is considering materializing. As
+a result the algorithm takes a long time on schemas with many rows and columns.</p>
+
+<p>We are working on a
+<a href="https://issues.apache.org/jira/browse/CALCITE-1616">data profiler</a>
+to address this.</p>
+
+<h2 id="lattice-suggester">Lattice suggester</h2>
+
+<p>If you have defined a lattice, Calcite will self-tune within that lattice.
+But what if you have not defined a lattice?</p>
+
+<p>Enter the Lattice Suggester, which builds lattices based on incoming queries.
+Create a model with a schema that has <code class="highlighter-rouge">"autoLattice": true</code>:</p>
+
+<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
+  </span><span class="s2">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.0"</span><span class="p">,</span><span class="w">
+  </span><span class="s2">"defaultSchema"</span><span class="p">:</span><span class="w"> </span><span class="s2">"foodmart"</span><span class="p">,</span><span class="w">
+  </span><span class="s2">"schemas"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">{</span><span class="w">
+    </span><span class="s2">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jdbc"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"foodmart"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"jdbcUser"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FOODMART"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"jdbcPassword"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FOODMART"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"jdbcUrl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jdbc:hsqldb:res:foodmart"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"jdbcSchema"</span><span class="p">:</span><span class="w"> </span><span class="s2">"foodmart"</span><span class="w">
+  </span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="w">
+    </span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"adhoc"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"autoLattice"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
+  </span><span class="p">}</span><span class="w"> </span><span class="p">]</span><span class="w">
+</span><span class="p">}</span></code></pre></figure>
+
+<p>This is a cut-down version of
+<a href="https://github.com/apache/calcite/blob/master/core/src/test/resources/hsqldb-foodmart-lattice-model.json">hsqldb-foodmart-lattice-model.json</a></p>
+
+<p>As you run queries, Calcite will start to build lattices based on those
+queries. Each lattice is based on a particular fact table. As it sees more
+queries on that fact table, it will evolve the lattice, joining more dimension
+tables to the star, and adding measures.</p>
+
+<p>Each lattice will then optimize itself based on both the data and the queries.
+The goal is to create summary tables (tiles) that are reasonably small but are
+based on more frequently used attributes and measures.</p>
+
+<p>This feature is still experimental, but has the potential to make databases
+more “self-tuning” than before.</p>
 
-<h3 id="references">References</h3>
+<h2 id="further-directions">Further directions</h2>
+
+<p>Here are some ideas that have not yet been implemented:</p>
+<ul>
+  <li>The algorithm that builds tiles takes into account a log of past queries.</li>
+  <li>Materialized view manager sees incoming queries and builds tiles for them.</li>
+  <li>Materialized view manager drops tiles that are not actively used.</li>
+  <li>Lattice suggester adds lattices based on incoming queries,
+transfers tiles from existing lattices to new lattices,
+and drops lattices that are no longer being used.</li>
+  <li>Tiles that cover a horizontal slice of a table; and a rewrite algorithm that
+can answer a query by stitching together several tiles and going to the raw
+data to fill in the holes.</li>
+  <li>API to invalidate tiles, or horizontal slices of tiles, when the underlying
+data is changed.</li>
+</ul>
+
+<h2 id="references">References</h2>
 
 <ul>
 <li>[<a name="ref-hru96">HRU96</a>] V. Harinarayan, A. Rajaraman and J. Ullman.
@@ -245,12 +457,15 @@ tiles).</p>
 
   
   
+
+  
+  
     <div class="section-nav">
       <div class="left align-right">
           
             
             
-            <a href="/docs/stream.html" class="prev">Previous</a>
+            <a href="/docs/materialized_views.html" class="prev">Previous</a>
           
       </div>
       <div class="right align-left">
@@ -352,6 +567,16 @@ tiles).</p>
 
   
 
+  <li class=""><a href="/docs/materialized_views.html">Materialized Views</a></li>
+
+
+  
+  
+  
+  
+
+  
+
   <li class="current"><a href="/docs/lattice.html">Lattices</a></li>
 
 
@@ -428,7 +653,7 @@ tiles).</p>
 
   
 
-  <li class=""><a href="/docs/model.html">JSON models</a></li>
+  <li class=""><a href="/docs/model.html">JSON/YAML models</a></li>
 
 
   

Modified: calcite/site/docs/materialized_views.html
URL: http://svn.apache.org/viewvc/calcite/site/docs/materialized_views.html?rev=1849503&r1=1849502&r2=1849503&view=diff
==============================================================================
--- calcite/site/docs/materialized_views.html (original)
+++ calcite/site/docs/materialized_views.html Fri Dec 21 23:04:58 2018
@@ -127,9 +127,9 @@
           </li>
         </ul>
       </li>
-      <li><a href="#references" id="markdown-toc-references">References</a></li>
     </ul>
   </li>
+  <li><a href="#references" id="markdown-toc-references">References</a></li>
 </ul>
 
 <h2 id="materialized-views-maintained-by-calcite">Materialized views maintained by Calcite</h2>
@@ -219,8 +219,8 @@ FROM depts
 JOIN (
   SELECT empid, deptno
   FROM emps
-  WHERE empid = 1) subq
-ON (depts.deptno = subq.deptno)
+  WHERE empid = 1) AS subq
+ON depts.deptno = subq.deptno
 </code></pre></div></div>
 
 <ul>
@@ -342,8 +342,8 @@ GROUP BY deptno
 
 <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SELECT deptname, state, SUM(salary) AS s
 FROM emps
-JOIN depts ON (emps.deptno = depts.deptno)
-JOIN locations ON (emps.locationid = locations.locationid)
+JOIN depts ON emps.deptno = depts.deptno
+JOIN locations ON emps.locationid = locations.locationid
 GROUP BY deptname, state
 </code></pre></div></div>
 
@@ -353,7 +353,7 @@ GROUP BY deptname, state
 
 <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SELECT empid, deptno, state, SUM(salary) AS s
 FROM emps
-JOIN locations ON (emps.locationid = locations.locationid)
+JOIN locations ON emps.locationid = locations.locationid
 GROUP BY empid, deptno, state
 </code></pre></div></div>
 
@@ -363,7 +363,7 @@ GROUP BY empid, deptno, state
 
 <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SELECT deptname, state, SUM(s)
 FROM mv
-JOIN depts ON (mv.deptno = depts.deptno)
+JOIN depts ON mv.deptno = depts.deptno
 GROUP BY deptname, state
 </code></pre></div></div>
 
@@ -375,7 +375,7 @@ GROUP BY deptname, state
 
 <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SELECT empid, deptname
 FROM emps
-JOIN depts ON (emps.deptno = depts.deptno)
+JOIN depts ON emps.deptno = depts.deptno
 WHERE salary &gt; 10000
 </code></pre></div></div>
 
@@ -385,7 +385,7 @@ WHERE salary &gt; 10000
 
 <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SELECT empid, deptname
 FROM emps
-JOIN depts ON (emps.deptno = depts.deptno)
+JOIN depts ON emps.deptno = depts.deptno
 WHERE salary &gt; 12000
 </code></pre></div></div>
 
@@ -398,7 +398,7 @@ FROM mv
 UNION ALL
 SELECT empid, deptname
 FROM emps
-JOIN depts ON (emps.deptno = depts.deptno)
+JOIN depts ON emps.deptno = depts.deptno
 WHERE salary &gt; 10000 AND salary &lt;= 12000
 </code></pre></div></div>
 
@@ -410,7 +410,7 @@ WHERE salary &gt; 10000 AND salary &lt;=
 
 <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SELECT empid, deptname, SUM(salary) AS s
 FROM emps
-JOIN depts ON (emps.deptno = depts.deptno)
+JOIN depts ON emps.deptno = depts.deptno
 WHERE salary &gt; 10000
 GROUP BY empid, deptname
 </code></pre></div></div>
@@ -421,7 +421,7 @@ GROUP BY empid, deptname
 
 <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SELECT empid, deptname, SUM(salary) AS s
 FROM emps
-JOIN depts ON (emps.deptno = depts.deptno)
+JOIN depts ON emps.deptno = depts.deptno
 WHERE salary &gt; 12000
 GROUP BY empid, deptname
 </code></pre></div></div>
@@ -432,14 +432,14 @@ GROUP BY empid, deptname
 
 <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SELECT empid, deptname, SUM(s)
 FROM (
-SELECT empid, deptname, s
-FROM mv
-UNION ALL
-SELECT empid, deptname, SUM(salary) AS s
-FROM emps
-JOIN depts ON (emps.deptno = depts.deptno)
-WHERE salary &gt; 10000 AND salary &lt;= 12000
-GROUP BY empid, deptname) subq
+  SELECT empid, deptname, s
+  FROM mv
+  UNION ALL
+  SELECT empid, deptname, SUM(salary) AS s
+  FROM emps
+  JOIN depts ON emps.deptno = depts.deptno
+  WHERE salary &gt; 10000 AND salary &lt;= 12000
+  GROUP BY empid, deptname) AS subq
 GROUP BY empid, deptname
 </code></pre></div></div>
 
@@ -447,7 +447,7 @@ GROUP BY empid, deptname
 
 <p>This rule still presents some limitations. In particular, the rewriting rule attempts to match all views against each query. We plan to implement more refined filtering techniques such as those described in [<a href="#ref-gl01">GL01</a>].</p>
 
-<h3 id="references">References</h3>
+<h2 id="references">References</h2>
 
 <ul>
 <li>[<a name="ref-gl01">GL01</a>] Jonathan Goldstein and Per-Ã¥ke Larson.
@@ -481,40 +481,26 @@ GROUP BY empid, deptname
 
   
   
+    <div class="section-nav">
+      <div class="left align-right">
+          
+            
+            
+            <a href="/docs/stream.html" class="prev">Previous</a>
+          
+      </div>
+      <div class="right align-left">
+          
+            
+            
 
-  
-  
-
-  
-  
-
-  
-  
-
-  
-  
-
-  
-  
-
-  
-  
-
-  
-  
-
-  
-  
-
-  
-  
-
-  
-  
-
-  
-  
-
+            
+            <a href="/docs/lattice.html" class="next">Next</a>
+          
+      </div>
+    </div>
+    <div class="clear"></div>
+    
 
         </article>
       </div>
@@ -602,6 +588,16 @@ GROUP BY empid, deptname
 
   
 
+  <li class="current"><a href="/docs/materialized_views.html">Materialized Views</a></li>
+
+
+  
+  
+  
+  
+
+  
+
   <li class=""><a href="/docs/lattice.html">Lattices</a></li>
 
 
@@ -678,7 +674,7 @@ GROUP BY empid, deptname
 
   
 
-  <li class=""><a href="/docs/model.html">JSON models</a></li>
+  <li class=""><a href="/docs/model.html">JSON/YAML models</a></li>
 
 
   

Modified: calcite/site/docs/model.html
URL: http://svn.apache.org/viewvc/calcite/site/docs/model.html?rev=1849503&r1=1849502&r2=1849503&view=diff
==============================================================================
--- calcite/site/docs/model.html (original)
+++ calcite/site/docs/model.html Fri Dec 21 23:04:58 2018
@@ -2,7 +2,7 @@
 <html lang="en-US">
 <head>
   <meta charset="UTF-8">
-  <title>JSON models</title>
+  <title>JSON/YAML models</title>
   <meta name="viewport" content="width=device-width,initial-scale=1">
   <meta name="generator" content="Jekyll v3.7.3">
   <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
@@ -99,12 +99,12 @@
 
       <div class="unit four-fifths">
         <article>
-          <h1>JSON models</h1>
+          <h1>JSON/YAML models</h1>
           <!--
 
 -->
 
-<p>Calcite models can be represented as JSON files.
+<p>Calcite models can be represented as JSON/YAML files.
 This page describes the structure of those files.</p>
 
 <p>Models can also be built programmatically using the <code class="highlighter-rouge">Schema</code> SPI.</p>
@@ -113,12 +113,21 @@ This page describes the structure of tho
 
 <h3 id="root">Root</h3>
 
+<h4 id="json">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">version</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="mf">1.0</span><span class="err">'</span><span class="p">,</span><span class="w">
   </span><span class="err">defaultSchema</span><span class="p">:</span><span class="w"> </span><span class="err">'mongo'</span><span class="p">,</span><span class="w">
   </span><span class="err">schemas</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="err">Schema...</span><span class="w"> </span><span class="p">]</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">version</span><span class="pi">:</span> <span class="s">1.0</span>
+<span class="na">defaultSchema</span><span class="pi">:</span> <span class="s">mongo</span>
+<span class="na">schemas</span><span class="pi">:</span>
+<span class="pi">-</span> <span class="pi">[</span><span class="nv">Schema...</span><span class="pi">]</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">version</code> (required string) must have value <code class="highlighter-rouge">1.0</code>.</p>
 
 <p><code class="highlighter-rouge">defaultSchema</code> (optional string). If specified, it is
@@ -131,6 +140,8 @@ become the default schema for connection
 
 <p>Occurs within <code class="highlighter-rouge">root.schemas</code>.</p>
 
+<h4 id="json-1">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'foodmart'</span><span class="p">,</span><span class="w">
   </span><span class="err">path</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="err">'lib'</span><span class="p">],</span><span class="w">
@@ -138,6 +149,15 @@ become the default schema for connection
   </span><span class="err">materializations</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="err">Materialization...</span><span class="w"> </span><span class="p">]</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-1">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">foodmart</span>
+<span class="na">path</span><span class="pi">:</span>
+  <span class="s">lib</span>
+<span class="na">cache</span><span class="pi">:</span> <span class="no">true</span>
+<span class="na">materializations</span><span class="pi">:</span>
+<span class="pi">-</span> <span class="pi">[</span> <span class="nv">Materialization...</span> <span class="pi">]</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code> (required string) is the name of the schema.</p>
 
 <p><code class="highlighter-rouge">type</code> (optional string, default <code class="highlighter-rouge">map</code>) indicates sub-type. Values are:</p>
@@ -153,8 +173,16 @@ resolve functions used in this schema. I
 and each element of the list must be either a string or a list of
 strings. For example,</p>
 
+<h4 id="json-2">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="w">  </span><span class="err">path</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">[</span><span class="err">'usr'</span><span class="p">,</span><span class="w"> </span><span class="err">'lib'</span><span class="p">],</span><span class="w"> </span><span class="err">'lib'</span><span class="w"> </span><span class="p">]</span></code></pre></figure>
 
+<h4 id="yaml-2">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">path</span><span class="pi">:</span>
+<span class="pi">-</span> <span class="pi">[</span><span class="nv">usr</span><span class="pi">,</span> <span class="nv">lib</span><span class="pi">]</span>
+<span class="pi">-</span> <span class="s">lib</span></code></pre></figure>
+
 <p>declares a path with two elements: the schema ‘/usr/lib’ and the
 schema ‘/lib’. Most schemas are at the top level, and for these you can use a
 string.</p>
@@ -193,6 +221,8 @@ immediately, and are never flushed.</p>
 
 <p>Like base class <a href="#schema">Schema</a>, occurs within <code class="highlighter-rouge">root.schemas</code>.</p>
 
+<h4 id="json-3">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'foodmart'</span><span class="p">,</span><span class="w">
   </span><span class="err">type</span><span class="p">:</span><span class="w"> </span><span class="err">'map'</span><span class="p">,</span><span class="w">
@@ -201,6 +231,17 @@ immediately, and are never flushed.</p>
   </span><span class="err">types</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="err">Type...</span><span class="w"> </span><span class="p">]</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-3">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">foodmart</span>
+<span class="na">type</span><span class="pi">:</span> <span class="s">map</span>
+<span class="na">tables</span><span class="pi">:</span>
+<span class="pi">-</span> <span class="pi">[</span> <span class="nv">Table...</span> <span class="pi">]</span>
+<span class="na">functions</span><span class="pi">:</span>
+<span class="pi">-</span> <span class="pi">[</span> <span class="nv">Function...</span> <span class="pi">]</span>
+<span class="na">types</span><span class="pi">:</span>
+<span class="pi">-</span> <span class="pi">[</span> <span class="nv">Type...</span> <span class="pi">]</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code>, <code class="highlighter-rouge">type</code>, <code class="highlighter-rouge">path</code>, <code class="highlighter-rouge">cache</code>, <code class="highlighter-rouge">materializations</code> inherited from
 <a href="#schema">Schema</a>.</p>
 
@@ -216,6 +257,8 @@ defines the functions in this schema.</p
 
 <p>Like base class <a href="#schema">Schema</a>, occurs within <code class="highlighter-rouge">root.schemas</code>.</p>
 
+<h4 id="json-4">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'mongo'</span><span class="p">,</span><span class="w">
   </span><span class="err">type</span><span class="p">:</span><span class="w"> </span><span class="err">'custom'</span><span class="p">,</span><span class="w">
@@ -226,6 +269,15 @@ defines the functions in this schema.</p
   </span><span class="p">}</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-4">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">mongo</span>
+<span class="na">type</span><span class="pi">:</span> <span class="s">custom</span>
+<span class="na">factory</span><span class="pi">:</span> <span class="s">org.apache.calcite.adapter.mongodb.MongoSchemaFactory</span>
+<span class="na">operand</span><span class="pi">:</span>
+  <span class="na">host</span><span class="pi">:</span> <span class="s">localhost</span>
+  <span class="na">database</span><span class="pi">:</span> <span class="s">test</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code>, <code class="highlighter-rouge">type</code>, <code class="highlighter-rouge">path</code>, <code class="highlighter-rouge">cache</code>, <code class="highlighter-rouge">materializations</code> inherited from
 <a href="#schema">Schema</a>.</p>
 
@@ -240,6 +292,7 @@ factory.</p>
 <h3 id="jdbc-schema">JDBC Schema</h3>
 
 <p>Like base class <a href="#schema">Schema</a>, occurs within <code class="highlighter-rouge">root.schemas</code>.</p>
+<h4 id="json-5">JSON</h4>
 
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'foodmart'</span><span class="p">,</span><span class="w">
@@ -252,6 +305,17 @@ factory.</p>
   </span><span class="err">jdbcSchema</span><span class="p">:</span><span class="w"> </span><span class="err">TODO</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-5">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">foodmart</span>
+<span class="na">type</span><span class="pi">:</span> <span class="s">jdbc</span>
+<span class="na">jdbcDriver</span><span class="pi">:</span> <span class="s">TODO</span>
+<span class="na">jdbcUrl</span><span class="pi">:</span> <span class="s">TODO</span>
+<span class="na">jdbcUser</span><span class="pi">:</span> <span class="s">TODO</span>
+<span class="na">jdbcPassword</span><span class="pi">:</span> <span class="s">TODO</span>
+<span class="na">jdbcCatalog</span><span class="pi">:</span> <span class="s">TODO</span>
+<span class="na">jdbcSchema</span><span class="pi">:</span> <span class="s">TODO</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code>, <code class="highlighter-rouge">type</code>, <code class="highlighter-rouge">path</code>, <code class="highlighter-rouge">cache</code>, <code class="highlighter-rouge">materializations</code> inherited from
 <a href="#schema">Schema</a>.</p>
 
@@ -275,12 +339,20 @@ data source.</p>
 
 <p>Occurs within <code class="highlighter-rouge">root.schemas.materializations</code>.</p>
 
+<h4 id="json-6">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">view</span><span class="p">:</span><span class="w"> </span><span class="err">'V'</span><span class="p">,</span><span class="w">
   </span><span class="err">table</span><span class="p">:</span><span class="w"> </span><span class="err">'T'</span><span class="p">,</span><span class="w">
   </span><span class="err">sql</span><span class="p">:</span><span class="w"> </span><span class="err">'select</span><span class="w"> </span><span class="err">deptno</span><span class="p">,</span><span class="w"> </span><span class="err">count(*)</span><span class="w"> </span><span class="err">as</span><span class="w"> </span><span class="err">c</span><span class="p">,</span><span class="w"> </span><span class="err">sum(sal)</span><span class="w"> </span><span class="err">as</span><span class="w"> </span><span class="err">s</span><span class="w"> </span><span class="err">from</span><span class="w"> </span><span class="err">emp</span><span class="w"> </span><span class="err">group</span><span class="w"> </span><span class="err">by</span><span class="w"> </span><span class="err">deptno'</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-6">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">view</span><span class="pi">:</span> <span class="s">V</span>
+<span class="na">table</span><span class="pi">:</span> <span class="s">T</span>
+<span class="na">sql</span><span class="pi">:</span> <span class="s">select deptno, count(*) as c, sum(sal) as s from emp group by deptno</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">view</code> (optional string) is the name of the view; null means that the table
 already exists and is populated with the correct data.</p>
 
@@ -295,11 +367,19 @@ Calcite will create and populate an in-m
 
 <p>Occurs within <code class="highlighter-rouge">root.schemas.tables</code>.</p>
 
+<h4 id="json-7">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'sales_fact'</span><span class="p">,</span><span class="w">
   </span><span class="err">columns</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="err">Column...</span><span class="w"> </span><span class="p">]</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-7">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">sales_fact</span>
+<span class="na">columns</span><span class="pi">:</span>
+  <span class="pi">[</span> <span class="nv">Column...</span> <span class="pi">]</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code> (required string) is the name of this table. Must be unique within the schema.</p>
 
 <p><code class="highlighter-rouge">type</code> (optional string, default <code class="highlighter-rouge">custom</code>) indicates sub-type. Values are:</p>
@@ -316,6 +396,8 @@ some kinds of table, optional for others
 
 <p>Like base class <a href="#table">Table</a>, occurs within <code class="highlighter-rouge">root.schemas.tables</code>.</p>
 
+<h4 id="json-8">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'female_emps'</span><span class="p">,</span><span class="w">
   </span><span class="err">type</span><span class="p">:</span><span class="w"> </span><span class="err">'view'</span><span class="p">,</span><span class="w">
@@ -323,6 +405,13 @@ some kinds of table, optional for others
   </span><span class="err">modifiable</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-8">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">female_emps</span>
+<span class="na">type</span><span class="pi">:</span> <span class="s">view</span>
+<span class="na">sql</span><span class="pi">:</span> <span class="s">select * from emps where gender = 'F'</span>
+<span class="na">modifiable</span><span class="pi">:</span> <span class="no">true</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code>, <code class="highlighter-rouge">type</code>, <code class="highlighter-rouge">columns</code> inherited from <a href="#table">Table</a>.</p>
 
 <p><code class="highlighter-rouge">sql</code> (required string, or list of strings that will be concatenated as a
@@ -364,6 +453,8 @@ Calcite throws an error when executing t
 
 <p>Like base class <a href="#table">Table</a>, occurs within <code class="highlighter-rouge">root.schemas.tables</code>.</p>
 
+<h4 id="json-9">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'female_emps'</span><span class="p">,</span><span class="w">
   </span><span class="err">type</span><span class="p">:</span><span class="w"> </span><span class="err">'custom'</span><span class="p">,</span><span class="w">
@@ -373,6 +464,14 @@ Calcite throws an error when executing t
   </span><span class="p">}</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-9">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">female_emps</span>
+<span class="na">type</span><span class="pi">:</span> <span class="s">custom</span>
+<span class="na">factory</span><span class="pi">:</span> <span class="s">TODO</span>
+<span class="na">operand</span><span class="pi">:</span>
+  <span class="na">todo</span><span class="pi">:</span> <span class="s">TODO</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code>, <code class="highlighter-rouge">type</code>, <code class="highlighter-rouge">columns</code> inherited from <a href="#table">Table</a>.</p>
 
 <p><code class="highlighter-rouge">factory</code> (required string) is the name of the factory class for this
@@ -389,11 +488,18 @@ factory.</p>
 
 <p>Occurs within <code class="highlighter-rouge">root.schemas.tables.stream</code>.</p>
 
+<h4 id="json-10">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">stream</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
   </span><span class="err">history</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-10">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">stream</span><span class="pi">:</span> <span class="no">true</span>
+<span class="na">history</span><span class="pi">:</span> <span class="no">false</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">stream</code> (optional; default true) is whether the table allows streaming.</p>
 
 <p><code class="highlighter-rouge">history</code> (optional; default false) is whether the history of the stream is
@@ -403,16 +509,24 @@ available.</p>
 
 <p>Occurs within <code class="highlighter-rouge">root.schemas.tables.columns</code>.</p>
 
+<h4 id="json-11">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'empno'</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-11">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">empno</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code> (required string) is the name of this column.</p>
 
 <h3 id="function">Function</h3>
 
 <p>Occurs within <code class="highlighter-rouge">root.schemas.functions</code>.</p>
 
+<h4 id="json-12">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'MY_PLUS'</span><span class="p">,</span><span class="w">
   </span><span class="err">className</span><span class="p">:</span><span class="w"> </span><span class="err">'com.example.functions.MyPlusFunction'</span><span class="p">,</span><span class="w">
@@ -420,6 +534,13 @@ available.</p>
   </span><span class="err">path</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-12">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">MY_PLUS</span>
+<span class="na">className</span><span class="pi">:</span> <span class="s">com.example.functions.MyPlusFunction</span>
+<span class="na">methodName</span><span class="pi">:</span> <span class="s">apply</span>
+<span class="na">path</span><span class="pi">:</span> <span class="pi">{}</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code> (required string) is the name of this function.</p>
 
 <p><code class="highlighter-rouge">className</code> (required string) is the name of the class that implements this
@@ -446,6 +567,8 @@ if found, creates an aggregate function.
 
 <p>Occurs within <code class="highlighter-rouge">root.schemas.types</code>.</p>
 
+<h4 id="json-13">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'mytype</span><span class="mi">1</span><span class="err">'</span><span class="p">,</span><span class="w">
   </span><span class="err">type</span><span class="p">:</span><span class="w"> </span><span class="err">'BIGINT'</span><span class="p">,</span><span class="w">
@@ -457,6 +580,14 @@ if found, creates an aggregate function.
   </span><span class="p">]</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-13">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">mytype1</span>
+<span class="na">type</span><span class="pi">:</span> <span class="s">BIGINT</span>
+<span class="na">attributes</span><span class="pi">:</span>
+<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">f1</span>
+  <span class="na">type</span><span class="pi">:</span> <span class="s">BIGINT</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code> (required string) is the name of this type.</p>
 
 <p><code class="highlighter-rouge">type</code> (optional) is the SQL type.</p>
@@ -469,6 +600,8 @@ If <code class="highlighter-rouge">attri
 
 <p>Occurs within <code class="highlighter-rouge">root.schemas.lattices</code>.</p>
 
+<h4 id="json-14">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'star'</span><span class="p">,</span><span class="w">
   </span><span class="err">sql</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
@@ -498,6 +631,29 @@ If <code class="highlighter-rouge">attri
   </span><span class="p">}</span><span class="w"> </span><span class="p">]</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-14">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">star</span>
+<span class="na">sql</span><span class="pi">:</span> <span class="pi">&gt;</span>
+  <span class="no">select 1 from "foodmart"."sales_fact_1997" as "s"',</span>
+  <span class="no">join "foodmart"."product" as "p" using ("product_id")',</span>
+  <span class="no">join "foodmart"."time_by_day" as "t" using ("time_id")',</span>
+  <span class="no">join "foodmart"."product_class" as "pc" on "p"."product_class_id" = "pc"."product_class_id"</span>
+<span class="na">auto</span><span class="pi">:</span> <span class="no">false</span>
+<span class="na">algorithm</span><span class="pi">:</span> <span class="no">true</span>
+<span class="na">algorithmMaxMillis</span><span class="pi">:</span> <span class="s">10000</span>
+<span class="na">rowCountEstimate</span><span class="pi">:</span> <span class="s">86837</span>
+<span class="na">defaultMeasures</span><span class="pi">:</span>
+<span class="pi">-</span> <span class="na">agg</span><span class="pi">:</span> <span class="s">count</span>
+<span class="na">tiles</span><span class="pi">:</span>
+<span class="pi">-</span> <span class="na">dimensions</span><span class="pi">:</span> <span class="pi">[</span> <span class="s1">'</span><span class="s">the_year'</span><span class="pi">,</span> <span class="pi">[</span><span class="s1">'</span><span class="s">t'</span><span class="pi">,</span> <span class="s1">'</span><span class="s">quarter'</span><span class="pi">]</span> <span class="pi">]</span>
+  <span class="na">measures</span><span class="pi">:</span>
+  <span class="pi">-</span> <span class="na">agg</span><span class="pi">:</span> <span class="s">sum</span>
+    <span class="na">args</span><span class="pi">:</span> <span class="s">unit_sales</span>
+  <span class="pi">-</span> <span class="na">agg</span><span class="pi">:</span> <span class="s">sum</span>
+    <span class="na">args</span><span class="pi">:</span> <span class="s">store_sales</span>
+  <span class="pi">-</span> <span class="na">agg</span><span class="pi">:</span> <span class="s1">'</span><span class="s">count'</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">name</code> (required string) is the name of this lattice.</p>
 
 <p><code class="highlighter-rouge">sql</code> (required string, or list of strings that will be concatenated as a
@@ -526,8 +682,14 @@ Any tile defined in <code class="highlig
 measures not on this list. If not specified, the default list of measures is
 just ‘count(*)’:</p>
 
+<h4 id="json-15">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">[</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'count'</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">]</span></code></pre></figure>
 
+<h4 id="yaml-15">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">name</span><span class="pi">:</span> <span class="s">count</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">statisticProvider</code> (optional name of a class that implements
 <a href="/apidocs/org/apache/calcite/materialize/LatticeStatisticProvider.html">org.apache.calcite.materialize.LatticeStatisticProvider</a>)
 provides estimates of the number of distinct values in each column.</p>
@@ -558,6 +720,16 @@ value, and cache the results.</p>
   </span><span class="p">}</span><span class="w"> </span><span class="p">]</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-16">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">dimensions</span><span class="pi">:</span> <span class="pi">[</span> <span class="s1">'</span><span class="s">the_year'</span><span class="pi">,</span> <span class="pi">[</span><span class="s1">'</span><span class="s">t'</span><span class="pi">,</span> <span class="s1">'</span><span class="s">quarter'</span><span class="pi">]</span> <span class="pi">]</span>
+<span class="na">measures</span><span class="pi">:</span>
+<span class="pi">-</span> <span class="na">agg</span><span class="pi">:</span> <span class="s">sum</span>
+  <span class="na">args</span><span class="pi">:</span> <span class="s">unit_sales</span>
+<span class="pi">-</span> <span class="na">agg</span><span class="pi">:</span> <span class="s">sum</span>
+  <span class="na">args</span><span class="pi">:</span> <span class="s">store_sales</span>
+<span class="pi">-</span> <span class="na">agg</span><span class="pi">:</span> <span class="s">count</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">dimensions</code> (list of strings or string lists, required, but may be empty)
 defines the dimensionality of this tile.
 Each dimension is a column from the lattice, like a <code class="highlighter-rouge">GROUP BY</code> clause.
@@ -574,11 +746,18 @@ lattice’s default measure list.</p>
 <p>Occurs within <code class="highlighter-rouge">root.schemas.lattices.defaultMeasures</code>
 and <code class="highlighter-rouge">root.schemas.lattices.tiles.measures</code>.</p>
 
+<h4 id="json-16">JSON</h4>
+
 <figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
   </span><span class="err">agg</span><span class="p">:</span><span class="w"> </span><span class="err">'sum'</span><span class="p">,</span><span class="w">
   </span><span class="err">args</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="err">'unit_sales'</span><span class="w"> </span><span class="p">]</span><span class="w">
 </span><span class="p">}</span></code></pre></figure>
 
+<h4 id="yaml-17">YAML</h4>
+
+<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">agg</span><span class="pi">:</span> <span class="s">sum</span>
+<span class="na">args</span><span class="pi">:</span> <span class="s">unit_sales</span></code></pre></figure>
+
 <p><code class="highlighter-rouge">agg</code> is the name of an aggregate function (usually ‘count’, ‘sum’, ‘min’,
 ‘max’).</p>
 
@@ -647,6 +826,9 @@ when you want to pass the column as a me
 
   
   
+
+  
+  
     <div class="section-nav">
       <div class="left align-right">
           
@@ -754,6 +936,16 @@ when you want to pass the column as a me
 
   
 
+  <li class=""><a href="/docs/materialized_views.html">Materialized Views</a></li>
+
+
+  
+  
+  
+  
+
+  
+
   <li class=""><a href="/docs/lattice.html">Lattices</a></li>
 
 
@@ -830,7 +1022,7 @@ when you want to pass the column as a me
 
   
 
-  <li class="current"><a href="/docs/model.html">JSON models</a></li>
+  <li class="current"><a href="/docs/model.html">JSON/YAML models</a></li>
 
 
   

Modified: calcite/site/docs/os_adapter.html
URL: http://svn.apache.org/viewvc/calcite/site/docs/os_adapter.html?rev=1849503&r1=1849502&r2=1849503&view=diff
==============================================================================
--- calcite/site/docs/os_adapter.html (original)
+++ calcite/site/docs/os_adapter.html Fri Dec 21 23:04:58 2018
@@ -388,6 +388,9 @@ into <a href="https://github.com/julianh
   
   
 
+  
+  
+
 
         </article>
       </div>
@@ -475,6 +478,16 @@ into <a href="https://github.com/julianh
 
   
 
+  <li class=""><a href="/docs/materialized_views.html">Materialized Views</a></li>
+
+
+  
+  
+  
+  
+
+  
+
   <li class=""><a href="/docs/lattice.html">Lattices</a></li>
 
 
@@ -551,7 +564,7 @@ into <a href="https://github.com/julianh
 
   
 
-  <li class=""><a href="/docs/model.html">JSON models</a></li>
+  <li class=""><a href="/docs/model.html">JSON/YAML models</a></li>
 
 
   

Modified: calcite/site/docs/pig_adapter.html
URL: http://svn.apache.org/viewvc/calcite/site/docs/pig_adapter.html?rev=1849503&r1=1849502&r2=1849503&view=diff
==============================================================================
--- calcite/site/docs/pig_adapter.html (original)
+++ calcite/site/docs/pig_adapter.html Fri Dec 21 23:04:58 2018
@@ -225,6 +225,9 @@ So, Piglet is basically the opposite of
   
   
 
+  
+  
+
 
         </article>
       </div>
@@ -312,6 +315,16 @@ So, Piglet is basically the opposite of
 
   
 
+  <li class=""><a href="/docs/materialized_views.html">Materialized Views</a></li>
+
+
+  
+  
+  
+  
+
+  
+
   <li class=""><a href="/docs/lattice.html">Lattices</a></li>
 
 
@@ -388,7 +401,7 @@ So, Piglet is basically the opposite of
 
   
 
-  <li class=""><a href="/docs/model.html">JSON models</a></li>
+  <li class=""><a href="/docs/model.html">JSON/YAML models</a></li>
 
 
   

Modified: calcite/site/docs/powered_by.html
URL: http://svn.apache.org/viewvc/calcite/site/docs/powered_by.html?rev=1849503&r1=1849502&r2=1849503&view=diff
==============================================================================
--- calcite/site/docs/powered_by.html (original)
+++ calcite/site/docs/powered_by.html Fri Dec 21 23:04:58 2018
@@ -122,7 +122,7 @@
   <li><a href="#cascading" id="markdown-toc-cascading">Cascading</a></li>
   <li><a href="#dremio" id="markdown-toc-dremio">Dremio</a></li>
   <li><a href="#herddb" id="markdown-toc-herddb">HerdDB</a></li>
-  <li><a href="#omnisci" id="markdown-toc-omnisci">OmniSci</a></li>
+  <li><a href="#mapd" id="markdown-toc-mapd">MapD</a></li>
   <li><a href="#qubole-quark" id="markdown-toc-qubole-quark">Qubole Quark</a></li>
   <li><a href="#sql-gremlin" id="markdown-toc-sql-gremlin">SQL-Gremlin</a></li>
 </ul>
@@ -209,9 +209,9 @@ is a distributed JVM-Embeddable Database
 <a href="https://bookkeeper.apache.org/">Apache BookKeeper</a>.
 It uses Calcite as its SQL Planner.</p>
 
-<h3 id="omnisci">OmniSci</h3>
+<h3 id="mapd">MapD</h3>
 
-<p><a href="https://www.omnisci.com">OmniSci</a>
+<p><a href="https://www.mapd.com">MapD</a>
 is a GPU-powered database and visual analytics platform for
 interactive exploration of large datasets.</p>
 
@@ -281,6 +281,9 @@ graph database.</p>
 
   
   
+
+  
+  
     <div class="section-nav">
       <div class="left align-right">
           
@@ -388,6 +391,16 @@ graph database.</p>
 
   
 
+  <li class=""><a href="/docs/materialized_views.html">Materialized Views</a></li>
+
+
+  
+  
+  
+  
+
+  
+
   <li class=""><a href="/docs/lattice.html">Lattices</a></li>
 
 
@@ -464,7 +477,7 @@ graph database.</p>
 
   
 
-  <li class=""><a href="/docs/model.html">JSON models</a></li>
+  <li class=""><a href="/docs/model.html">JSON/YAML models</a></li>