| <!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">></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 © 2019 |
| <a href="https://www.apache.org/">Apache Software Foundation</a> |
| under the terms of |
| the <a href="https://www.apache.org/licenses/"> |
| Apache License 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> |