Поделиться через


Конвейерная обработка

применимо:отмечено как 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 могут содержать ссылки на столбцы в списке выбора запросов, а также на предыдущие column_alias в этом условии EXTEND.

    • column_alias

      Необязательный идентификатор столбца, именующий результат выражения. Если column_alias не предоставлен, Azure Databricks сам выводит его.

  • SET

    Заменяет существующие столбцы в списке выборки запроса новыми значениями.

    Операция выполняется в порядке появления в условии SET. Результат любого выражения может быть отражением изменений в столбцах, обновленных предыдущими выражениями.

    • название_столбца

      Имя столбца, который нужно обновить. Если столбец не существует, Azure Databricks вызывает ошибку UNRESOLVED_COLUMN.

    • выражение

      Сочетание одного или нескольких значений, операторов и функций SQL, которые оценивают значение.

  • DROP column_name [, ...]

    Удаляет столбцы из списка выбора запроса.

    Если столбец не существует, Azure Databricks вызывает ошибку UNRESOLVED_COLUMN.

  • AS table_alias

    Назначает имя результату запроса.

  • WHERE

    Фильтрует результат запроса на основе предоставленных предикатов.

  • LIMIT

    Ограничивает максимальное количество строк, которые могут быть возвращены запросом. Это условие обычно следует за ORDER BY, чтобы обеспечить детерминированный результат.

  • OFFSET

    Пропускает ряд строк, возвращаемых запросом. Это условие обычно используется в сочетании с LIMIT по страницы по результирующему набору и ORDER BY для получения определенного результата.

    Заметка

    При просмотре набора результатов с помощью LIMIT и OFFSET обрабатываются все строки, включая те, которые были пропущены. Однако в результирующем наборе возвращается только указанное подмножество строк. Разбиение на страницы с помощью этого метода не рекомендуется для ресурсоемких запросов.

  • агрегирования

    Агрегирует результирующий набор запроса на основе предоставленных выражений и необязательных выражений группировки.

    Эта операция создает результирующий набор, в котором столбцы группировки отображаются перед агрегированными столбцами.

    • АГРЕГАТ

      Задает выражения для агрегирования.

      • aggregate_expr

        Выражение, содержащее одну или несколько агрегатных функций. Дополнительные сведения см. в GROUP BY.

    • GROUP BY

      Указывает, по каким выражениям группируются строки. Если не указано, все строки обрабатываются как одна группа.

      • группировка_выражение

        Выражение, определяющее столбцы группировки. Дополнительные сведения см. в GROUP BY.

        В отличие от универсального предложения GROUP BY, целочисленное числовое значение определяет столбец в запросе, который предоставляет входные данные, а не созданный результирующий набор.

    • column_alias

      Необязательный идентификатор столбца, именующий результат выражения. Если column_alias не предоставлен, Azure Databricks выводит его автоматически.

  • JOIN

    Объединяет два или более отношения с использованием операции соединения. Смотрите JOIN для получения дополнительной информации.

  • ORDER BY

    Упорядочивает строки результирующего набора запроса. Выходные строки упорядочены по секциям. Этот параметр является взаимоисключающим с SORT BY, CLUSTER BYи DISTRIBUTE BY и не может быть указан вместе.

  • set_operator

    Объединяет запрос с одним или несколькими вложенными запросами с помощью 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