다음을 통해 공유


파이프 작업

적용 대상:체크 표시 있음 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 ] ]

매개 변수

  • SELECT 절

    식 실행 및 중복 제거를 포함하여 쿼리에서 반환할 열을 수집합니다.

    열 목록에 집계 함수가 포함되어서는 안 됩니다. 해당 용도로 AGGREGATE 작업을 사용합니다.

  • 확장

    쿼리 선택 목록에 새 열을 추가합니다.

    • 표현

      값으로 계산되는 하나 이상의 값, 연산자 및 SQL 함수의 조합입니다.

      expression은 이 EXTEND 절에서 쿼리 선택 목록의 열에 대한 참조 및 이전 column_alias을 포함할 수 있습니다.

    • column_alias

      식 결과의 이름을 지정하는 선택적 열 식별자입니다. column_alias이 제공되지 않으면 Azure Databricks가 값을 유추합니다.

  • SET

    쿼리 선택 목록의 기존 열을 새 값으로 재정의합니다.

    이 작업은 SET 절에서 나타나는 순서대로 수행됩니다. 식의 결과는 이전 식에 의해 업데이트된 열을 참조할 수 있습니다.

    • column_name

      업데이트할 열의 이름입니다. 열이 없으면 Azure Databricks에서 UNRESOLVED_COLUMN 오류가 발생합니다.

    • 표현식

      값으로 계산되는 하나 이상의 값, 연산자 및 SQL 함수의 조합입니다.

  • DROP column_name [, ...]

    쿼리 선택 목록에서 열을 제거합니다.

    열이 없으면 Azure Databricks에서 UNRESOLVED_COLUMN 오류가 발생합니다.

  • AS table_alias

    쿼리 결과에 이름을 할당합니다.

  • WHERE

    제공된 조건자를 기반으로 쿼리 결과를 필터링합니다.

  • LIMIT

    쿼리에서 반환할 수 있는 최대 행 수를 제한합니다. 이 절은 일반적으로 결정적 결과를 생성하기 위해 ORDER BY 프로세스를 따릅니다.

  • OFFSET

    쿼리에서 반환된 여러 행을 건너뜁니다. 이 절은 일반적으로 LIMIT에서 까지 결과 집합을 탐색하는 페이지와 함께 사용되며, ORDER BY을 통해 결정적인 결과를 생성합니다.

    메모

    LIMITOFFSET을 사용하여 결과 집합을 넘기면서, 건너뛴 행을 포함하여 모든 행이 처리됩니다. 그러나 지정된 행 하위 집합만 결과 집합에 반환됩니다. 이 기술을 사용한 페이지 매김은 리소스 집약적 쿼리에는 권장되지 않습니다.

  • 집계

    제공된 식 및 선택적 그룹화 식을 기반으로 쿼리의 결과 집합을 집계합니다.

    이 작업은 그룹화 열이 집계된 열 앞에 나타나는 결과 집합을 생성합니다.

    • 집계

      집계할 식을 지정합니다.

      • aggregate_expr

        하나 이상의 집계 함수를 포함하는 식입니다. 자세한 내용은 GROUP BY 참조하세요.

    • GROUP BY

      행이 그룹화되는 식을 지정합니다. 지정하지 않으면 모든 행이 단일 그룹으로 처리됩니다.

      • grouping_expr

        그룹화 열을 식별하는 식입니다. 자세한 내용은 GROUP BY 참조하세요.

        제네릭 GROUP BY 절과 달리 정수 숫자 값은 생성된 결과 집합이 아니라 입력을 제공하는 쿼리의 열을 식별합니다.

    • column_alias

      식 결과의 이름을 지정하는 선택적 열 식별자입니다. column_alias가 제공되지 않으면 Azure Databricks가 하나를 생성합니다.

  • JOIN

    조인을 사용하여 둘 이상의 관계를 결합합니다. 자세한 내용은 JOIN 참조하세요.

  • ORDER BY

    쿼리 결과 집합의 행을 정렬합니다. 출력 행은 파티션 전체에서 정렬됩니다. 이 매개 변수는 SORT BY, CLUSTER BY, DISTRIBUTE BY와 상호 배타적이며, 함께 지정할 수 없습니다.

  • 세트 연산자

    UNION, EXCEPT또는 INTERSECT 연산자를 사용하여 하나 이상의 하위 쿼리와 쿼리를 결합합니다.

  • TABLESAMPLE

    행의 일부만 샘플링하여 결과 집합의 크기를 줄입니다.

  • PIVOT

    데이터 관점에 사용됩니다. 특정 열 값을 기반으로 집계된 값을 가져올 수 있습니다. 자세한 내용은 PIVOT 참조하세요.

  • UNPIVOT

    데이터 관점으로 사용됩니다. 여러 열 그룹을 행으로 분할할 수 있습니다. 자세한 내용은 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