You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by fr...@apache.org on 2019/01/09 22:21:12 UTC

svn commit: r1850910 [11/25] - in /calcite/site: ./ assets/ assets/css/ community/ css/ develop/ docs/ docs/api/ docs/testapi/ downloads/ fonts/ img/ js/ news/ news/2014/ news/2014/06/ news/2014/06/27/ news/2014/06/27/release-0.8.0-incubating/ news/201...

Added: calcite/site/docs/model.html
URL: http://svn.apache.org/viewvc/calcite/site/docs/model.html?rev=1850910&view=auto
==============================================================================
--- calcite/site/docs/model.html (added)
+++ calcite/site/docs/model.html Wed Jan  9 22:21:11 2019
@@ -0,0 +1,1151 @@
+<!DOCTYPE HTML>
+<html lang="en-US">
+<head>
+  <meta charset="UTF-8">
+  <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">
+  <link rel="stylesheet" href="/css/screen.css">
+  <link rel="icon" type="image/x-icon" href="/favicon.ico">
+  <!--[if lt IE 9]>
+  <script src="/js/html5shiv.min.js"></script>
+  <script src="/js/respond.min.js"></script>
+  <![endif]-->
+</head>
+
+
+<body class="wrap">
+  <header role="banner">
+  <nav class="mobile-nav show-on-mobiles">
+    <ul>
+  <li class="">
+    <a href="/">Home</a>
+  </li>
+  <li class="">
+    <a href="/downloads/">Download</a>
+  </li>
+  <li class="">
+    <a href="/community/">Community</a>
+  </li>
+  <li class="">
+    <a href="/develop/">Develop</a>
+  </li>
+  <li class="">
+    <a href="/news/">News</a>
+  </li>
+  <li class="current">
+    <a href="/docs/">Docs</a>
+  </li>
+</ul>
+
+  </nav>
+  <div class="grid">
+    <div class="unit one-third center-on-mobiles">
+      <h1>
+        <a href="/">
+          <span class="sr-only">Apache Calcite</span>
+          <img src="/img/logo.png" width="226" height="140" alt="Calcite Logo">
+        </a>
+      </h1>
+    </div>
+    <nav class="main-nav unit two-thirds hide-on-mobiles">
+      <ul>
+  <li class="">
+    <a href="/">Home</a>
+  </li>
+  <li class="">
+    <a href="/downloads/">Download</a>
+  </li>
+  <li class="">
+    <a href="/community/">Community</a>
+  </li>
+  <li class="">
+    <a href="/develop/">Develop</a>
+  </li>
+  <li class="">
+    <a href="/news/">News</a>
+  </li>
+  <li class="current">
+    <a href="/docs/">Docs</a>
+  </li>
+</ul>
+
+    </nav>
+  </div>
+</header>
+
+
+    <section class="docs">
+    <div class="grid">
+
+      <div class="docs-nav-mobile unit whole show-on-mobiles">
+  <select onchange="if (this.value) window.location.href=this.value">
+    <option value="">Navigate the docs…</option>
+        <optgroup label="Overview">      
+    </optgroup>
+    <optgroup label="Advanced">      
+    </optgroup>
+    <optgroup label="Avatica">      
+    </optgroup>
+    <optgroup label="Reference">      
+    </optgroup>
+    <optgroup label="Meta">      
+    </optgroup>
+
+  </select>
+</div>
+
+
+      <div class="unit four-fifths">
+        <article>
+          <h1>JSON/YAML models</h1>
+          <!--
+
+-->
+
+<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>
+
+<h2 id="elements">Elements</h2>
+
+<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
+the name (case-sensitive) of a schema defined in this model, and will
+become the default schema for connections to Calcite that use this model.</p>
+
+<p><code class="highlighter-rouge">schemas</code> (optional list of <a href="#schema">Schema</a> elements).</p>
+
+<h3 id="schema">Schema</h3>
+
+<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">
+  </span><span class="err">cache</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">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>
+
+<ul>
+  <li><code class="highlighter-rouge">map</code> for <a href="#map-schema">Map Schema</a></li>
+  <li><code class="highlighter-rouge">custom</code> for <a href="#custom-schema">Custom Schema</a></li>
+  <li><code class="highlighter-rouge">jdbc</code> for <a href="#jdbc-schema">JDBC Schema</a></li>
+</ul>
+
+<p><code class="highlighter-rouge">path</code> (optional list) is the SQL path that is used to
+resolve functions used in this schema. If specified it must be a list,
+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>
+
+<p><code class="highlighter-rouge">materializations</code> (optional list of
+<a href="#materialization">Materialization</a>) defines the tables
+in this schema that are materializations of queries.</p>
+
+<p><code class="highlighter-rouge">cache</code> (optional boolean, default true) tells Calcite whether to
+cache metadata (tables, functions and sub-schemas) generated
+by this schema.</p>
+
+<ul>
+  <li>
+    <p>If <code class="highlighter-rouge">false</code>, Calcite will go back to the schema each time it needs
+metadata, for example, each time it needs a list of tables in order to
+validate a query against the schema.</p>
+  </li>
+  <li>
+    <p>If <code class="highlighter-rouge">true</code>, Calcite will cache the metadata the first time it reads
+it. This can lead to better performance, especially if name-matching is
+case-insensitive.</p>
+  </li>
+</ul>
+
+<p>However, it also leads to the problem of cache staleness.
+A particular schema implementation can override the
+<code class="highlighter-rouge">Schema.contentsHaveChangedSince</code> method to tell Calcite
+when it should consider its cache to be out of date.</p>
+
+<p>Tables, functions, types, and sub-schemas explicitly created in a schema are
+not affected by this caching mechanism. They always appear in the schema
+immediately, and are never flushed.</p>
+
+<h3 id="map-schema">Map Schema</h3>
+
+<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">
+  </span><span class="err">tables</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="err">Table...</span><span class="w"> </span><span class="p">],</span><span class="w">
+  </span><span class="err">functions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="err">Function...</span><span class="w"> </span><span class="p">],</span><span class="w">
+  </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>
+
+<p><code class="highlighter-rouge">tables</code> (optional list of <a href="#table">Table</a> elements)
+defines the tables in this schema.</p>
+
+<p><code class="highlighter-rouge">functions</code> (optional list of <a href="#function">Function</a> elements)
+defines the functions in this schema.</p>
+
+<p><code class="highlighter-rouge">types</code> defines the types in this schema.</p>
+
+<h3 id="custom-schema">Custom Schema</h3>
+
+<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">
+  </span><span class="err">factory</span><span class="p">:</span><span class="w"> </span><span class="err">'org.apache.calcite.adapter.mongodb.MongoSchemaFactory'</span><span class="p">,</span><span class="w">
+  </span><span class="err">operand</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+    </span><span class="err">host</span><span class="p">:</span><span class="w"> </span><span class="err">'localhost'</span><span class="p">,</span><span class="w">
+    </span><span class="err">database</span><span class="p">:</span><span class="w"> </span><span class="err">'test'</span><span class="w">
+  </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>
+
+<p><code class="highlighter-rouge">factory</code> (required string) is the name of the factory class for this
+schema. Must implement interface
+<a href="/apidocs/org/apache/calcite/schema/SchemaFactory.html">org.apache.calcite.schema.SchemaFactory</a>
+and have a public default constructor.</p>
+
+<p><code class="highlighter-rouge">operand</code> (optional map) contains attributes to be passed to the
+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">
+  </span><span class="err">type</span><span class="p">:</span><span class="w"> </span><span class="err">'jdbc'</span><span class="p">,</span><span class="w">
+  </span><span class="err">jdbcDriver</span><span class="p">:</span><span class="w"> </span><span class="err">TODO</span><span class="p">,</span><span class="w">
+  </span><span class="err">jdbcUrl</span><span class="p">:</span><span class="w"> </span><span class="err">TODO</span><span class="p">,</span><span class="w">
+  </span><span class="err">jdbcUser</span><span class="p">:</span><span class="w"> </span><span class="err">TODO</span><span class="p">,</span><span class="w">
+  </span><span class="err">jdbcPassword</span><span class="p">:</span><span class="w"> </span><span class="err">TODO</span><span class="p">,</span><span class="w">
+  </span><span class="err">jdbcCatalog</span><span class="p">:</span><span class="w"> </span><span class="err">TODO</span><span class="p">,</span><span class="w">
+  </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>
+
+<p><code class="highlighter-rouge">jdbcDriver</code> (optional string) is the name of the JDBC driver class. If not
+specified, uses whichever class the JDBC DriverManager chooses.</p>
+
+<p><code class="highlighter-rouge">jdbcUrl</code> (optional string) is the JDBC connect string, for example
+“jdbc:mysql://localhost/foodmart”.</p>
+
+<p><code class="highlighter-rouge">jdbcUser</code> (optional string) is the JDBC user name.</p>
+
+<p><code class="highlighter-rouge">jdbcPassword</code> (optional string) is the JDBC password.</p>
+
+<p><code class="highlighter-rouge">jdbcCatalog</code> (optional string) is the name of the initial catalog in the JDBC
+data source.</p>
+
+<p><code class="highlighter-rouge">jdbcSchema</code> (optional string) is the name of the initial schema in the JDBC
+data source.</p>
+
+<h3 id="materialization">Materialization</h3>
+
+<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>
+
+<p><code class="highlighter-rouge">table</code> (required string) is the name of the table that materializes the data in
+the query. If <code class="highlighter-rouge">view</code> is not null, the table might not exist, and if it does not,
+Calcite will create and populate an in-memory table.</p>
+
+<p><code class="highlighter-rouge">sql</code> (optional string, or list of strings that will be concatenated as a
+ multi-line string) is the SQL definition of the materialization.</p>
+
+<h3 id="table">Table</h3>
+
+<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>
+
+<ul>
+  <li><code class="highlighter-rouge">custom</code> for <a href="#custom-table">Custom Table</a></li>
+  <li><code class="highlighter-rouge">view</code> for <a href="#view">View</a></li>
+</ul>
+
+<p><code class="highlighter-rouge">columns</code> (list of <a href="#column">Column</a> elements, required for
+some kinds of table, optional for others such as View)</p>
+
+<h3 id="view">View</h3>
+
+<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">
+  </span><span class="err">sql</span><span class="p">:</span><span class="w"> </span><span class="s2">"select * from emps where gender = 'F'"</span><span class="p">,</span><span class="w">
+  </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
+ multi-line string) is the SQL definition of the view.</p>
+
+<p><code class="highlighter-rouge">path</code> (optional list) is the SQL path to resolve the query. If not
+specified, defaults to the current schema.</p>
+
+<p><code class="highlighter-rouge">modifiable</code> (optional boolean) is whether the view is modifiable.
+If null or not specified, Calcite deduces whether the view is modifiable.</p>
+
+<p>A view is modifiable if contains only SELECT, FROM, WHERE (no JOIN, aggregation
+or sub-queries) and every column:</p>
+
+<ul>
+  <li>is specified once in the SELECT clause; or</li>
+  <li>occurs in the WHERE clause with a <code class="highlighter-rouge">column = literal</code> predicate; or</li>
+  <li>is nullable.</li>
+</ul>
+
+<p>The second clause allows Calcite to automatically provide the correct value for
+hidden columns. It is useful in multi-tenant environments, where the <code class="highlighter-rouge">tenantId</code>
+column is hidden, mandatory (NOT NULL), and has a constant value for a
+particular view.</p>
+
+<p>Errors regarding modifiable views:</p>
+
+<ul>
+  <li>If a view is marked <code class="highlighter-rouge">modifiable: true</code> and is not modifiable, Calcite throws
+an error while reading the schema.</li>
+  <li>If you submit an INSERT, UPDATE or UPSERT command to a non-modifiable view,
+Calcite throws an error when validating the statement.</li>
+  <li>If a DML statement creates a row that would not appear in the view
+(for example, a row in <code class="highlighter-rouge">female_emps</code>, above, with <code class="highlighter-rouge">gender = 'M'</code>),
+Calcite throws an error when executing the statement.</li>
+</ul>
+
+<h3 id="custom-table">Custom Table</h3>
+
+<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">
+  </span><span class="err">factory</span><span class="p">:</span><span class="w"> </span><span class="err">'TODO'</span><span class="p">,</span><span class="w">
+  </span><span class="err">operand</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+    </span><span class="err">todo</span><span class="p">:</span><span class="w"> </span><span class="err">'TODO'</span><span class="w">
+  </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
+table. Must implement interface
+<a href="/apidocs/org/apache/calcite/schema/TableFactory.html">org.apache.calcite.schema.TableFactory</a>
+and have a public default constructor.</p>
+
+<p><code class="highlighter-rouge">operand</code> (optional map) contains attributes to be passed to the
+factory.</p>
+
+<h3 id="stream">Stream</h3>
+
+<p>Information about whether a table allows streaming.</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
+available.</p>
+
+<h3 id="column">Column</h3>
+
+<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">
+  </span><span class="err">methodName</span><span class="p">:</span><span class="w"> </span><span class="err">'apply'</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="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
+function.</p>
+
+<p><code class="highlighter-rouge">methodName</code> (optional string) is the name of the method that implements this
+function.</p>
+
+<p>If <code class="highlighter-rouge">methodName</code> is specified, the method must exist (case-sensitive) and Calcite
+will create a scalar function. The method may be static or non-static, but
+if non-static, the class must have a public constructor with no parameters.</p>
+
+<p>If <code class="highlighter-rouge">methodName</code> is “*”, Calcite creates a function for every method
+in the class.</p>
+
+<p>If <code class="highlighter-rouge">methodName</code> is not specified, Calcite looks for a method called “eval”, and
+if found, creates a a table macro or scalar function.
+It also looks for methods “init”, “add”, “merge”, “result”, and
+if found, creates an aggregate function.</p>
+
+<p><code class="highlighter-rouge">path</code> (optional list of string) is the path for resolving this function.</p>
+
+<h3 id="type">Type</h3>
+
+<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">
+  </span><span class="err">attributes</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="err">name</span><span class="p">:</span><span class="w"> </span><span class="err">'f</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="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>
+
+<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>
+
+<p><code class="highlighter-rouge">attributes</code> (optional) is the attribute list of this type.
+If <code class="highlighter-rouge">attributes</code> and <code class="highlighter-rouge">type</code> both exist at the same level,
+<code class="highlighter-rouge">type</code> takes precedence.</p>
+
+<h3 id="lattice">Lattice</h3>
+
+<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">
+    </span><span class="err">'select</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="err">from</span><span class="w"> </span><span class="s2">"foodmart"</span><span class="err">.</span><span class="s2">"sales_fact_1997"</span><span class="w"> </span><span class="err">as</span><span class="w"> </span><span class="s2">"s"</span><span class="err">'</span><span class="p">,</span><span class="w">
+    </span><span class="err">'join</span><span class="w"> </span><span class="s2">"foodmart"</span><span class="err">.</span><span class="s2">"product"</span><span class="w"> </span><span class="err">as</span><span class="w"> </span><span class="s2">"p"</span><span class="w"> </span><span class="err">using</span><span class="w"> </span><span class="err">(</span><span class="s2">"product_id"</span><span class="err">)'</span><span class="p">,</span><span class="w">
+    </span><span class="err">'join</span><span class="w"> </span><span class="s2">"foodmart"</span><span class="err">.</span><span class="s2">"time_by_day"</span><span class="w"> </span><span class="err">as</span><span class="w"> </span><span class="s2">"t"</span><span class="w"> </span><span class="err">using</span><span class="w"> </span><span class="err">(</span><span class="s2">"time_id"</span><span class="err">)'</span><span class="p">,</span><span class="w">
+    </span><span class="err">'join</span><span class="w"> </span><span class="s2">"foodmart"</span><span class="err">.</span><span class="s2">"product_class"</span><span class="w"> </span><span class="err">as</span><span class="w"> </span><span class="s2">"pc"</span><span class="w"> </span><span class="err">on</span><span class="w"> </span><span class="s2">"p"</span><span class="err">.</span><span class="s2">"product_class_id"</span><span class="w"> </span><span class="err">=</span><span class="w"> </span><span class="s2">"pc"</span><span class="err">.</span><span class="s2">"product_class_id"</span><span class="err">'</span><span class="w">
+  </span><span class="p">],</span><span class="w">
+  </span><span class="err">auto</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
+  </span><span class="err">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="err">algorithmMaxMillis</span><span class="p">:</span><span class="w"> </span><span class="mi">10000</span><span class="p">,</span><span class="w">
+  </span><span class="err">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="err">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="err">agg</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><span class="w">
+  </span><span class="err">tiles</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="err">dimensions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="err">'the_year'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="err">'t'</span><span class="p">,</span><span class="w"> </span><span class="err">'quarter'</span><span class="p">]</span><span class="w"> </span><span class="p">],</span><span class="w">
+    </span><span class="err">measures</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="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="err">'unit_sales'</span><span class="w">
+    </span><span class="p">},</span><span class="w"> </span><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="err">'store_sales'</span><span class="w">
+    </span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="w">
+      </span><span class="err">agg</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><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>
+
+<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
+multi-line string) is the SQL statement that defines the fact table, dimension
+tables, and join paths for this lattice.</p>
+
+<p><code class="highlighter-rouge">auto</code> (optional boolean, default true) is whether to materialize tiles on need
+as queries are executed.</p>
+
+<p><code class="highlighter-rouge">algorithm</code> (optional boolean, default false) is whether to use an optimization
+algorithm to suggest and populate an initial set of tiles.</p>
+
+<p><code class="highlighter-rouge">algorithmMaxMillis</code> (optional long, default -1, meaning no limit) is the
+maximum number of milliseconds for which to run the algorithm. After this point,
+takes the best result the algorithm has come up with so far.</p>
+
+<p><code class="highlighter-rouge">rowCountEstimate</code> (optional double, default 1000.0) estimated number of rows in
+the lattice</p>
+
+<p><code class="highlighter-rouge">tiles</code> (optional list of <a href="#tile">Tile</a> elements) is a list of
+materialized aggregates to create up front.</p>
+
+<p><code class="highlighter-rouge">defaultMeasures</code>  (optional list of <a href="#measure">Measure</a> elements)
+is a list of measures that a tile should have by default.
+Any tile defined in <code class="highlighter-rouge">tiles</code> can still define its own measures, including
+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>
+
+<p>You can use a class name, or a class plus a static field. Example:</p>
+
+<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="w">  </span><span class="s2">"statisticProvider"</span><span class="p">:</span><span class="w"> </span><span class="s2">"org.apache.calcite.materialize.Lattices#CACHING_SQL_STATISTIC_PROVIDER"</span></code></pre></figure>
+
+<p>If not set, Calcite will generate and execute a SQL query to find the real
+value, and cache the results.</p>
+
+<p>See also: <a href="/docs/lattice.html">Lattices</a>.</p>
+
+<h3 id="tile">Tile</h3>
+
+<p>Occurs within <code class="highlighter-rouge">root.schemas.lattices.tiles</code>.</p>
+
+<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
+  </span><span class="err">dimensions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="err">'the_year'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="err">'t'</span><span class="p">,</span><span class="w"> </span><span class="err">'quarter'</span><span class="p">]</span><span class="w"> </span><span class="p">],</span><span class="w">
+  </span><span class="err">measures</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="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="err">'unit_sales'</span><span class="w">
+  </span><span class="p">},</span><span class="w"> </span><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="err">'store_sales'</span><span class="w">
+  </span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="w">
+    </span><span class="err">agg</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><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.
+Each element can be either a string
+(the unique label of the column within the lattice)
+or a string list (a pair consisting of a table alias and a column name).</p>
+
+<p><code class="highlighter-rouge">measures</code> (optional list of <a href="#measure">Measure</a> elements) is a list
+of aggregate functions applied to arguments. If not specified, uses the
+lattice’s default measure list.</p>
+
+<h3 id="measure">Measure</h3>
+
+<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>
+
+<p><code class="highlighter-rouge">args</code> (optional) is a column label (string), or list of zero or more column
+labels</p>
+
+<p>Valid values are:</p>
+
+<ul>
+  <li>Not specified: no arguments</li>
+  <li>null: no arguments</li>
+  <li>Empty list: no arguments</li>
+  <li>String: single argument, the name of a lattice column</li>
+  <li>List: multiple arguments, each a column label</li>
+</ul>
+
+<p>Unlike lattice dimensions, measures can not be specified in qualified
+format, {@code [“table”, “column”]}. When you define a lattice, make sure
+that each column you intend to use as a measure has a unique label within
+the lattice (using “{@code AS label}” if necessary), and use that label
+when you want to pass the column as a measure argument.</p>
+
+<!-- End model.md -->
+
+          
+
+
+
+
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+    <div class="section-nav">
+      <div class="left align-right">
+          
+            
+            
+            <a href="/docs/reference.html" class="prev">Previous</a>
+          
+      </div>
+      <div class="right align-left">
+          
+            
+            
+
+            
+            <a href="/docs/howto.html" class="next">Next</a>
+          
+      </div>
+    </div>
+    <div class="clear"></div>
+    
+
+        </article>
+      </div>
+
+      <div class="unit one-fifth hide-on-mobiles">
+  <aside>
+    
+    <h4>Overview</h4>
+    
+
+<ul>
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/index.html">Background</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/tutorial.html">Tutorial</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/algebra.html">Algebra</a></li>
+
+
+</ul>
+
+    
+    <h4>Advanced</h4>
+    
+
+<ul>
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/adapter.html">Adapters</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/spatial.html">Spatial</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/stream.html">Streaming</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/materialized_views.html">Materialized Views</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/lattice.html">Lattices</a></li>
+
+
+</ul>
+
+    
+    <h4>Avatica</h4>
+    
+
+<ul>
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/avatica_overview.html">Overview</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/avatica_roadmap.html">Roadmap</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/avatica_json_reference.html">JSON Reference</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/avatica_protobuf_reference.html">Protobuf Reference</a></li>
+
+
+</ul>
+
+    
+    <h4>Reference</h4>
+    
+
+<ul>
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/reference.html">SQL language</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class="current"><a href="/docs/model.html">JSON/YAML models</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/howto.html">HOWTO</a></li>
+
+
+</ul>
+
+    
+    <h4>Meta</h4>
+    
+
+<ul>
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/history.html">History</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/powered_by.html">Powered by Calcite</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/apidocs">API</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/testapidocs">Test API</a></li>
+
+
+</ul>
+
+    
+  </aside>
+</div>
+
+
+      <div class="clear"></div>
+
+    </div>
+  </section>
+
+
+  <footer role="contentinfo">
+  <div id="poweredby">
+    <a href="http://www.apache.org/">
+      <span class="sr-only">Apache</span>
+      <img src="/img/feather.png" width="190" height="77" alt="Apache Logo"></a>
+  </div>
+  <div id="copyright">
+  <p>The contents of this website are Copyright &copy;&nbsp;2019
+     <a href="https://www.apache.org/">Apache Software Foundation</a>
+     under the terms of
+     the <a href="https://www.apache.org/licenses/">
+     Apache&nbsp;License&nbsp;v2</a>. Apache Calcite and its logo are
+     trademarks of the Apache Software Foundation.</p>
+  </div>
+</footer>
+
+  <script>
+  var anchorForId = function (id) {
+    var anchor = document.createElement("a");
+    anchor.className = "header-link";
+    anchor.href      = "#" + id;
+    anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
+    anchor.title = "Permalink";
+    return anchor;
+  };
+
+  var linkifyAnchors = function (level, containingElement) {
+    var headers = containingElement.getElementsByTagName("h" + level);
+    for (var h = 0; h < headers.length; h++) {
+      var header = headers[h];
+
+      if (typeof header.id !== "undefined" && header.id !== "") {
+        header.appendChild(anchorForId(header.id));
+      }
+    }
+  };
+
+  document.onreadystatechange = function () {
+    if (this.readyState === "complete") {
+      var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
+      if (!contentBlock) {
+        return;
+      }
+      for (var level = 1; level <= 6; level++) {
+        linkifyAnchors(level, contentBlock);
+      }
+    }
+  };
+</script>
+
+
+</body>
+</html>

Propchange: calcite/site/docs/model.html
------------------------------------------------------------------------------
    svn:executable = *

Added: calcite/site/docs/os_adapter.html
URL: http://svn.apache.org/viewvc/calcite/site/docs/os_adapter.html?rev=1850910&view=auto
==============================================================================
--- calcite/site/docs/os_adapter.html (added)
+++ calcite/site/docs/os_adapter.html Wed Jan  9 22:21:11 2019
@@ -0,0 +1,693 @@
+<!DOCTYPE HTML>
+<html lang="en-US">
+<head>
+  <meta charset="UTF-8">
+  <title>OS adapter and sqlsh</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">
+  <link rel="stylesheet" href="/css/screen.css">
+  <link rel="icon" type="image/x-icon" href="/favicon.ico">
+  <!--[if lt IE 9]>
+  <script src="/js/html5shiv.min.js"></script>
+  <script src="/js/respond.min.js"></script>
+  <![endif]-->
+</head>
+
+
+<body class="wrap">
+  <header role="banner">
+  <nav class="mobile-nav show-on-mobiles">
+    <ul>
+  <li class="">
+    <a href="/">Home</a>
+  </li>
+  <li class="">
+    <a href="/downloads/">Download</a>
+  </li>
+  <li class="">
+    <a href="/community/">Community</a>
+  </li>
+  <li class="">
+    <a href="/develop/">Develop</a>
+  </li>
+  <li class="">
+    <a href="/news/">News</a>
+  </li>
+  <li class="current">
+    <a href="/docs/">Docs</a>
+  </li>
+</ul>
+
+  </nav>
+  <div class="grid">
+    <div class="unit one-third center-on-mobiles">
+      <h1>
+        <a href="/">
+          <span class="sr-only">Apache Calcite</span>
+          <img src="/img/logo.png" width="226" height="140" alt="Calcite Logo">
+        </a>
+      </h1>
+    </div>
+    <nav class="main-nav unit two-thirds hide-on-mobiles">
+      <ul>
+  <li class="">
+    <a href="/">Home</a>
+  </li>
+  <li class="">
+    <a href="/downloads/">Download</a>
+  </li>
+  <li class="">
+    <a href="/community/">Community</a>
+  </li>
+  <li class="">
+    <a href="/develop/">Develop</a>
+  </li>
+  <li class="">
+    <a href="/news/">News</a>
+  </li>
+  <li class="current">
+    <a href="/docs/">Docs</a>
+  </li>
+</ul>
+
+    </nav>
+  </div>
+</header>
+
+
+    <section class="docs">
+    <div class="grid">
+
+      <div class="docs-nav-mobile unit whole show-on-mobiles">
+  <select onchange="if (this.value) window.location.href=this.value">
+    <option value="">Navigate the docs…</option>
+        <optgroup label="Overview">      
+    </optgroup>
+    <optgroup label="Advanced">      
+    </optgroup>
+    <optgroup label="Avatica">      
+    </optgroup>
+    <optgroup label="Reference">      
+    </optgroup>
+    <optgroup label="Meta">      
+    </optgroup>
+
+  </select>
+</div>
+
+
+      <div class="unit four-fifths">
+        <article>
+          <h1>OS adapter and sqlsh</h1>
+          <!--
+
+-->
+
+<h1 id="overview">Overview</h1>
+
+<p>The OS (operating system) adapter allows you to access data in your operating
+system and environment using SQL queries.</p>
+
+<p>It aims to solve similar problems that have traditionally been solved using UNIX
+command pipelines, but with the power and type-safety of SQL.</p>
+
+<p>The adapter also includes a wrapper called <code class="highlighter-rouge">sqlsh</code> that allows you to execute
+commands from your favorite shell.</p>
+
+<h1 id="security-warning">Security warning</h1>
+
+<p>The OS adapter launches processes, and is potentially a security loop-hole.
+It is included in Calcite’s “plus” module, which is not enabled by default.
+You must think carefully before enabling it in a security-sensitive situation.</p>
+
+<h1 id="compatibility">Compatibility</h1>
+
+<p>We try to support all tables on every operating system, and to make sure that
+the tables have the same columns. But we rely heavily on operating system
+commands, and these differ widely. So:</p>
+
+<ul>
+  <li>These commands only work on Linux and macOS (not Windows, even with Cygwin);</li>
+  <li><code class="highlighter-rouge">vmstat</code> has very different columns between Linux and macOS;</li>
+  <li><code class="highlighter-rouge">files</code> and <code class="highlighter-rouge">ps</code> have the same column names but semantics differ;</li>
+  <li>Other commands work largely the same.</li>
+</ul>
+
+<h1 id="a-simple-example">A simple example</h1>
+
+<p>Every bash hacker knows that to find the 3 largest files you type</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>find <span class="nb">.</span> <span class="nt">-type</span> f <span class="nt">-print0</span> | xargs <span class="nt">-0</span> <span class="nb">ls</span> <span class="nt">-l</span>  | sort <span class="nt">-nr</span> <span class="nt">-k</span> 5 | head <span class="nt">-3</span>
+<span class="nt">-rw-r--r--</span> 1 jhyde jhyde 194877 Jul 16 16:10 ./validate/SqlValidatorImpl.java
+<span class="nt">-rw-r--r--</span> 1 jhyde jhyde  73826 Jul  4 21:51 ./fun/SqlStdOperatorTable.java
+<span class="nt">-rw-r--r--</span> 1 jhyde jhyde  39214 Jul  4 21:51 ./type/SqlTypeUtil.java</code></pre></figure>
+
+<p>This actually a pipeline of relational operations, each tuple represented
+by line of space-separated fields. What if we were able to access the list of
+files as a relation and use it in a SQL query? And what if we could easily
+execute that SQL query from the shell? This is what <code class="highlighter-rouge">sqlsh</code> does:</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>sqlsh <span class="k">select </span>size, path from files where <span class="nb">type</span> <span class="o">=</span> <span class="se">\'</span>f<span class="se">\'</span> order by size desc limit 3
+194877 validate/SqlValidatorImpl.java
+73826 fun/SqlStdOperatorTable.java
+39214 <span class="nb">type</span>/SqlTypeUtil.java</code></pre></figure>
+
+<h1 id="sqlsh">sqlsh</h1>
+
+<p><code class="highlighter-rouge">sqlsh</code> launches a connection to Calcite whose default schema is the OS adapter.</p>
+
+<p>It uses the JAVA lexical mode, which means that unquoted table and column names
+remain in the case that they were written. This is consistent with how shells like
+bash behave.</p>
+
+<p>Shell meta-characters such as <code class="highlighter-rouge">*</code>, <code class="highlighter-rouge">&gt;</code>, <code class="highlighter-rouge">&lt;</code>, <code class="highlighter-rouge">(</code>, and <code class="highlighter-rouge">)</code> have to be treated with
+care. Often adding a back-slash will suffice.</p>
+
+<h1 id="tables-and-commands">Tables and commands</h1>
+
+<p>The OS adapter contains the following tables:</p>
+
+<ul>
+  <li><code class="highlighter-rouge">du</code> - Disk usage (based on <code class="highlighter-rouge">du</code> command)</li>
+  <li><code class="highlighter-rouge">ps</code> - Processes (based on <code class="highlighter-rouge">ps</code> command)</li>
+  <li><code class="highlighter-rouge">stdin</code> - Standard input</li>
+  <li><code class="highlighter-rouge">files</code> - Files (based on the <code class="highlighter-rouge">find</code> command)</li>
+  <li><code class="highlighter-rouge">git_commits</code> - Git commits (based on <code class="highlighter-rouge">git log</code>)</li>
+  <li><code class="highlighter-rouge">vmstat</code> - Virtual memory (based on <code class="highlighter-rouge">vmstat</code> command)</li>
+</ul>
+
+<p>Most tables are implemented as views on top of table functions.</p>
+
+<p>New data sources are straightforward to add; please contribute yours!</p>
+
+<h2 id="example-du">Example: du</h2>
+
+<p>How many class files, and what is their total size? In <code class="highlighter-rouge">bash</code>:</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>du <span class="nt">-ka</span> <span class="nb">.</span> | <span class="nb">grep</span> <span class="s1">'\.class$'</span> | awk <span class="s1">'{size+=$1} END {print FNR, size}'</span>
+4416 27960</code></pre></figure>
+
+<p>In <code class="highlighter-rouge">sqlsh</code>:</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>sqlsh <span class="k">select </span>count<span class="se">\(\*\)</span>, sum<span class="se">\(</span>size_k<span class="se">\)</span> from du where path like <span class="se">\'</span>%.class<span class="se">\'</span>
+4416 27960</code></pre></figure>
+
+<p>The back-slashes are necessary because <code class="highlighter-rouge">(</code>, <code class="highlighter-rouge">*</code>, <code class="highlighter-rouge">)</code>, and <code class="highlighter-rouge">'</code> are shell meta-characters.</p>
+
+<h2 id="example-files">Example: files</h2>
+
+<p>How many files and directories? In <code class="highlighter-rouge">bash</code>, you would use <code class="highlighter-rouge">find</code>:</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>find <span class="nb">.</span> <span class="nt">-printf</span> <span class="s2">"%Y %p</span><span class="se">\n</span><span class="s2">"</span> | <span class="nb">grep</span> <span class="s1">'/test/'</span> | cut <span class="nt">-d</span><span class="s1">' '</span> <span class="nt">-f1</span> | sort | uniq <span class="nt">-c</span>
+    143 d
+   1336 f</code></pre></figure>
+
+<p>In <code class="highlighter-rouge">sqlsh</code>, use the <code class="highlighter-rouge">files</code> table:</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>sqlsh <span class="k">select </span><span class="nb">type</span>, count<span class="se">\(\*\)</span> from files where path like <span class="se">\'</span>%/test/%<span class="se">\'</span> group by <span class="nb">type
+</span>d 143
+f 1336</code></pre></figure>
+
+<h2 id="example-ps">Example: ps</h2>
+
+<p>Which users have processes running? In <code class="highlighter-rouge">sqlsh</code>:</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>sqlsh <span class="k">select </span>distinct ps.<span class="se">\`</span>user<span class="se">\`</span> from ps
+avahi
+root
+jhyde
+syslog
+nobody
+daemon</code></pre></figure>
+
+<p>The <code class="highlighter-rouge">ps.</code> qualifier and back-quotes are necessary because USER is a SQL reserved word.</p>
+
+<p>Now a ‘top N’ problem: Which three users have the most processes? In <code class="highlighter-rouge">bash</code>:</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>ps aux | awk <span class="s1">'{print $1}'</span> | sort | uniq <span class="nt">-c</span> | sort <span class="nt">-nr</span> | head <span class="nt">-3</span></code></pre></figure>
+
+<p>In <code class="highlighter-rouge">sqlsh</code>:</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>./sqlsh <span class="k">select </span>count<span class="se">\(\*\)</span>, ps.<span class="se">\`</span>user<span class="se">\`</span> from ps group by ps.<span class="se">\`</span>user<span class="se">\`</span> order by 1 desc limit 3
+185 root
+69 jhyde
+2 avahi</code></pre></figure>
+
+<h2 id="example-vmstat">Example: vmstat</h2>
+
+<p>How’s my memory?</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>./sqlsh <span class="nt">-o</span> mysql <span class="k">select</span> <span class="se">\*</span> from vmstat
++--------+--------+----------+----------+----------+-----------+---------+---------+-------+-------+-----------+-----------+--------+--------+--------+--------+--------+
+| proc_r | proc_b | mem_swpd | mem_free | mem_buff | mem_cache | swap_si | swap_so | io_bi | io_bo | system_in | system_cs | cpu_us | cpu_sy | cpu_id | cpu_wa | cpu_st |
++--------+--------+----------+----------+----------+-----------+---------+---------+-------+-------+-----------+-----------+--------+--------+--------+--------+--------+
+|     12 |      0 |    54220 |  5174424 |   402180 |   4402196 |       0 |       0 |    15 |    35 |         3 |         2 |      7 |      1 |     92 |      0 |      0 |
++--------+--------+----------+----------+----------+-----------+---------+---------+-------+-------+-----------+-----------+--------+--------+--------+--------+--------+
+<span class="o">(</span>1 row<span class="o">)</span></code></pre></figure>
+
+<h2 id="example-explain">Example: explain</h2>
+
+<p>To find out what columns a table has, use <code class="highlighter-rouge">explain</code>:</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>sqlsh explain plan with <span class="nb">type </span><span class="k">for select</span> <span class="se">\*</span> from du
+size_k BIGINT NOT NULL,
+path VARCHAR CHARACTER SET <span class="s2">"ISO-8859-1"</span> COLLATE <span class="s2">"ISO-8859-1</span><span class="nv">$en_US$primary</span><span class="s2">"</span> NOT NULL,
+size_b BIGINT NOT NULL</code></pre></figure>
+
+<h2 id="example-git">Example: git</h2>
+
+<p>How many commits and distinct authors per year?
+The <code class="highlighter-rouge">git_commits</code> table is based upon the <code class="highlighter-rouge">git log</code> command.</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash">./sqlsh <span class="k">select </span>floor<span class="se">\(</span>commit_timestamp to year<span class="se">\)</span> as y, count<span class="se">\(\*\)</span>, count<span class="se">\(</span>distinct author<span class="se">\)</span> from git_commits group by y order by 1
+2012-01-01 00:00:00 180 6
+2013-01-01 00:00:00 502 13
+2014-01-01 00:00:00 679 36
+2015-01-01 00:00:00 470 45
+2016-01-01 00:00:00 465 67
+2017-01-01 00:00:00 279 53</code></pre></figure>
+
+<p>Note that <code class="highlighter-rouge">group by y</code> is possible because <code class="highlighter-rouge">sqlsh</code> uses Calcite’s
+<a href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isGroupByAlias--">lenient mode</a>.</p>
+
+<h2 id="example-stdin">Example: stdin</h2>
+
+<p>Print the stdin, adding a number to each line.</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span><span class="o">(</span><span class="nb">echo </span>cats<span class="p">;</span> <span class="nb">echo </span>and dogs<span class="o">)</span> | <span class="nb">cat</span> <span class="nt">-n</span> -
+     1  cats
+     2  and dogs</code></pre></figure>
+
+<p>In <code class="highlighter-rouge">sqlsh</code>:</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span><span class="o">(</span><span class="nb">echo </span>cats<span class="p">;</span> <span class="nb">echo </span>and dogs<span class="o">)</span> | ./sqlsh <span class="k">select</span> <span class="se">\*</span> from stdin
+1 cats
+2 and dogs</code></pre></figure>
+
+<h2 id="example-output-format">Example: output format</h2>
+
+<p>The <code class="highlighter-rouge">-o</code> option controls output format.</p>
+
+<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>./sqlsh <span class="nt">-o</span> mysql <span class="k">select </span>min<span class="se">\(</span>size_k<span class="se">\)</span>, max<span class="se">\(</span>size_k<span class="se">\)</span> from du
++--------+--------+
+| EXPR<span class="nv">$0</span> | EXPR<span class="nv">$1</span> |
++--------+--------+
+|      0 |  94312 |
++--------+--------+
+<span class="o">(</span>1 row<span class="o">)</span></code></pre></figure>
+
+<p>Format options:</p>
+
+<ul>
+  <li>spaced - spaces between fields (the default)</li>
+  <li>headers - as spaced, but with headers</li>
+  <li>csv - comma-separated values</li>
+  <li>json - JSON, one object per row</li>
+  <li>mysql - an aligned table, in the same format used by MySQL</li>
+</ul>
+
+<h1 id="further-work">Further work</h1>
+
+<p>The OS adapter was created in
+[<a href="https://issues.apache.org/jira/browse/CALCITE-1896">CALCITE-1896</a>]
+but is not complete.</p>
+
+<p>Some ideas for further work:</p>
+
+<ul>
+  <li>Allow ‘-‘and ‘.’ in unquoted table names (to match typical file names)</li>
+  <li>Allow ordinal field references, for example ‘$3’. This would help for files
+that do not have named fields, for instance <code class="highlighter-rouge">stdin</code>, but you could use them
+even if fields have names. Also ‘$0’ to mean the whole input line.</li>
+  <li>Use the file adapter, e.g. <code class="highlighter-rouge">select * from file.scott.emp</code> would use the
+<a href="file_adapter.html">file adapter</a> to open the file <code class="highlighter-rouge">scott/emp.csv</code></li>
+  <li>More tables based on git, e.g. branches, tags, files changed in each commit</li>
+  <li><code class="highlighter-rouge">wc</code> function, e.g. <code class="highlighter-rouge">select path, lineCount from git_ls_files cross apply wc(path)</code></li>
+  <li>Move <code class="highlighter-rouge">sqlsh</code> command, or at least the java code underneath it,
+into <a href="https://github.com/julianhyde/sqlline">sqlline</a></li>
+</ul>
+
+          
+
+
+
+
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+
+        </article>
+      </div>
+
+      <div class="unit one-fifth hide-on-mobiles">
+  <aside>
+    
+    <h4>Overview</h4>
+    
+
+<ul>
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/index.html">Background</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/tutorial.html">Tutorial</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/algebra.html">Algebra</a></li>
+
+
+</ul>
+
+    
+    <h4>Advanced</h4>
+    
+
+<ul>
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/adapter.html">Adapters</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/spatial.html">Spatial</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/stream.html">Streaming</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/materialized_views.html">Materialized Views</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/lattice.html">Lattices</a></li>
+
+
+</ul>
+
+    
+    <h4>Avatica</h4>
+    
+
+<ul>
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/avatica_overview.html">Overview</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/avatica_roadmap.html">Roadmap</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/avatica_json_reference.html">JSON Reference</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/avatica_protobuf_reference.html">Protobuf Reference</a></li>
+
+
+</ul>
+
+    
+    <h4>Reference</h4>
+    
+
+<ul>
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/reference.html">SQL language</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/model.html">JSON/YAML models</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/howto.html">HOWTO</a></li>
+
+
+</ul>
+
+    
+    <h4>Meta</h4>
+    
+
+<ul>
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/history.html">History</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/docs/powered_by.html">Powered by Calcite</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/apidocs">API</a></li>
+
+
+  
+  
+  
+  
+
+  
+
+  <li class=""><a href="/testapidocs">Test API</a></li>
+
+
+</ul>
+
+    
+  </aside>
+</div>
+
+
+      <div class="clear"></div>
+
+    </div>
+  </section>
+
+
+  <footer role="contentinfo">
+  <div id="poweredby">
+    <a href="http://www.apache.org/">
+      <span class="sr-only">Apache</span>
+      <img src="/img/feather.png" width="190" height="77" alt="Apache Logo"></a>
+  </div>
+  <div id="copyright">
+  <p>The contents of this website are Copyright &copy;&nbsp;2019
+     <a href="https://www.apache.org/">Apache Software Foundation</a>
+     under the terms of
+     the <a href="https://www.apache.org/licenses/">
+     Apache&nbsp;License&nbsp;v2</a>. Apache Calcite and its logo are
+     trademarks of the Apache Software Foundation.</p>
+  </div>
+</footer>
+
+  <script>
+  var anchorForId = function (id) {
+    var anchor = document.createElement("a");
+    anchor.className = "header-link";
+    anchor.href      = "#" + id;
+    anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
+    anchor.title = "Permalink";
+    return anchor;
+  };
+
+  var linkifyAnchors = function (level, containingElement) {
+    var headers = containingElement.getElementsByTagName("h" + level);
+    for (var h = 0; h < headers.length; h++) {
+      var header = headers[h];
+
+      if (typeof header.id !== "undefined" && header.id !== "") {
+        header.appendChild(anchorForId(header.id));
+      }
+    }
+  };
+
+  document.onreadystatechange = function () {
+    if (this.readyState === "complete") {
+      var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
+      if (!contentBlock) {
+        return;
+      }
+      for (var level = 1; level <= 6; level++) {
+        linkifyAnchors(level, contentBlock);
+      }
+    }
+  };
+</script>
+
+
+</body>
+</html>

Propchange: calcite/site/docs/os_adapter.html
------------------------------------------------------------------------------
    svn:executable = *