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


Синтаксис конвейера SQL

применимо:установлен флажок Databricks Runtime 16.2 и более поздние версии

Azure Databricks поддерживает синтаксис конвейера SQL, который позволяет создавать запросы из сочетаний цепочки операторов.

  • Любой запрос может иметь ноль или несколько операторов канала в виде суффикса, очерченного символом канала |>.
  • Каждая конвейерная операция начинается с одного или нескольких ключевых слов SQL, и за ними следует собственная грамматика.
  • Операторы могут применяться в любом порядке, любое количество раз.
  • Обычно FROM relation_name используется для запуска конвейера, но любой запрос может запустить конвейер.

Синтаксис

{ FROM | TABLE } relation_name { |> piped_operation } [ ...]

Параметры

  • relation_name

    Определяет таблицу или представление, которые будут использоваться в качестве входных данных для конвейера. Если таблица или представление не найдены, Azure Databricks вызывает ошибку TABLE_OR_VIEW_NOT_FOUND.

  • конвейерная_операция

    Операция, используюющая предыдущую операцию запроса или канала. См. раздел piped_operation для более подробной информации.

Пример

Это запрос 13 из теста TPC-H, написанного в ANSI SQL:

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

Чтобы написать ту же логику с помощью операторов канала SQL, можно выразить следующее:

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