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


SELECT (подвыборка)

Область применения:флажок Databricks SQL флажок Databricks Runtime

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

Синтаксис

  SELECT 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 } [, ...] )

Параметры

  • пункт SELECT

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

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