파이프 작업
적용 대상: Databricks Runtime 16.2 이상
연결된 작업을 사용하여 이전 쿼리 결과를 처리합니다.
통사론
{ SELECT clause |
EXTEND { expression [ [ AS ] column_alias ] } [ , ...] |
SET { column_name = expression } [, ...] |
DROP column_name [, ...] |
AS table_alias |
WHERE clause |
{ LIMIT clause |
OFFSET clause |
LIMIT clause OFFSET clause } |
aggregation |
JOIN clause |
ORDER BY clause |
set_operator |
TABLESAMPLE clause
PIVOT clause
UNPIVOT clause }
aggregation
AGGREGATE aggregate_expr [ [ AS ] column_alias ] [, ...]
[ GROUP BY grouping_expr [AS column_alias ] ]
매개 변수
-
식 실행 및 중복 제거를 포함하여 쿼리에서 반환할 열을 수집합니다.
열 목록에 집계 함수가 포함되어서는 안 됩니다. 해당 용도로
AGGREGATE
작업을 사용합니다. 확장
쿼리 선택 목록에 새 열을 추가합니다.
-
값으로 계산되는 하나 이상의 값, 연산자 및 SQL 함수의 조합입니다.
expression
은 이EXTEND
절에서 쿼리 선택 목록의 열에 대한 참조 및 이전column_alias
을 포함할 수 있습니다. -
식 결과의 이름을 지정하는 선택적 열 식별자입니다.
column_alias
이 제공되지 않으면 Azure Databricks가 값을 유추합니다.
-
SET
쿼리 선택 목록의 기존 열을 새 값으로 재정의합니다.
이 작업은
SET
절에서 나타나는 순서대로 수행됩니다. 식의 결과는 이전 식에 의해 업데이트된 열을 참조할 수 있습니다.-
업데이트할 열의 이름입니다. 열이 없으면 Azure Databricks에서 UNRESOLVED_COLUMN 오류가 발생합니다.
표현식
값으로 계산되는 하나 이상의 값, 연산자 및 SQL 함수의 조합입니다.
-
DROP column_name [, ...]
쿼리 선택 목록에서 열을 제거합니다.
열이 없으면 Azure Databricks에서 UNRESOLVED_COLUMN 오류가 발생합니다.
AS table_alias
쿼리 결과에 이름을 할당합니다.
-
제공된 조건자를 기반으로 쿼리 결과를 필터링합니다.
-
쿼리에서 반환할 수 있는 최대 행 수를 제한합니다. 이 절은 일반적으로 결정적 결과를 생성하기 위해 ORDER BY 프로세스를 따릅니다.
-
쿼리에서 반환된 여러 행을 건너뜁니다. 이 절은 일반적으로 LIMIT에서 까지 결과 집합을 탐색하는 페이지와 함께 사용되며, ORDER BY을 통해 결정적인 결과를 생성합니다.
집계
제공된 식 및 선택적 그룹화 식을 기반으로 쿼리의 결과 집합을 집계합니다.
이 작업은 그룹화 열이 집계된 열 앞에 나타나는 결과 집합을 생성합니다.
집계
집계할 식을 지정합니다.
-
하나 이상의 집계 함수를 포함하는 식입니다. 자세한 내용은 GROUP BY 참조하세요.
-
GROUP BY
행이 그룹화되는 식을 지정합니다. 지정하지 않으면 모든 행이 단일 그룹으로 처리됩니다.
-
식 결과의 이름을 지정하는 선택적 열 식별자입니다.
column_alias
가 제공되지 않으면 Azure Databricks가 하나를 생성합니다.
-
조인을 사용하여 둘 이상의 관계를 결합합니다. 자세한 내용은 JOIN 참조하세요.
-
쿼리 결과 집합의 행을 정렬합니다. 출력 행은 파티션 전체에서 정렬됩니다. 이 매개 변수는
SORT BY
,CLUSTER BY
,DISTRIBUTE BY
와 상호 배타적이며, 함께 지정할 수 없습니다. -
UNION
,EXCEPT
또는INTERSECT
연산자를 사용하여 하나 이상의 하위 쿼리와 쿼리를 결합합니다. -
행의 일부만 샘플링하여 결과 집합의 크기를 줄입니다.
-
데이터 관점에 사용됩니다. 특정 열 값을 기반으로 집계된 값을 가져올 수 있습니다. 자세한 내용은 PIVOT 참조하세요.
-
데이터 관점으로 사용됩니다. 여러 열 그룹을 행으로 분할할 수 있습니다. 자세한 내용은 UNPIVOT 참조하세요.
예제
-- This query
> FROM customer
|> LEFT OUTER JOIN orders ON c_custkey = o_custkey
AND o_comment NOT LIKE '%unusual%packages%'
|> AGGREGATE COUNT(o_orderkey) c_count
GROUP BY c_custkey
|> AGGREGATE COUNT(*) AS custdist
GROUP BY c_count
|> ORDER BY custdist DESC, c_count DESC;
is equivalent to:
> SELECT c_count, COUNT(*) AS custdist
FROM
(SELECT c_custkey, COUNT(o_orderkey) c_count
FROM customer
LEFT OUTER JOIN orders ON c_custkey = o_custkey
AND o_comment NOT LIKE '%unusual%packages%' GROUP BY c_custkey
) AS c_orders
GROUP BY c_count
ORDER BY custdist DESC, c_count DESC;
-- Using the SELECT clause following a FROM clause
> CREATE TABLE t AS VALUES (0), (1) AS t(col);
> FROM t
|> SELECT col * 2 AS result;
result
------
0
2
-- Adding columns to the result set
> VALUES (0), (1) tab(col)
|> EXTEND col * 2 AS result;
col result
--- ------
0 0
1 2
-- Replacing an expression
> VALUES (0), (1) tab(col)
|> SET col = col * 2;
col
---
0
2
-- Removing a column from the result set
> VALUES (0, 1) tab(col1, col2)
|> DROP col1;
col2
----
1
-- Using a table alias
> VALUES (0, 1) tab(col1, col2)
|> AS new_tab
|> SELECT col1 + col2 FROM new_tab;
col1 + col2
1
-- Filtering the result set
> VALUES (0), (1) tab(col)
|> WHERE col = 1;
col
---
1
-- Using LIMIT to truncate the result
> VALUES (0), (0) tab(col)
|> LIMIT 1;
col
---
0
-- Full-table aggregation
> VALUES (0), (1) tab(col)
|> AGGREGATE COUNT(col) AS count;
count
-----
2
-- Aggregation with grouping
> VALUES (0, 1), (0, 2) tab(col1, col2)
|> AGGREGATE COUNT(col2) AS count GROUP BY col1;
col1 count
---- -----
0 2
-- Using JOINs
> SELECT 0 AS a, 1 AS b
|> AS lhs
|> JOIN VALUES (0, 2) rhs(a, b) ON (lhs.a = rhs.a);
a b c d
--- --- --- ---
0 1 0 2
> VALUES ('apples', 3), ('bananas', 4) t(item, sales)
|> AS produce_sales
|> LEFT JOIN
(SELECT "apples" AS item, 123 AS id) AS produce_data
USING (item)
|> SELECT produce_sales.item, sales, id;
item sales id
--------- ------- ------
apples 3 123
bananas 4 NULL
-- Using ORDER BY
> VALUES (0), (1) tab(col)
|> ORDER BY col DESC;
col
---
1
0
> VALUES (0), (1) tab(a, b)
|> UNION ALL VALUES (2), (3) tab(c, d);
a b
--- ----
0 1
2 3
-- Sampling the result set
> VALUES (0), (0), (0), (0) tab(col)
|> TABLESAMPLE (1 ROWS);
col
---
0
> VALUES (0), (0) tab(col)
|> TABLESAMPLE (100 PERCENT);
col
---
0
0
-- Pivoting a query
> VALUES
("dotNET", 2012, 10000),
("Java", 2012, 20000),
("dotNET", 2012, 5000),
("dotNET", 2013, 48000),
("Java", 2013, 30000)
AS courseSales(course, year, earnings)
|> PIVOT (
SUM(earnings)
FOR COURSE IN ('dotNET', 'Java')
)
year dotNET Java
---- ------ ------
2012 15000 20000
2013 48000 30000
-- Using UNPIVOT
> VALUES
("dotNET", 2012, 10000),
("Java", 2012, 20000),
("dotNET", 2012, 5000),
("dotNET", 2013, 48000),
("Java", 2013, 30000)
AS courseSales(course, year, earnings)
|> UNPIVOT (
earningsYear FOR `year` IN (`2012`, `2013`, `2014`)
course year earnings
-------- ------ --------
Java 2012 20000
Java 2013 30000
dotNET 2012 15000
dotNET 2013 48000
dotNET 2014 22500