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