Введение

YQL (Yandex Query Language) — универсальный декларативный язык запросов к системам хранения и обработки данных, а также инфраструктура для их выполнения. К преимуществам YQL можно отнести:

  • мощный графовый движок исполнения, который строит MapReduce-pipelines из сотен узлов и может адаптивно перестраиваться по ходу вычисления;
  • возможность построения сложного конвейера обработки данных на SQL с сохранением подзапросов в переменные в виде цепочек зависимых запросов и транзакций;
  • предсказуемое параллельное исполнение запросов произвольной сложности;
  • эффективная реализация join-ов, подзапросов и оконных функций без ограничений на их топологию и вложенность;
  • богатая библиотека функций;
  • поддержка пользовательских функций на C++, Python;
  • автоматическое исполнение небольших частей запросов на заранее подготовленных вычислительных инстансах в обход MapReduce-операций для уменьшения времени выполнения.

YQL предоставляет функциональный веб-интерфейс, в котором среди прочего можно:

  • писать код запросов;
  • запускать и останавливать выполнение запросов;
  • просматривать результат выполнения запросов;
  • просматривать историю запросов.

Как попробовать

Чтобы запустить свой первый YQL-запрос:

  1. Откройте веб-интерфейс YTsaurus кластера и перейдите на вкладку Queries — на неё можно попасть из меню слева.

  2. Введите запрос и нажмите кнопку запуска:

    SELECT "Hello, World!";
    

Глоссарий

Термин

Перевод на английский

Описание

Запрос

Query

Текст программы на YQL

Операция

Operation

Процесс выполнения конкретного запроса (query). Запрос и операция в терминологии YQL соотносятся примерно так же, как программа и процесс в операционной системе

Таблица

Table

Логически таблица — список структур (List<Struct<...>>), который является базовым примитивом при обработке больших объемов данных на YQL.

Элементы списка образуют строки (row), а элементы каждой структуры (member) являются ячейками таблиц. А множество находящихся друг под другом ячеек, соответственно, образуют колонку таблицы (column)

Выражение

Expression

Любое вычисляемое значение. Как правило принимают на вход одну или несколько ячеек таблицы и результат становится ячейкой другой таблицы. Примеры:

  • 2 * 2;
  • String::ToUpper("hi, " \|\| name \|\| "!")

Выражение верхнего уровня

Statement

Составные части запроса (query), разделенные точкой с запятой и начинающиеся с глагола. Примеры:

  • SELECT ...;
  • INSERT INTO ... SELECT ... ;
  • REDUCE ... USING ... ON ...;

Подзапрос

Subquery

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

Именованное выражение

Named node

Механизм для повторного использования выражений (expression) и подзапросов (subquery) в рамках одного запроса (query). Подробнее

Примеры:

  • $foo = 2 + 2;
  • $bar = (SELECT bar FROM my_table);

Лямбда функция

Lambda

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

Пользовательская функция

UDF (User Defined Function)

Возможность встроить в запрос бизнес-логику на одном из поддерживаемых распространённых языков программирования.

UDF на C++ подключаются в скомпилированном в .so виде, а также доступен широкий набор предустановленных. UDF на Python могут использовать скрипт из любой строки внутри запроса, но требуют дополнительного описания своей сигнатуры.

Так как оптимизатор YQL не умеет «заглядывать» внутрь интерпретатора Python, то с точки зрения производительности рекомендуется предпочитать использовать лямбда функции и C++ UDF

Действие

Action

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

Библиотека

Library

Часть запроса, вынесенная в отдельный файл для повторного использования или просто удобства. Подробнее

Предыдущая
Следующая