<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
<concept rev="1.1" id="create_view">

  <title>CREATE VIEW Statement</title>

  <titlealts audience="PDF">

    <navtitle>CREATE VIEW</navtitle>

  </titlealts>

  <prolog>
    <metadata>
      <data name="Category" value="Impala"/>
      <data name="Category" value="SQL"/>
      <data name="Category" value="DDL"/>
      <data name="Category" value="Tables"/>
      <data name="Category" value="Schemas"/>
      <data name="Category" value="Views"/>
      <data name="Category" value="Developers"/>
      <data name="Category" value="Data Analysts"/>
    </metadata>
  </prolog>

  <conbody>

    <p>
      The <codeph>CREATE VIEW</codeph> statement lets you create a shorthand abbreviation for a
      more complicated query. The base query can involve joins, expressions, reordered columns,
      column aliases, and other SQL features that can make a query hard to understand or
      maintain.
    </p>

    <p>
      Because a view is purely a logical construct (an alias for a query) with no physical data
      behind it, <codeph>ALTER VIEW</codeph> only involves changes to metadata in the metastore
      database, not any data files in HDFS.
    </p>

    <p conref="../shared/impala_common.xml#common/syntax_blurb"/>

<codeblock>CREATE VIEW [IF NOT EXISTS] <varname>view_name</varname>
    [(<varname>column_name</varname> [COMMENT '<varname>column_comment</varname>'][, ...])]
    [COMMENT '<varname>view_comment</varname>']
  AS <varname>select_statement</varname></codeblock>

    <p conref="../shared/impala_common.xml#common/ddl_blurb"/>

    <p conref="../shared/impala_common.xml#common/usage_notes_blurb"/>

    <p>
      The <codeph>CREATE VIEW</codeph> statement can be useful in scenarios such as the
      following:
    </p>

    <ul>
      <li>
        To turn even the most lengthy and complicated SQL query into a one-liner. You can issue
        simple queries against the view from applications, scripts, or interactive queries in
        <cmdname>impala-shell</cmdname>. For example:
<codeblock>select * from <varname>view_name</varname>;
select * from <varname>view_name</varname> order by c1 desc limit 10;</codeblock>
        The more complicated and hard-to-read the original query, the more benefit there is to
        simplifying the query using a view.
      </li>

      <li>
        To hide the underlying table and column names, to minimize maintenance problems if those
        names change. In that case, you re-create the view using the new names, and all queries
        that use the view rather than the underlying tables keep running with no changes.
      </li>

      <li>
        To experiment with optimization techniques and make the optimized queries available to
        all applications. For example, if you find a combination of <codeph>WHERE</codeph>
        conditions, join order, join hints, and so on that works the best for a class of
        queries, you can establish a view that incorporates the best-performing techniques.
        Applications can then make relatively simple queries against the view, without repeating
        the complicated and optimized logic over and over. If you later find a better way to
        optimize the original query, when you re-create the view, all the applications
        immediately take advantage of the optimized base query.
      </li>

      <li>
        To simplify a whole class of related queries, especially complicated queries involving
        joins between multiple tables, complicated expressions in the column list, and other SQL
        syntax that makes the query difficult to understand and debug. For example, you might
        create a view that joins several tables, filters using several <codeph>WHERE</codeph>
        conditions, and selects several columns from the result set. Applications might issue
        queries against this view that only vary in their <codeph>LIMIT</codeph>, <codeph>ORDER
        BY</codeph>, and similar simple clauses.
      </li>
    </ul>

    <p>
      For queries that require repeating complicated clauses over and over again, for example in
      the select list, <codeph>ORDER BY</codeph>, and <codeph>GROUP BY</codeph> clauses, you can
      use the <codeph>WITH</codeph> clause as an alternative to creating a view.
    </p>

    <p>
      You can optionally specify the table-level and the column-level comments as in the
      <codeph>CREATE TABLE</codeph> statement.
    </p>

    <p conref="../shared/impala_common.xml#common/complex_types_blurb"/>

    <p conref="../shared/impala_common.xml#common/complex_types_views"/>

    <p conref="../shared/impala_common.xml#common/complex_types_views_caveat"/>

    <p conref="../shared/impala_common.xml#common/sync_ddl_blurb"/>

    <p conref="../shared/impala_common.xml#common/security_blurb"/>

    <p conref="../shared/impala_common.xml#common/redaction_yes"/>

    <p conref="../shared/impala_common.xml#common/cancel_blurb_no"/>

    <p conref="../shared/impala_common.xml#common/permissions_blurb_no"/>

    <p conref="../shared/impala_common.xml#common/example_blurb"/>

<codeblock>-- Create a view that is exactly the same as the underlying table.
CREATE VIEW v1 AS SELECT * FROM t1;

-- Create a view that includes only certain columns from the underlying table.
CREATE VIEW v2 AS SELECT c1, c3, c7 FROM t1;

-- Create a view that filters the values from the underlying table.
CREATE VIEW v3 AS SELECT DISTINCT c1, c3, c7 FROM t1 WHERE c1 IS NOT NULL AND c5 &gt; 0;

-- Create a view that that reorders and renames columns from the underlying table.
CREATE VIEW v4 AS SELECT c4 AS last_name, c6 AS address, c2 AS birth_date FROM t1;

-- Create a view that runs functions to convert or transform certain columns.
CREATE VIEW v5 AS SELECT c1, CAST(c3 AS STRING) c3, CONCAT(c4,c5) c5, TRIM(c6) c6, "Constant" c8 FROM t1;

-- Create a view that hides the complexity of a view query.
CREATE VIEW v6 AS SELECT t1.c1, t2.c2 FROM t1 JOIN t2 ON t1.id = t2.id;

-- Create a view with a column comment and a table comment.
CREATE VIEW v7 (c1 COMMENT 'Comment for c1', c2) COMMENT 'Comment for v7' AS SELECT t1.c1, t1.c2 FROM t1;
</codeblock>

    <p conref="../shared/impala_common.xml#common/related_info"/>

    <p>
      <xref href="impala_views.xml#views"/>,
      <xref
        href="impala_alter_view.xml#alter_view"/>,
      <xref
        href="impala_drop_view.xml#drop_view"/>
    </p>

  </conbody>

</concept>
