SELECT

Область применения:check marked yes Databricks SQL check marked yes Databricks Runtime

Создает результирующий набор из одной или нескольких ссылок на таблицу. Предложение SELECT может быть частью запроса, который также содержит обобщенные табличные выражения (CTE), операции над множествами и другие предложения.

Синтаксис

SELECT [ hints ] [ ALL | DISTINCT ] { named_expression | star_clause } [, ...]
  FROM table_reference [, ...]
  [ LATERAL VIEW clause ]
  [ WHERE clause ]
  [ GROUP BY clause ]
  [ HAVING clause]
  [ QUALIFY clause ]

named_expression
   expression [ column_alias ]

star_clause
   [ { table_name | view_name } . ] * [ except_clause ]

except_clause
   EXCEPT ( { column_name | field_name } [, ...] )

Параметры

  • hints

    Подсказки помогают оптимизатору Azure Databricks принимать лучшие решения по планированию. Azure Databricks поддерживает указания, влияющие на выбор стратегий присоединения и повторное выделение данных.

  • ALL

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

  • DISTINCT

    Выберите все соответствующие строки из ссылок на таблицу после удаления повторяющихся результатов.

  • named_expression

    Выражение с необязательным назначенным именем.

    • выражение

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

    • column_alias

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

  • star_clause

    Короткое название всех ссылочных столбцов в FROM предложении или столбцов или полей ссылки на таблицу в предложении FROM .

  • table_reference

    Источник входных данных для SELECT. Эту ссылку на входные данные можно превратить в потоковую ссылку с помощью STREAM ключевое слово перед ссылкой.

  • LATERAL VIEW

    Используется в сочетании с EXPLODE и другими функциями генератора, которые создают виртуальную таблицу с одной или несколькими строками. LATERAL VIEW применяет эти строки к каждой исходной строке в выходных данных.

    В Databricks SQL и начиная с Databricks Runtime 12.2 это предложение устарело. Вы должны вызвать функцию генератора с табличным значением в качестве table_reference.

  • WHERE

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

  • GROUP BY

    Выражения, используемые для группирования строк. Используется совместно с агрегатными функциями (MIN, MAX, COUNT, SUM, AVG) для группирования строк на основе выражений группирования и агрегатных значений в каждой группе. Если предложение FILTER вложено в агрегатную функцию, в эту функцию передаются только соответствующие строки.

  • HAVING

    Предикаты, по которым фильтруются строки, производимые командой GROUP BY. Предложение HAVING используется для фильтрации строк после группирования. Если указать HAVING без GROUP BY, это будет означать команду GROUP BY без выражений группирования (глобальное статистическое выражение).

  • QUALIFY

    Предикаты, используемые для фильтрации результатов функций окон. Для использования QUALIFY в списке SELECT или в предложении QUALIFY должна присутствовать хотя бы одна функция окна.

Выбор данных в разностной таблице

Помимо стандартных параметров SELECT разностные таблицы поддерживают параметры перехода по времени, описанные в этом разделе. Дополнительные сведения см. в разделе " Работа с журналом таблиц Delta Lake".

Синтаксис AS OF

table_identifier TIMESTAMP AS OF timestamp_expression

table_identifier VERSION AS OF version
  • timestamp_expression может быть одним из следующих вариантов:
    • '2018-10-18T22:15:12.013Z', то есть строкой, которая может приводиться к метке времени;
    • cast('2018-10-18 13:36:32 CEST' as timestamp)
    • '2018-10-18', то есть строкой даты.
    • current_timestamp() - interval 12 hours
    • date_sub(current_date(), 1)
    • Любое другое выражение, которое является меткой времени или может быть приведено к ней
  • version — это длинное значение, которое можно получить из выходных данных DESCRIBE HISTORY table_spec.

Ни timestamp_expression, ни version не может быть подзапросом.

Пример

> SELECT * FROM events TIMESTAMP AS OF '2018-10-18T22:15:12.013Z'

> SELECT * FROM delta.`/mnt/delta/events` VERSION AS OF 123

Синтаксис @

Используйте синтаксис @ для указания метки времени или версии. Метка времени должна быть указана в формате yyyyMMddHHmmssSSS. Вы можете указать версию после @, добавив к версии v. Например, чтобы запросить версию 123 для таблицы events, укажите events@v123.

Пример

> SELECT * FROM events@20190101000000000

> SELECT * FROM events@v123

Примеры

-- select all referencable columns from all tables
> SELECT * FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
  1   2   3   4

-- select all referencable columns from one table
> SELECT t2.* FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
  3   4

-- select all referencable columns from all tables except t2.c4
> SELECT * EXCEPT(c4) FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
  1   2   3

-- select all referencable columns from a table, except a nested field.
> SELECT * EXCEPT(c2.b) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
  1  { "a" : 2 }

-- Removing all fields results in an empty struct
> SELECT * EXCEPT(c2.b, c2.a) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
  1  { }

-- Overlapping names result in an error
> SELECT * EXCEPT(c2, c2.a) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
  Error: EXCEPT_OVERLAPPING_COLUMNS