[SPARK-31428][SQL][DOCS] Document Common Table Expression in SQL Reference
### What changes were proposed in this pull request? Document Common Table Expression in SQL Reference ### Why are the changes needed? Make SQL Reference complete ### Does this PR introduce any user-facing change? Yes <img width="1050" alt="Screen Shot 2020-04-13 at 12 06 35 AM" src="https://user-images.githubusercontent.com/13592258/79100257-f61def00-7d1a-11ea-8402-17017059232e.png"> <img width="1050" alt="Screen Shot 2020-04-13 at 12 07 09 AM" src="https://user-images.githubusercontent.com/13592258/79100260-f7e7b280-7d1a-11ea-9408-058c0851f0b6.png"> <img width="1050" alt="Screen Shot 2020-04-13 at 12 07 35 AM" src="https://user-images.githubusercontent.com/13592258/79100262-fa4a0c80-7d1a-11ea-8862-eb1d8960296b.png"> Also link to Select page <img width="1045" alt="Screen Shot 2020-04-12 at 4 14 30 PM" src="https://user-images.githubusercontent.com/13592258/79082246-217fea00-7cd9-11ea-8d96-1a69769d1e19.png"> ### How was this patch tested? Manually build and check Closes #28196 from huaxingao/cte. Authored-by: Huaxin Gao <huaxing@us.ibm.com> Signed-off-by: Takeshi Yamamuro <yamamuro@apache.org>
This commit is contained in:
parent
0d4e4df061
commit
92c1b24617
|
@ -166,6 +166,8 @@
|
||||||
url: sql-ref-syntax-qry-select-tvf.html
|
url: sql-ref-syntax-qry-select-tvf.html
|
||||||
- text: Inline Table
|
- text: Inline Table
|
||||||
url: sql-ref-syntax-qry-select-inline-table.html
|
url: sql-ref-syntax-qry-select-inline-table.html
|
||||||
|
- text: Common Table Expression
|
||||||
|
url: sql-ref-syntax-qry-select-cte.html
|
||||||
- text: EXPLAIN
|
- text: EXPLAIN
|
||||||
url: sql-ref-syntax-qry-explain.html
|
url: sql-ref-syntax-qry-explain.html
|
||||||
- text: Auxiliary Statements
|
- text: Auxiliary Statements
|
||||||
|
|
|
@ -19,4 +19,111 @@ license: |
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
---
|
---
|
||||||
|
|
||||||
**This page is under construction**
|
### Description
|
||||||
|
|
||||||
|
A common table expression (CTE) defines a temporary result set that a user can reference possibly multiple times within the scope of a SQL statement. A CTE is used mainly in a SELECT statement.
|
||||||
|
|
||||||
|
### Syntax
|
||||||
|
|
||||||
|
{% highlight sql %}
|
||||||
|
WITH common_table_expression [ , ... ]
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
While `common_table_expression` is defined as
|
||||||
|
{% highlight sql %}
|
||||||
|
expression_name [ ( column_name [ , ... ] ) ] [ AS ] ( [ common_table_expression ] query )
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt><code><em>expression_name</em></code></dt>
|
||||||
|
<dd>
|
||||||
|
Specifies a name for the common table expression.
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt><code><em>query</em></code></dt>
|
||||||
|
<dd>
|
||||||
|
A <a href="sql-ref-syntax-qry-select.html">SELECT</a> statement.
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
{% highlight sql %}
|
||||||
|
-- CTE with multiple column aliases
|
||||||
|
WITH t(x, y) AS (SELECT 1, 2)
|
||||||
|
SELECT * FROM t WHERE x = 1 AND y = 2;
|
||||||
|
+---+---+
|
||||||
|
| x| y|
|
||||||
|
+---+---+
|
||||||
|
| 1| 2|
|
||||||
|
+---+---+
|
||||||
|
|
||||||
|
-- CTE in CTE definition
|
||||||
|
WITH t as (
|
||||||
|
WITH t2 AS (SELECT 1)
|
||||||
|
SELECT * FROM t2
|
||||||
|
)
|
||||||
|
SELECT * FROM t;
|
||||||
|
+---+
|
||||||
|
| 1|
|
||||||
|
+---+
|
||||||
|
| 1|
|
||||||
|
+---+
|
||||||
|
|
||||||
|
-- CTE in subquery
|
||||||
|
SELECT max(c) FROM (
|
||||||
|
WITH t(c) AS (SELECT 1)
|
||||||
|
SELECT * FROM t
|
||||||
|
);
|
||||||
|
+------+
|
||||||
|
|max(c)|
|
||||||
|
+------+
|
||||||
|
| 1|
|
||||||
|
+------+
|
||||||
|
|
||||||
|
-- CTE in subquery expression
|
||||||
|
SELECT (
|
||||||
|
WITH t AS (SELECT 1)
|
||||||
|
SELECT * FROM t
|
||||||
|
);
|
||||||
|
+----------------+
|
||||||
|
|scalarsubquery()|
|
||||||
|
+----------------+
|
||||||
|
| 1|
|
||||||
|
+----------------+
|
||||||
|
|
||||||
|
-- CTE in CREATE VIEW statement
|
||||||
|
CREATE VIEW v AS
|
||||||
|
WITH t(a, b, c, d) AS (SELECT 1, 2, 3, 4)
|
||||||
|
SELECT * FROM t;
|
||||||
|
SELECT * FROM v;
|
||||||
|
+---+---+---+---+
|
||||||
|
| a| b| c| d|
|
||||||
|
+---+---+---+---+
|
||||||
|
| 1| 2| 3| 4|
|
||||||
|
+---+---+---+---+
|
||||||
|
|
||||||
|
-- If name conflict is detected in nested CTE, then AnalysisException is thrown by default.
|
||||||
|
-- SET spark.sql.legacy.ctePrecedencePolicy = CORRECTED (which is recommended),
|
||||||
|
-- inner CTE definitions take precedence over outer definitions.
|
||||||
|
SET spark.sql.legacy.ctePrecedencePolicy = CORRECTED;
|
||||||
|
WITH
|
||||||
|
t AS (SELECT 1),
|
||||||
|
t2 AS (
|
||||||
|
WITH t AS (SELECT 2)
|
||||||
|
SELECT * FROM t
|
||||||
|
)
|
||||||
|
SELECT * FROM t2;
|
||||||
|
+---+
|
||||||
|
| 2|
|
||||||
|
+---+
|
||||||
|
| 2|
|
||||||
|
+---+
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
### Related Statements
|
||||||
|
|
||||||
|
* [SELECT](sql-ref-syntax-qry-select.html)
|
||||||
|
|
|
@ -53,7 +53,7 @@ SELECT [ hints , ... ] [ ALL | DISTINCT ] { named_expression [ , ... ] }
|
||||||
<dl>
|
<dl>
|
||||||
<dt><code><em>with_query</em></code></dt>
|
<dt><code><em>with_query</em></code></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Specifies the common table expressions (CTEs) before the main query block.
|
Specifies the <a href="sql-ref-syntax-qry-select-cte.html">common table expressions (CTEs)</a> before the main query block.
|
||||||
These table expressions are allowed to be referenced later in the FROM clause. This is useful to abstract
|
These table expressions are allowed to be referenced later in the FROM clause. This is useful to abstract
|
||||||
out repeated subquery blocks in the FROM clause and improves readability of the query.
|
out repeated subquery blocks in the FROM clause and improves readability of the query.
|
||||||
</dd>
|
</dd>
|
||||||
|
@ -159,3 +159,4 @@ SELECT [ hints , ... ] [ ALL | DISTINCT ] { named_expression [ , ... ] }
|
||||||
* [TABLESAMPLE](sql-ref-syntax-qry-sampling.html)
|
* [TABLESAMPLE](sql-ref-syntax-qry-sampling.html)
|
||||||
* [JOIN](sql-ref-syntax-qry-select-join.html)
|
* [JOIN](sql-ref-syntax-qry-select-join.html)
|
||||||
* [SET Operators](sql-ref-syntax-qry-select-setops.html)
|
* [SET Operators](sql-ref-syntax-qry-select-setops.html)
|
||||||
|
* [Common Table Expression](sql-ref-syntax-qry-select-cte.html)
|
||||||
|
|
Loading…
Reference in a new issue