You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2020/08/31 23:41:22 UTC

[incubator-superset-site] 17/26: 0.35.1 doc version

This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-superset-site.git

commit fb7052b18936f8279553063591214d094986a1f3
Author: Daniel Gaspar <da...@gmail.com>
AuthorDate: Tue Nov 26 19:24:22 2019 +0000

    0.35.1 doc version
---
 _sources/index.rst.txt        |   3 +-
 _sources/installation.rst.txt |  47 +++++++--
 _sources/security.rst.txt     |  25 +----
 _sources/sqllab.rst.txt       |  38 +++++++
 genindex.html                 |  68 -------------
 index.html                    |   4 +-
 installation.html             | 180 ++++++++++-----------------------
 objects.inv                   | Bin 634 -> 525 bytes
 searchindex.js                |   2 +-
 security.html                 |  21 ----
 sqllab.html                   | 224 ++++++------------------------------------
 11 files changed, 169 insertions(+), 443 deletions(-)

diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt
index 00b796d..fbbe57f 100644
--- a/_sources/index.rst.txt
+++ b/_sources/index.rst.txt
@@ -62,7 +62,7 @@ Superset Resources
   on Github.
 - Our `mailing list archives <ht...@superset.apache.org>`_.
   To subscribe, send an email to ``dev-subscribe@superset.apache.org``
-- `Join our Slack <https://join.slack.com/t/apache-superset/shared_invite/enQtNDMxMDY5NjM4MDU0LTc2Y2QwYjE4NGYwNzQyZWUwYTExZTdiZDMzMWQwZjc2YmJmM2QyMDkwMGVjZTA4N2I2MzUxZTk2YmE5MWRhZWE>`_
+- `Join our Slack <https://join.slack.com/t/apache-superset/shared_invite/enQtNDMxMDY5NjM4MDU0LWJmOTcxYjlhZTRhYmEyYTMzOWYxOWEwMjcwZDZiNWRiNDY2NDUwNzcwMDFhNzE1ZmMxZTZlZWY0ZTQ2MzMyNTU>`_
 
 Apache Software Foundation Resources
 ====================================
@@ -109,6 +109,7 @@ The following RDBMS are currently suppored:
 - `Apache Spark SQL <https://spark.apache.org/sql/>`_
 - `BigQuery <https://cloud.google.com/bigquery/>`_
 - `ClickHouse <https://clickhouse.yandex/>`_
+- `Exasol <https://www.exasol.com/>`_
 - `Google Sheets <https://www.google.com/sheets/about/>`_
 - `Greenplum <https://greenplum.org/>`_
 - `IBM Db2 <https://www.ibm.com/analytics/db2/>`_
diff --git a/_sources/installation.rst.txt b/_sources/installation.rst.txt
index e560657..9360437 100644
--- a/_sources/installation.rst.txt
+++ b/_sources/installation.rst.txt
@@ -24,7 +24,7 @@ Getting Started
 Superset has deprecated support for Python ``2.*`` and supports
 only ``~=3.6`` to take advantage of the newer Python features and reduce
 the burden of supporting previous versions. We run our test suite
-against ``3.6``, but running on ``3.7`` **should** work as well.
+against ``3.6``, but ``3.7`` is fully supported as well.
 
 Cloud-native!
 -------------
@@ -176,7 +176,7 @@ Superset installation and initialization
 Follow these few simple steps to install Superset.::
 
     # Install superset
-    pip install superset
+    pip install apache-superset
 
     # Initialize the database
     superset db upgrade
@@ -192,7 +192,7 @@ Follow these few simple steps to install Superset.::
     superset init
 
     # To start a development web server on port 8088, use -p to bind to another port
-    superset run -p 8080 --with-threads --reload --debugger
+    superset run -p 8088 --with-threads --reload --debugger
 
 After installation, you should be able to point your browser to the right
 hostname:port `http://localhost:8088 <http://localhost:8088>`_, login using
@@ -360,7 +360,7 @@ Here's a list of some of the recommended packages.
 |                  |                                       | For JDBC                                        |
 |                  |                                       | ``drill+jdbc://``                               |
 +------------------+---------------------------------------+-------------------------------------------------+
-| Apache Druid     | ``pip install pyduid``                | ``druid://``                                    |
+| Apache Druid     | ``pip install pydruid``                | ``druid://``                                    |
 +------------------+---------------------------------------+-------------------------------------------------+
 | Apache Hive      | ``pip install pyhive``                | ``hive://``                                     |
 +------------------+---------------------------------------+-------------------------------------------------+
@@ -377,6 +377,8 @@ Here's a list of some of the recommended packages.
 +------------------+---------------------------------------+-------------------------------------------------+
 | ClickHouse       | ``pip install sqlalchemy-clickhouse`` |                                                 |
 +------------------+---------------------------------------+-------------------------------------------------+
+| Exasol           | ``pip install sqlalchemy-exasol``     | ``exa+pyodbc://``                               |
++------------------+---------------------------------------+-------------------------------------------------+
 | Google Sheets    | ``pip install gsheetsdb``             | ``gsheets://``                                  |
 +------------------+---------------------------------------+-------------------------------------------------+
 | IBM Db2          | ``pip install ibm_db_sa``             | ``db2+ibm_db://``                               |
@@ -577,6 +579,9 @@ object gets unpacked into the
 while the ``metadata_params`` get unpacked into the
 `sqlalchemy.MetaData <https://docs.sqlalchemy.org/en/rel_1_2/core/metadata.html#sqlalchemy.schema.MetaData>`_ call. Refer to the SQLAlchemy docs for more information.
 
+.. note:: If your using CTAS on SQLLab and PostgreSQL
+    take a look at :ref:`ref_ctas_engine_config` for specific ``engine_params``.
+
 
 Schemas (Postgres & Redshift)
 -----------------------------
@@ -659,6 +664,25 @@ it in the ``extra`` parameter::
     }
 
 
+Exasol
+---------
+
+The connection string for Exasol looks like this ::
+
+    exa+pyodbc://{user}:{password}@{host}
+
+*Note*: It's required to have Exasol ODBC drivers installed for the sqlalchemy dialect to work properly. Exasol ODBC Drivers available are here: https://www.exasol.com/portal/display/DOWNLOAD/Exasol+Download+Section
+
+Example config (odbcinst.ini can be left empty) ::
+
+    $ cat $/.../path/to/odbc.ini
+    [EXAODBC]
+    DRIVER = /.../path/to/driver/EXASOL_driver.so
+    EXAHOST = host:8563
+    EXASCHEMA = main
+
+See `SQLAlchemy for Exasol <https://github.com/blue-yonder/sqlalchemy_exasol>`_.
+
 CORS
 ----
 
@@ -748,7 +772,7 @@ Upgrading
 
 Upgrading should be as straightforward as running::
 
-    pip install superset --upgrade
+    pip install apache-superset --upgrade
     superset db upgrade
     superset init
 
@@ -846,6 +870,12 @@ look something like:
     RESULTS_BACKEND = RedisCache(
         host='localhost', port=6379, key_prefix='superset_results')
 
+For performance gains, `MessagePack <https://github.com/msgpack/msgpack-python>`_
+and `PyArrow <https://arrow.apache.org/docs/python/>`_ are now used for results
+serialization. This can be disabled by setting ``RESULTS_BACKEND_USE_MSGPACK = False``
+in your configuration, should any issues arise. Please clear your existing results
+cache store when upgrading an existing environment.
+
 **Important notes**
 
 * It is important that all the worker nodes and web servers in
@@ -1185,7 +1215,8 @@ You can enable or disable features with flag from ``superset_config.py``:
 
      DEFAULT_FEATURE_FLAGS = {
          'CLIENT_CACHE': False,
-         'ENABLE_EXPLORE_JSON_CSRF_PROTECTION': False
+         'ENABLE_EXPLORE_JSON_CSRF_PROTECTION': False,
+         'PRESTO_EXPAND_DATA': False,
      }
 
 Here is a list of flags and descriptions:
@@ -1195,3 +1226,7 @@ Here is a list of flags and descriptions:
   * For some security concerns, you may need to enforce CSRF protection on all query request to explore_json endpoint. In Superset, we use `flask-csrf <https://sjl.bitbucket.io/flask-csrf/>`_ add csrf protection for all POST requests, but this protection doesn't apply to GET method.
 
   * When ENABLE_EXPLORE_JSON_CSRF_PROTECTION is set to true, your users cannot make GET request to explore_json. The default value for this feature False (current behavior), explore_json accepts both GET and POST request. See `PR 7935 <https://github.com/apache/incubator-superset/pull/7935>`_ for more details.
+
+* PRESTO_EXPAND_DATA
+
+  * When this feature is enabled, nested types in Presto will be expanded into extra columns and/or arrays. This is experimental, and doesn't work with all nested types.
diff --git a/_sources/security.rst.txt b/_sources/security.rst.txt
index 67c3596..0e796e3 100644
--- a/_sources/security.rst.txt
+++ b/_sources/security.rst.txt
@@ -20,7 +20,7 @@ Security
 Security in Superset is handled by Flask AppBuilder (FAB). FAB is a
 "Simple and rapid application development framework, built on top of Flask.".
 FAB provides authentication, user management, permissions and roles.
-Please read its `Security documentation 
+Please read its `Security documentation
 <https://flask-appbuilder.readthedocs.io/en/latest/security.html>`_.
 
 Provided Roles
@@ -153,26 +153,3 @@ a set of data sources that power dashboards only made available to executives.
 When looking at its dashboard list, this user will only see the
 list of dashboards it has access to, based on the roles and
 permissions that were attributed.
-
-
-Restricting the access to some metrics
-""""""""""""""""""""""""""""""""""""""
-
-Sometimes some metrics are relatively sensitive (e.g. revenue).
-We may want to restrict those metrics to only a few roles.
-For example, assumed there is a metric ``[cluster1].[datasource1].[revenue]``
-and only Admin users are allowed to see it. Here’s how to restrict the access.
-
-1. Edit the datasource (``Menu -> Source -> Druid datasources -> edit the
-   record "datasource1"``) and go to the tab ``List Druid Metric``. Check
-   the checkbox ``Is Restricted`` in the row of the metric ``revenue``.
-
-2. Edit the role (``Menu -> Security -> List Roles -> edit the record
-   “Admin”``), in the permissions field, type-and-search the permission
-   ``metric access on [cluster1].[datasource1].[revenue] (id: 1)``, then
-   click the Save button on the bottom of the page.
-
-Any users without the permission will see the error message
-*Access to the metrics denied: revenue (Status: 500)* in the slices.
-It also happens when the user wants to access a post-aggregation metric that
-is dependent on revenue.
diff --git a/_sources/sqllab.rst.txt b/_sources/sqllab.rst.txt
index c69e584..39ae4d4 100644
--- a/_sources/sqllab.rst.txt
+++ b/_sources/sqllab.rst.txt
@@ -103,3 +103,41 @@ it's possible for administrators to expose more more macros in their
 environment using the configuration variable ``JINJA_CONTEXT_ADDONS``.
 All objects referenced in this dictionary will become available for users
 to integrate in their queries in **SQL Lab**.
+
+Query cost estimation
+'''''''''''''''''''''
+
+Some databases support ``EXPLAIN`` queries that allow users to estimate the cost
+of queries before executing this. Currently, Presto is supported in SQL Lab. To
+enable query cost estimation, add the following keys to the "Extra" field in the
+database configuration:
+
+.. code-block:: json
+
+    {
+        "version": "0.319",
+        "cost_estimate_enabled": true,
+        ...
+    }
+
+Here, "version" should be the version of your Presto cluster. Support for this
+functionality was introduced in Presto 0.319.
+
+.. _ref_ctas_engine_config:
+
+Create Table As (CTAS)
+''''''''''''''''''''''
+
+You can use ``CREATE TABLE AS SELECT ...`` statements on SQLLab. This feature can be toggled on
+and off at the database configuration level.
+
+Note that since ``CREATE TABLE..`` belongs to a SQL DDL category. Specifically on PostgreSQL, DDL is transactional,
+this means that to properly use this feature you have to set ``autocommit`` to true on your engine parameters:
+
+.. code-block:: json
+
+    {
+        ...
+        "engine_params": {"isolation_level":"AUTOCOMMIT"},
+        ...
+    }
diff --git a/genindex.html b/genindex.html
index bf9efde..ca3e720 100644
--- a/genindex.html
+++ b/genindex.html
@@ -154,76 +154,8 @@
 <h1 id="index">Index</h1>
 
 <div class="genindex-jumpbox">
- <a href="#C"><strong>C</strong></a>
- | <a href="#F"><strong>F</strong></a>
- | <a href="#H"><strong>H</strong></a>
- | <a href="#L"><strong>L</strong></a>
- | <a href="#P"><strong>P</strong></a>
- | <a href="#U"><strong>U</strong></a>
  
 </div>
-<h2 id="C">C</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="sqllab.html#superset.jinja_context.CacheKeyWrapper.cache_key_wrapper">cache_key_wrapper() (in module superset.jinja_context.CacheKeyWrapper)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="sqllab.html#superset.jinja_context.current_user_id">current_user_id() (in module superset.jinja_context)</a>
-</li>
-      <li><a href="sqllab.html#superset.jinja_context.current_username">current_username() (in module superset.jinja_context)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="F">F</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="sqllab.html#superset.jinja_context.filter_values">filter_values() (in module superset.jinja_context)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="sqllab.html#superset.jinja_context.PrestoTemplateProcessor.first_latest_partition">first_latest_partition() (superset.jinja_context.PrestoTemplateProcessor method)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="H">H</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="sqllab.html#superset.jinja_context.HiveTemplateProcessor">HiveTemplateProcessor (class in superset.jinja_context)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="L">L</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="sqllab.html#superset.jinja_context.PrestoTemplateProcessor.latest_partition">latest_partition() (superset.jinja_context.PrestoTemplateProcessor method)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="sqllab.html#superset.jinja_context.PrestoTemplateProcessor.latest_partitions">latest_partitions() (superset.jinja_context.PrestoTemplateProcessor method)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="P">P</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="sqllab.html#superset.jinja_context.PrestoTemplateProcessor">PrestoTemplateProcessor (class in superset.jinja_context)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="U">U</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="sqllab.html#superset.jinja_context.url_param">url_param() (in module superset.jinja_context)</a>
-</li>
-  </ul></td>
-</tr></table>
-
 
 
            </div>
diff --git a/index.html b/index.html
index 1586fae..65b630d 100644
--- a/index.html
+++ b/index.html
@@ -187,7 +187,7 @@ and
 on Github.</p></li>
 <li><p>Our <a class="reference external" href="https://lists.apache.org/list.html?dev&#64;superset.apache.org">mailing list archives</a>.
 To subscribe, send an email to <code class="docutils literal notranslate"><span class="pre">dev-subscribe&#64;superset.apache.org</span></code></p></li>
-<li><p><a class="reference external" href="https://join.slack.com/t/apache-superset/shared_invite/enQtNDMxMDY5NjM4MDU0LTc2Y2QwYjE4NGYwNzQyZWUwYTExZTdiZDMzMWQwZjc2YmJmM2QyMDkwMGVjZTA4N2I2MzUxZTk2YmE5MWRhZWE">Join our Slack</a></p></li>
+<li><p><a class="reference external" href="https://join.slack.com/t/apache-superset/shared_invite/enQtNDMxMDY5NjM4MDU0LWJmOTcxYjlhZTRhYmEyYTMzOWYxOWEwMjcwZDZiNWRiNDY2NDUwNzcwMDFhNzE1ZmMxZTZlZWY0ZTQ2MzMyNTU">Join our Slack</a></p></li>
 </ul>
 </div>
 <div class="section" id="apache-software-foundation-resources">
@@ -236,6 +236,7 @@ to the user</p></li>
 <li><p><a class="reference external" href="https://spark.apache.org/sql/">Apache Spark SQL</a></p></li>
 <li><p><a class="reference external" href="https://cloud.google.com/bigquery/">BigQuery</a></p></li>
 <li><p><a class="reference external" href="https://clickhouse.yandex/">ClickHouse</a></p></li>
+<li><p><a class="reference external" href="https://www.exasol.com/">Exasol</a></p></li>
 <li><p><a class="reference external" href="https://www.google.com/sheets/about/">Google Sheets</a></p></li>
 <li><p><a class="reference external" href="https://greenplum.org/">Greenplum</a></p></li>
 <li><p><a class="reference external" href="https://www.ibm.com/analytics/db2/">IBM Db2</a></p></li>
@@ -292,6 +293,7 @@ be supported as well.</p>
 <li class="toctree-l2"><a class="reference internal" href="installation.html#ssl-access-to-databases">SSL Access to databases</a></li>
 <li class="toctree-l2"><a class="reference internal" href="installation.html#druid">Druid</a></li>
 <li class="toctree-l2"><a class="reference internal" href="installation.html#presto">Presto</a></li>
+<li class="toctree-l2"><a class="reference internal" href="installation.html#exasol">Exasol</a></li>
 <li class="toctree-l2"><a class="reference internal" href="installation.html#cors">CORS</a></li>
 <li class="toctree-l2"><a class="reference internal" href="installation.html#domain-sharding">DOMAIN SHARDING</a></li>
 <li class="toctree-l2"><a class="reference internal" href="installation.html#middleware">MIDDLEWARE</a></li>
diff --git a/installation.html b/installation.html
index 2b17546..89e4f78 100644
--- a/installation.html
+++ b/installation.html
@@ -106,6 +106,7 @@
 <li class="toctree-l2"><a class="reference internal" href="#ssl-access-to-databases">SSL Access to databases</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#druid">Druid</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#presto">Presto</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#exasol">Exasol</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#cors">CORS</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#domain-sharding">DOMAIN SHARDING</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#middleware">MIDDLEWARE</a></li>
@@ -199,7 +200,7 @@
 <p>Superset has deprecated support for Python <code class="docutils literal notranslate"><span class="pre">2.*</span></code> and supports
 only <code class="docutils literal notranslate"><span class="pre">~=3.6</span></code> to take advantage of the newer Python features and reduce
 the burden of supporting previous versions. We run our test suite
-against <code class="docutils literal notranslate"><span class="pre">3.6</span></code>, but running on <code class="docutils literal notranslate"><span class="pre">3.7</span></code> <strong>should</strong> work as well.</p>
+against <code class="docutils literal notranslate"><span class="pre">3.6</span></code>, but <code class="docutils literal notranslate"><span class="pre">3.7</span></code> is fully supported as well.</p>
 </div>
 <div class="section" id="cloud-native">
 <h2>Cloud-native!<a class="headerlink" href="#cloud-native" title="Permalink to this headline">¶</a></h2>
@@ -338,7 +339,7 @@ and <code class="docutils literal notranslate"><span class="pre">setuptools</spa
 <h2>Superset installation and initialization<a class="headerlink" href="#superset-installation-and-initialization" title="Permalink to this headline">¶</a></h2>
 <p>Follow these few simple steps to install Superset.:</p>
 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span># Install superset
-pip install superset
+pip install apache-superset
 
 # Initialize the database
 superset db upgrade
@@ -354,7 +355,7 @@ superset load_examples
 superset init
 
 # To start a development web server on port 8088, use -p to bind to another port
-superset run -p 8080 --with-threads --reload --debugger
+superset run -p 8088 --with-threads --reload --debugger
 </pre></div>
 </div>
 <p>After installation, you should be able to point your browser to the right
@@ -493,118 +494,6 @@ You’ll need to install the required packages for the database you
 want to use as your metadata database as well as the packages needed to
 connect to the databases you want to access through Superset.</p>
 <p>Here’s a list of some of the recommended packages.</p>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 17%" />
-<col style="width: 37%" />
-<col style="width: 46%" />
-</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>database</p></th>
-<th class="head"><p>pypi package</p></th>
-<th class="head"><p>SQLAlchemy URI prefix</p></th>
-</tr>
-</thead>
-<tbody>
-<tr class="row-even"><td><p>Amazon Athena</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">&quot;PyAthenaJDBC&gt;1.0.9&quot;</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">awsathena+jdbc://</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>Amazon Athena</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">&quot;PyAthena&gt;1.2.0&quot;</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">awsathena+rest://</span></code></p></td>
-</tr>
-<tr class="row-even"><td><p>Amazon Redshift</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">sqlalchemy-redshift</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">redshift+psycopg2://</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>Apache Drill</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">sqlalchemy-drill</span></code></p></td>
-<td><p>For the REST API:``
-<code class="docutils literal notranslate"><span class="pre">drill+sadrill://</span></code>
-For JDBC
-<code class="docutils literal notranslate"><span class="pre">drill+jdbc://</span></code></p></td>
-</tr>
-<tr class="row-even"><td><p>Apache Druid</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">pyduid</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">druid://</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>Apache Hive</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">pyhive</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">hive://</span></code></p></td>
-</tr>
-<tr class="row-even"><td><p>Apache Impala</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">impyla</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">impala://</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>Apache Kylin</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">kylinpy</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">kylin://</span></code></p></td>
-</tr>
-<tr class="row-even"><td><p>Apache Pinot</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">pinotdb</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pinot+http://CONTROLLER:5436/</span></code>
-<code class="docutils literal notranslate"><span class="pre">query?server=http://CONTROLLER:5983/</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>Apache Spark SQL</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">pyhive</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">jdbc+hive://</span></code></p></td>
-</tr>
-<tr class="row-even"><td><p>BigQuery</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">pybigquery</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">bigquery://</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>ClickHouse</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">sqlalchemy-clickhouse</span></code></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p>Google Sheets</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">gsheetsdb</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">gsheets://</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>IBM Db2</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">ibm_db_sa</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">db2+ibm_db://</span></code></p></td>
-</tr>
-<tr class="row-even"><td><p>MySQL</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">mysqlclient</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">mysql://</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>Oracle</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">cx_Oracle</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">oracle://</span></code></p></td>
-</tr>
-<tr class="row-even"><td><p>PostgreSQL</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">psycopg2</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">postgresql+psycopg2://</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>Presto</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">pyhive</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">presto://</span></code></p></td>
-</tr>
-<tr class="row-even"><td><p>Snowflake</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">snowflake-sqlalchemy</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">snowflake://</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>SQLite</p></td>
-<td></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">sqlite://</span></code></p></td>
-</tr>
-<tr class="row-even"><td><p>SQL Server</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">pymssql</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">mssql://</span></code></p></td>
-</tr>
-<tr class="row-odd"><td><p>Teradata</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">sqlalchemy-teradata</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">teradata://</span></code></p></td>
-</tr>
-<tr class="row-even"><td><p>Vertica</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span>
-<span class="pre">sqlalchemy-vertica-python</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">vertica+vertica_python://</span></code></p></td>
-</tr>
-</tbody>
-</table>
 <p>Note that many other databases are supported, the main criteria being the
 existence of a functional SqlAlchemy dialect and Python driver. Googling
 the keyword <code class="docutils literal notranslate"><span class="pre">sqlalchemy</span></code> in addition of a keyword that describes the
@@ -759,6 +648,11 @@ object gets unpacked into the
 <a class="reference external" href="https://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine">sqlalchemy.create_engine</a> call,
 while the <code class="docutils literal notranslate"><span class="pre">metadata_params</span></code> get unpacked into the
 <a class="reference external" href="https://docs.sqlalchemy.org/en/rel_1_2/core/metadata.html#sqlalchemy.schema.MetaData">sqlalchemy.MetaData</a> call. Refer to the SQLAlchemy docs for more information.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>If your using CTAS on SQLLab and PostgreSQL
+take a look at <a class="reference internal" href="sqllab.html#ref-ctas-engine-config"><span class="std std-ref">Create Table As (CTAS)</span></a> for specific <code class="docutils literal notranslate"><span class="pre">engine_params</span></code>.</p>
+</div>
 </div>
 <div class="section" id="schemas-postgres-redshift">
 <h2>Schemas (Postgres &amp; Redshift)<a class="headerlink" href="#schemas-postgres-redshift" title="Permalink to this headline">¶</a></h2>
@@ -834,6 +728,23 @@ it in the <code class="docutils literal notranslate"><span class="pre">extra</sp
 </pre></div>
 </div>
 </div>
+<div class="section" id="exasol">
+<h2>Exasol<a class="headerlink" href="#exasol" title="Permalink to this headline">¶</a></h2>
+<p>The connection string for Exasol looks like this</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">exa</span><span class="o">+</span><span class="n">pyodbc</span><span class="p">:</span><span class="o">//</span><span class="p">{</span><span class="n">user</span><span class="p">}:{</span><span class="n">password</span><span class="p">}</span><span class="o">@</span><span class="p">{</span><span class="n">host</span><span class="p">}</span>
+</pre></div>
+</div>
+<p><em>Note</em>: It’s required to have Exasol ODBC drivers installed for the sqlalchemy dialect to work properly. Exasol ODBC Drivers available are here: <a class="reference external" href="https://www.exasol.com/portal/display/DOWNLOAD/Exasol+Download+Section">https://www.exasol.com/portal/display/DOWNLOAD/Exasol+Download+Section</a></p>
+<p>Example config (odbcinst.ini can be left empty)</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$ cat $/.../path/to/odbc.ini
+[EXAODBC]
+DRIVER = /.../path/to/driver/EXASOL_driver.so
+EXAHOST = host:8563
+EXASCHEMA = main
+</pre></div>
+</div>
+<p>See <a class="reference external" href="https://github.com/blue-yonder/sqlalchemy_exasol">SQLAlchemy for Exasol</a>.</p>
+</div>
 <div class="section" id="cors">
 <h2>CORS<a class="headerlink" href="#cors" title="Permalink to this headline">¶</a></h2>
 <p>The extra CORS Dependency must be installed:</p>
@@ -865,9 +776,9 @@ your <cite>superset_config.py</cite>. <code class="docutils literal notranslate"
 add the value of <code class="docutils literal notranslate"><span class="pre">HTTP_X_PROXY_REMOTE_USER</span></code> (or any other custom header from the proxy) to Gunicorn’s <code class="docutils literal notranslate"><span class="pre">REMOTE_USER</span></code>
 environment variable:</p>
 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">RemoteUserMiddleware</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
-    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">app</span><span class="p">):</span>
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">app</span><span class="p">):</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">app</span> <span class="o">=</span> <span class="n">app</span>
-    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">environ</span><span class="p">,</span> <span class="n">start_response</span><span class="p">):</span>
+    <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">environ</span><span class="p">,</span> <span class="n">start_response</span><span class="p">):</span>
         <span class="n">user</span> <span class="o">=</span> <span class="n">environ</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">&#39;HTTP_X_PROXY_REMOTE_USER&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
         <span class="n">environ</span><span class="p">[</span><span class="s1">&#39;REMOTE_USER&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">user</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">(</span><span class="n">environ</span><span class="p">,</span> <span class="n">start_response</span><span class="p">)</span>
@@ -912,7 +823,7 @@ environment variable:</p>
 <div class="section" id="upgrading">
 <h2>Upgrading<a class="headerlink" href="#upgrading" title="Permalink to this headline">¶</a></h2>
 <p>Upgrading should be as straightforward as running:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">superset</span> <span class="o">--</span><span class="n">upgrade</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">apache</span><span class="o">-</span><span class="n">superset</span> <span class="o">--</span><span class="n">upgrade</span>
 <span class="n">superset</span> <span class="n">db</span> <span class="n">upgrade</span>
 <span class="n">superset</span> <span class="n">init</span>
 </pre></div>
@@ -957,7 +868,7 @@ have the same configuration.</p>
     <span class="n">CELERY_RESULT_BACKEND</span> <span class="o">=</span> <span class="s1">&#39;redis://localhost:6379/0&#39;</span>
     <span class="n">CELERYD_LOG_LEVEL</span> <span class="o">=</span> <span class="s1">&#39;DEBUG&#39;</span>
     <span class="n">CELERYD_PREFETCH_MULTIPLIER</span> <span class="o">=</span> <span class="mi">10</span>
-    <span class="n">CELERY_ACKS_LATE</span> <span class="o">=</span> <span class="bp">True</span>
+    <span class="n">CELERY_ACKS_LATE</span> <span class="o">=</span> <span class="kc">True</span>
     <span class="n">CELERY_ANNOTATIONS</span> <span class="o">=</span> <span class="p">{</span>
         <span class="s1">&#39;sql_lab.get_sql_results&#39;</span><span class="p">:</span> <span class="p">{</span>
             <span class="s1">&#39;rate_limit&#39;</span><span class="p">:</span> <span class="s1">&#39;100/s&#39;</span><span class="p">,</span>
@@ -966,7 +877,7 @@ have the same configuration.</p>
             <span class="s1">&#39;rate_limit&#39;</span><span class="p">:</span> <span class="s1">&#39;1/s&#39;</span><span class="p">,</span>
             <span class="s1">&#39;time_limit&#39;</span><span class="p">:</span> <span class="mi">120</span><span class="p">,</span>
             <span class="s1">&#39;soft_time_limit&#39;</span><span class="p">:</span> <span class="mi">150</span><span class="p">,</span>
-            <span class="s1">&#39;ignore_result&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
+            <span class="s1">&#39;ignore_result&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
         <span class="p">},</span>
     <span class="p">}</span>
     <span class="n">CELERYBEAT_SCHEDULE</span> <span class="o">=</span> <span class="p">{</span>
@@ -1010,6 +921,11 @@ look something like:</p>
     <span class="n">host</span><span class="o">=</span><span class="s1">&#39;localhost&#39;</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">6379</span><span class="p">,</span> <span class="n">key_prefix</span><span class="o">=</span><span class="s1">&#39;superset_results&#39;</span><span class="p">)</span>
 </pre></div>
 </div>
+<p>For performance gains, <a class="reference external" href="https://github.com/msgpack/msgpack-python">MessagePack</a>
+and <a class="reference external" href="https://arrow.apache.org/docs/python/">PyArrow</a> are now used for results
+serialization. This can be disabled by setting <code class="docutils literal notranslate"><span class="pre">RESULTS_BACKEND_USE_MSGPACK</span> <span class="pre">=</span> <span class="pre">False</span></code>
+in your configuration, should any issues arise. Please clear your existing results
+cache store when upgrading an existing environment.</p>
 <p><strong>Important notes</strong></p>
 <ul class="simple">
 <li><p>It is important that all the worker nodes and web servers in
@@ -1174,7 +1090,7 @@ up by an external scheduled (like [Apache Airflow](<a class="reference external"
         <span class="c1"># that uses the query id and the output table as its name</span>
         <span class="s1">&#39;linkback&#39;</span><span class="p">:</span> <span class="p">(</span>
             <span class="s1">&#39;https://airflow.example.com/admin/airflow/tree?&#39;</span>
-            <span class="s1">&#39;dag_id=query_${id}_${extra_json.schedule_info.output_table}&#39;</span>
+            <span class="s1">&#39;dag_id=query_$</span><span class="si">{id}</span><span class="s1">_$</span><span class="si">{extra_json.schedule_info.output_table}</span><span class="s1">&#39;</span>
         <span class="p">),</span>
     <span class="p">},</span>
 <span class="p">}</span>
@@ -1220,8 +1136,8 @@ same server.</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">flask</span> <span class="kn">import</span> <span class="n">Blueprint</span>
 <span class="n">simple_page</span> <span class="o">=</span> <span class="n">Blueprint</span><span class="p">(</span><span class="s1">&#39;simple_page&#39;</span><span class="p">,</span> <span class="vm">__name__</span><span class="p">,</span>
                                 <span class="n">template_folder</span><span class="o">=</span><span class="s1">&#39;templates&#39;</span><span class="p">)</span>
-<span class="nd">@simple_page.route</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">,</span> <span class="n">defaults</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;page&#39;</span><span class="p">:</span> <span class="s1">&#39;index&#39;</span><span class="p">})</span>
-<span class="nd">@simple_page.route</span><span class="p">(</span><span class="s1">&#39;/&lt;page&gt;&#39;</span><span class="p">)</span>
+<span class="nd">@simple_page</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">,</span> <span class="n">defaults</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;page&#39;</span><span class="p">:</span> <span class="s1">&#39;index&#39;</span><span class="p">})</span>
+<span class="nd">@simple_page</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s1">&#39;/&lt;page&gt;&#39;</span><span class="p">)</span>
 <span class="k">def</span> <span class="nf">show</span><span class="p">(</span><span class="n">page</span><span class="p">):</span>
     <span class="k">return</span> <span class="s2">&quot;Ok&quot;</span>
 
@@ -1282,7 +1198,7 @@ located in <code class="docutils literal notranslate"><span class="pre">install/
 <span class="p">]</span>
 
 <span class="c1"># Will allow user self registration, allowing to create Flask users from Authorized User</span>
-<span class="n">AUTH_USER_REGISTRATION</span> <span class="o">=</span> <span class="bp">True</span>
+<span class="n">AUTH_USER_REGISTRATION</span> <span class="o">=</span> <span class="kc">True</span>
 
 <span class="c1"># The default user self registration role</span>
 <span class="n">AUTH_USER_REGISTRATION_ROLE</span> <span class="o">=</span> <span class="s2">&quot;Public&quot;</span>
@@ -1293,13 +1209,13 @@ located in <code class="docutils literal notranslate"><span class="pre">install/
 
 <span class="k">class</span> <span class="nc">CustomSsoSecurityManager</span><span class="p">(</span><span class="n">SupersetSecurityManager</span><span class="p">):</span>
 
-    <span class="k">def</span> <span class="nf">oauth_user_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">response</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
-        <span class="n">logging</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Oauth2 provider: {0}.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">provider</span><span class="p">))</span>
+    <span class="k">def</span> <span class="nf">oauth_user_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">response</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="n">logging</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Oauth2 provider: </span><span class="si">{0}</span><span class="s2">.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">provider</span><span class="p">))</span>
         <span class="k">if</span> <span class="n">provider</span> <span class="o">==</span> <span class="s1">&#39;egaSSO&#39;</span><span class="p">:</span>
             <span class="c1"># As example, this line request a GET to base_url + &#39;/&#39; + userDetails with Bearer  Authentication,</span>
     <span class="c1"># and expects that authorization server checks the token, and response with user details</span>
             <span class="n">me</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">appbuilder</span><span class="o">.</span><span class="n">sm</span><span class="o">.</span><span class="n">oauth_remotes</span><span class="p">[</span><span class="n">provider</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;userDetails&#39;</span><span class="p">)</span><span class=" [...]
-            <span class="n">logging</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;user_data: {0}&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">me</span><span class="p">))</span>
+            <span class="n">logging</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;user_data: </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">me</span><span class="p">))</span>
             <span class="k">return</span> <span class="p">{</span> <span class="s1">&#39;name&#39;</span> <span class="p">:</span> <span class="n">me</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">],</span> <span class="s1">&#39;email&#39;</span> <span class="p">:</span> <span class="n">me</span><span class="p">[</span><span class="s1">&#39;email&#39;</span><span class="p">],</span> <span class="s1">&#39;id&#39;</span> <span class="p">:</span> <span c [...]
     <span class="o">...</span>
 </pre></div>
@@ -1316,8 +1232,9 @@ located in <code class="docutils literal notranslate"><span class="pre">install/
 <p>Because of a wide variety of users, Superset has some features that are not enabled by default. For example, some users have stronger security restrictions, while some others may not. So Superset allow users to enable or disable some features by config. For feature owners, you can add optional functionalities in Superset, but will be only affected by a subset of users.</p>
 <p>You can enable or disable features with flag from <code class="docutils literal notranslate"><span class="pre">superset_config.py</span></code>:</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">DEFAULT_FEATURE_FLAGS</span> <span class="o">=</span> <span class="p">{</span>
-    <span class="s1">&#39;CLIENT_CACHE&#39;</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
-    <span class="s1">&#39;ENABLE_EXPLORE_JSON_CSRF_PROTECTION&#39;</span><span class="p">:</span> <span class="bp">False</span>
+    <span class="s1">&#39;CLIENT_CACHE&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+    <span class="s1">&#39;ENABLE_EXPLORE_JSON_CSRF_PROTECTION&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+    <span class="s1">&#39;PRESTO_EXPAND_DATA&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
 <span class="p">}</span>
 </pre></div>
 </div>
@@ -1329,6 +1246,11 @@ located in <code class="docutils literal notranslate"><span class="pre">install/
 <li><p>When ENABLE_EXPLORE_JSON_CSRF_PROTECTION is set to true, your users cannot make GET request to explore_json. The default value for this feature False (current behavior), explore_json accepts both GET and POST request. See <a class="reference external" href="https://github.com/apache/incubator-superset/pull/7935">PR 7935</a> for more details.</p></li>
 </ul>
 </li>
+<li><p>PRESTO_EXPAND_DATA</p>
+<ul>
+<li><p>When this feature is enabled, nested types in Presto will be expanded into extra columns and/or arrays. This is experimental, and doesn’t work with all nested types.</p></li>
+</ul>
+</li>
 </ul>
 </div>
 </div>
diff --git a/objects.inv b/objects.inv
index 55df316..1eaca94 100644
Binary files a/objects.inv and b/objects.inv differ
diff --git a/searchindex.js b/searchindex.js
index c8a2caa..a9b2ec1 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["druid","faq","gallery","import_export_datasources","index","installation","misc","security","sqllab","tutorial","videos","visualization"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["druid.rst","faq.rst","gallery.rst","impo [...]
\ No newline at end of file
+Search.setIndex({docnames:["druid","faq","gallery","import_export_datasources","index","installation","misc","security","sqllab","tutorial","videos","visualization"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["druid.rst","faq.rst","gallery.rst","impo [...]
\ No newline at end of file
diff --git a/security.html b/security.html
index 71189c8..07ef12a 100644
--- a/security.html
+++ b/security.html
@@ -96,7 +96,6 @@
 <li class="toctree-l2"><a class="reference internal" href="#customizing">Customizing</a><ul>
 <li class="toctree-l3"><a class="reference internal" href="#permissions">Permissions</a></li>
 <li class="toctree-l3"><a class="reference internal" href="#restricting-access-to-a-subset-of-data-sources">Restricting access to a subset of data sources</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#restricting-the-access-to-some-metrics">Restricting the access to some metrics</a></li>
 </ul>
 </li>
 </ul>
@@ -290,26 +289,6 @@ When looking at its dashboard list, this user will only see the
 list of dashboards it has access to, based on the roles and
 permissions that were attributed.</p>
 </div>
-<div class="section" id="restricting-the-access-to-some-metrics">
-<h3>Restricting the access to some metrics<a class="headerlink" href="#restricting-the-access-to-some-metrics" title="Permalink to this headline">¶</a></h3>
-<p>Sometimes some metrics are relatively sensitive (e.g. revenue).
-We may want to restrict those metrics to only a few roles.
-For example, assumed there is a metric <code class="docutils literal notranslate"><span class="pre">[cluster1].[datasource1].[revenue]</span></code>
-and only Admin users are allowed to see it. Here’s how to restrict the access.</p>
-<ol class="arabic simple">
-<li><p>Edit the datasource (<code class="docutils literal notranslate"><span class="pre">Menu</span> <span class="pre">-&gt;</span> <span class="pre">Source</span> <span class="pre">-&gt;</span> <span class="pre">Druid</span> <span class="pre">datasources</span> <span class="pre">-&gt;</span> <span class="pre">edit</span> <span class="pre">the</span>
-<span class="pre">record</span> <span class="pre">&quot;datasource1&quot;</span></code>) and go to the tab <code class="docutils literal notranslate"><span class="pre">List</span> <span class="pre">Druid</span> <span class="pre">Metric</span></code>. Check
-the checkbox <code class="docutils literal notranslate"><span class="pre">Is</span> <span class="pre">Restricted</span></code> in the row of the metric <code class="docutils literal notranslate"><span class="pre">revenue</span></code>.</p></li>
-<li><p>Edit the role (<code class="docutils literal notranslate"><span class="pre">Menu</span> <span class="pre">-&gt;</span> <span class="pre">Security</span> <span class="pre">-&gt;</span> <span class="pre">List</span> <span class="pre">Roles</span> <span class="pre">-&gt;</span> <span class="pre">edit</span> <span class="pre">the</span> <span class="pre">record</span>
-<span class="pre">“Admin”</span></code>), in the permissions field, type-and-search the permission
-<code class="docutils literal notranslate"><span class="pre">metric</span> <span class="pre">access</span> <span class="pre">on</span> <span class="pre">[cluster1].[datasource1].[revenue]</span> <span class="pre">(id:</span> <span class="pre">1)</span></code>, then
-click the Save button on the bottom of the page.</p></li>
-</ol>
-<p>Any users without the permission will see the error message
-<em>Access to the metrics denied: revenue (Status: 500)</em> in the slices.
-It also happens when the user wants to access a post-aggregation metric that
-is dependent on revenue.</p>
-</div>
 </div>
 </div>
 
diff --git a/sqllab.html b/sqllab.html
index 1fe9e9f..3023591 100644
--- a/sqllab.html
+++ b/sqllab.html
@@ -90,6 +90,8 @@
 <li class="toctree-l2"><a class="reference internal" href="#templating-with-jinja">Templating with Jinja</a><ul>
 <li class="toctree-l3"><a class="reference internal" href="#available-macros">Available macros</a></li>
 <li class="toctree-l3"><a class="reference internal" href="#extending-macros">Extending macros</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#query-cost-estimation">Query cost estimation</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#create-table-as-ctas">Create Table As (CTAS)</a></li>
 </ul>
 </li>
 </ul>
@@ -217,198 +219,6 @@ Superset’s Jinja context:</p>
 <li><p><code class="docutils literal notranslate"><span class="pre">relativedelta</span></code>: <code class="docutils literal notranslate"><span class="pre">dateutil.relativedelta.relativedelta</span></code></p></li>
 </ul>
 <p><a class="reference external" href="http://jinja.pocoo.org/docs/dev/templates/">Jinja’s builtin filters</a> can be also be applied where needed.</p>
-<dl class="function">
-<dt id="superset.jinja_context.current_user_id">
-<code class="sig-prename descclassname">superset.jinja_context.</code><code class="sig-name descname">current_user_id</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/superset/jinja_context.html#current_user_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#superset.jinja_context.current_user_id" title="Permalink to this definition">¶</a></dt>
-<dd><p>The id of the user who is currently logged in</p>
-<dl class="field-list simple">
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="function">
-<dt id="superset.jinja_context.current_username">
-<code class="sig-prename descclassname">superset.jinja_context.</code><code class="sig-name descname">current_username</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/superset/jinja_context.html#current_username"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#superset.jinja_context.current_username" title="Permalink to this definition">¶</a></dt>
-<dd><p>The username of the user who is currently logged in</p>
-<dl class="field-list simple">
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="function">
-<dt id="superset.jinja_context.url_param">
-<code class="sig-prename descclassname">superset.jinja_context.</code><code class="sig-name descname">url_param</code><span class="sig-paren">(</span><em class="sig-param">param</em>, <em class="sig-param">default=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/superset/jinja_context.html#url_param"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#superset.jinja_context.url_param" title="Permalink to this definition">¶</a></dt>
-<dd><p>Read a url or post parameter and use it in your SQL Lab query</p>
-<p>When in SQL Lab, it’s possible to add arbitrary URL “query string”
-parameters, and use those in your SQL code. For instance you can
-alter your url and add <cite>?foo=bar</cite>, as in
-<cite>{domain}/superset/sqllab?foo=bar</cite>. Then if your query is something like
-SELECT * FROM foo = ‘{{ url_param(‘foo’) }}’, it will be parsed at
-runtime and replaced by the value in the URL.</p>
-<p>As you create a visualization form this SQL Lab query, you can pass
-parameters in the explore view as well as from the dashboard, and
-it should carry through to your queries.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>param</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – the parameter to lookup</p></li>
-<li><p><strong>default</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>]) – the value to return in the absence of the parameter</p></li>
-</ul>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-data docutils literal notranslate"><span class="pre">Any</span></code>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="function">
-<dt id="superset.jinja_context.filter_values">
-<code class="sig-prename descclassname">superset.jinja_context.</code><code class="sig-name descname">filter_values</code><span class="sig-paren">(</span><em class="sig-param">column</em>, <em class="sig-param">default=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/superset/jinja_context.html#filter_values"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#superset.jinja_context.filter_values" title="Permalink to this defin [...]
-<dd><p>Gets a values for a particular filter as a list</p>
-<dl class="simple">
-<dt>This is useful if:</dt><dd><ul class="simple">
-<li><p>you want to use a filter box to filter a query where the name of filter box
-column doesn’t match the one in the select statement</p></li>
-<li><p>you want to have the ability for filter inside the main query for speed
-purposes</p></li>
-</ul>
-</dd>
-</dl>
-<p>This searches for “filters” and “extra_filters” in <code class="docutils literal notranslate"><span class="pre">form_data</span></code> for a match</p>
-<p>Usage example:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">SELECT</span> <span class="n">action</span><span class="p">,</span> <span class="n">count</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="k">as</span> <span class="n">times</span>
-<span class="n">FROM</span> <span class="n">logs</span>
-<span class="n">WHERE</span> <span class="n">action</span> <span class="ow">in</span> <span class="p">(</span> <span class="p">{{</span> <span class="s2">&quot;&#39;&quot;</span> <span class="o">+</span> <span class="s2">&quot;&#39;,&#39;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">filter_values</span><span class="p">(</span><span class="s1">&#39;action_type&#39;</span><span class="p">))</span> <span class="o">+</span> <span clas [...]
-<span class="n">GROUP</span> <span class="n">BY</span> <span class="n">action</span>
-</pre></div>
-</div>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>column</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – column/filter name to lookup</p></li>
-<li><p><strong>default</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>]) – default value to return if there’s no matching columns</p></li>
-</ul>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">List</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>]</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>returns a list of filter values</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="function">
-<dt id="superset.jinja_context.CacheKeyWrapper.cache_key_wrapper">
-<code class="sig-prename descclassname">superset.jinja_context.CacheKeyWrapper.</code><code class="sig-name descname">cache_key_wrapper</code><span class="sig-paren">(</span><em class="sig-param">self</em>, <em class="sig-param">key</em><span class="sig-paren">)</span><a class="headerlink" href="#superset.jinja_context.CacheKeyWrapper.cache_key_wrapper" title="Permalink to this definition">¶</a></dt>
-<dd><p>Adds values to a list that is added to the query object used for calculating
-a cache key.</p>
-<dl class="simple">
-<dt>This is needed if the following applies:</dt><dd><ul class="simple">
-<li><p>Caching is enabled</p></li>
-<li><p>The query is dynamically generated using a jinja template</p></li>
-<li><p>A username or similar is used as a filter in the query</p></li>
-</ul>
-</dd>
-</dl>
-<p>Example when using a SQL query as a data source</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">SELECT</span> <span class="n">action</span><span class="p">,</span> <span class="n">count</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="k">as</span> <span class="n">times</span>
-<span class="n">FROM</span> <span class="n">logs</span>
-<span class="n">WHERE</span> <span class="n">logged_in_user</span> <span class="o">=</span> <span class="s1">&#39;{{ cache_key_wrapper(current_username()) }}&#39;</span>
-<span class="n">GROUP</span> <span class="n">BY</span> <span class="n">action</span>
-</pre></div>
-</div>
-<p>This will ensure that the query results that were cached by <cite>user_1</cite> will
-<strong>not</strong> be seen by <cite>user_2</cite>, as the <cite>cache_key</cite> for the query will be
-different. <code class="docutils literal notranslate"><span class="pre">cache_key_wrapper</span></code> can be used similarly for regular table data
-sources by adding a <cite>Custom SQL</cite> filter.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>key</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Any</span></code>) – Any value that should be considered when calculating the cache key</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><code class="xref py py-data docutils literal notranslate"><span class="pre">Any</span></code></p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>the original value <code class="docutils literal notranslate"><span class="pre">key</span></code> passed to the function</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="class">
-<dt id="superset.jinja_context.PrestoTemplateProcessor">
-<em class="property">class </em><code class="sig-prename descclassname">superset.jinja_context.</code><code class="sig-name descname">PrestoTemplateProcessor</code><span class="sig-paren">(</span><em class="sig-param">database=None</em>, <em class="sig-param">query=None</em>, <em class="sig-param">table=None</em>, <em class="sig-param">extra_cache_keys=None</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/superset/jinja [...]
-<dd><p>Presto Jinja context</p>
-<p>The methods described here are namespaced under <code class="docutils literal notranslate"><span class="pre">presto</span></code> in the
-jinja context as in <code class="docutils literal notranslate"><span class="pre">SELECT</span> <span class="pre">'{{</span> <span class="pre">presto.some_macro_call()</span> <span class="pre">}}'</span></code></p>
-<dl class="method">
-<dt id="superset.jinja_context.PrestoTemplateProcessor.first_latest_partition">
-<code class="sig-name descname">first_latest_partition</code><span class="sig-paren">(</span><em class="sig-param">table_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/superset/jinja_context.html#PrestoTemplateProcessor.first_latest_partition"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#superset.jinja_context.PrestoTemplateProcessor.first_latest_partition" title="Permalink to this definition">¶</a></dt>
-<dd><p>Gets the first value in the array of all latest partitions</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>table_name</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – table name in the format <cite>schema.table</cite></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>the first (or only) value in the latest partition array</p>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>IndexError</strong> – If no partition exists</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="method">
-<dt id="superset.jinja_context.PrestoTemplateProcessor.latest_partition">
-<code class="sig-name descname">latest_partition</code><span class="sig-paren">(</span><em class="sig-param">table_name</em><span class="sig-paren">)</span><a class="headerlink" href="#superset.jinja_context.PrestoTemplateProcessor.latest_partition" title="Permalink to this definition">¶</a></dt>
-<dd><p>Gets the first value in the array of all latest partitions</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>table_name</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – table name in the format <cite>schema.table</cite></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>the first (or only) value in the latest partition array</p>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>IndexError</strong> – If no partition exists</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="method">
-<dt id="superset.jinja_context.PrestoTemplateProcessor.latest_partitions">
-<code class="sig-name descname">latest_partitions</code><span class="sig-paren">(</span><em class="sig-param">table_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/superset/jinja_context.html#PrestoTemplateProcessor.latest_partitions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#superset.jinja_context.PrestoTemplateProcessor.latest_partitions" title="Permalink to this definition">¶</a></dt>
-<dd><p>Gets the array of all latest partitions</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>table_name</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – table name in the format <cite>schema.table</cite></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">List</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>]</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>the latest partition array</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="superset.jinja_context.HiveTemplateProcessor">
-<em class="property">class </em><code class="sig-prename descclassname">superset.jinja_context.</code><code class="sig-name descname">HiveTemplateProcessor</code><span class="sig-paren">(</span><em class="sig-param">database=None</em>, <em class="sig-param">query=None</em>, <em class="sig-param">table=None</em>, <em class="sig-param">extra_cache_keys=None</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/superset/jinja_c [...]
-<dd></dd></dl>
-
 </div>
 <div class="section" id="extending-macros">
 <h3>Extending macros<a class="headerlink" href="#extending-macros" title="Permalink to this headline">¶</a></h3>
@@ -418,6 +228,36 @@ environment using the configuration variable <code class="docutils literal notra
 All objects referenced in this dictionary will become available for users
 to integrate in their queries in <strong>SQL Lab</strong>.</p>
 </div>
+<div class="section" id="query-cost-estimation">
+<h3>Query cost estimation<a class="headerlink" href="#query-cost-estimation" title="Permalink to this headline">¶</a></h3>
+<p>Some databases support <code class="docutils literal notranslate"><span class="pre">EXPLAIN</span></code> queries that allow users to estimate the cost
+of queries before executing this. Currently, Presto is supported in SQL Lab. To
+enable query cost estimation, add the following keys to the “Extra” field in the
+database configuration:</p>
+<div class="highlight-json notranslate"><div class="highlight"><pre><span></span>{
+    &quot;version&quot;: &quot;0.319&quot;,
+    &quot;cost_estimate_enabled&quot;: true,
+    ...
+}
+</pre></div>
+</div>
+<p>Here, “version” should be the version of your Presto cluster. Support for this
+functionality was introduced in Presto 0.319.</p>
+</div>
+<div class="section" id="create-table-as-ctas">
+<span id="ref-ctas-engine-config"></span><h3>Create Table As (CTAS)<a class="headerlink" href="#create-table-as-ctas" title="Permalink to this headline">¶</a></h3>
+<p>You can use <code class="docutils literal notranslate"><span class="pre">CREATE</span> <span class="pre">TABLE</span> <span class="pre">AS</span> <span class="pre">SELECT</span> <span class="pre">...</span></code> statements on SQLLab. This feature can be toggled on
+and off at the database configuration level.</p>
+<p>Note that since <code class="docutils literal notranslate"><span class="pre">CREATE</span> <span class="pre">TABLE..</span></code> belongs to a SQL DDL category. Specifically on PostgreSQL, DDL is transactional,
+this means that to properly use this feature you have to set <code class="docutils literal notranslate"><span class="pre">autocommit</span></code> to true on your engine parameters:</p>
+<div class="highlight-json notranslate"><div class="highlight"><pre><span></span>{
+    ...
+    &quot;engine_params&quot;: {&quot;isolation_level&quot;:&quot;AUTOCOMMIT&quot;},
+    ...
+}
+</pre></div>
+</div>
+</div>
 </div>
 </div>