| <?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> |