mirror of
https://github.com/apache/impala.git
synced 2025-12-30 03:01:44 -05:00
For this change to land in master, the audience="hidden" code review needs to be completed first. Otherwise, the doc build would still work but the audience="hidden" content would be visible rather than hidden as desired. Some work happening in parallel might introduce additional instances of audience="Cloudera". I suggest addressing those in a followup CR so this global change can land quickly. Since the changes apply across so many different files, but are so narrow in scope, I suggest that the way to validate (check that no extraneous changes were introduced accidentally) is to diff just the changed lines: git diff -U0 HEAD^ HEAD In patch set 2, I updated other topics marked audience="Cloudera" by CRs that were pushed in the meantime. Change-Id: Ic93d89da77e1f51bbf548a522d98d0c4e2fb31c8 Reviewed-on: http://gerrit.cloudera.org:8080/5613 Reviewed-by: John Russell <jrussell@cloudera.com> Tested-by: Impala Public Jenkins
158 lines
7.0 KiB
XML
158 lines
7.0 KiB
XML
<?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>
|
|
<indexterm audience="hidden">CREATE VIEW statement</indexterm>
|
|
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_list</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 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"/>
|
|
|
|
<!-- TK: Elaborate on these, show queries and real output. -->
|
|
|
|
<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 > 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;
|
|
</codeblock>
|
|
|
|
<!-- These examples show CREATE VIEW and corresponding DROP VIEW statements, with different combinations
|
|
of qualified and unqualified names. -->
|
|
|
|
<p conref="../shared/impala_common.xml#common/create_drop_view_examples"/>
|
|
|
|
<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>
|