Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
  • Оглавление
  • Начало работы
    • Обзор
    • Создание базы данных
    • Аутентификация
    • Интерфейс командной строки YDB CLI
    • Язык запросов YQL
    • YDB SDK
    • Развертывание одноузлового кластера
      • Обзор
      • Docker
      • Бинарный файл
      • Minikube
    • Полезные ссылки
    • Document API, совместимый с Amazon DynamoDB
      • Настройка инструментов AWS
      • Работа с данными через HTTP-интерфейс
      • Работа с AWS CLI
        • Обзор
        • Создание таблицы
        • Добавление данных в таблицу
        • Чтение данных из таблицы
        • Обновление данных
        • Выборка данных
        • Удаление созданных ресурсов
      • Работа с AWS SDK
        • Обзор
        • Создание таблицы
        • Загрузка данных в таблицу
        • Управление записями в таблице
          • Создание записи
          • Чтение записи
          • Обновление записи
          • Удаление записи
        • Поиск и извлечение данных
        • Удаление таблицы
  • Практические руководства
    • Развертывание веб-приложения
    • Разработка Slack-бота
    • Подключение к YDB из функции Yandex Cloud Functions на Python
    • Подключение к базе данных YDB из функции Yandex Cloud Functions на Node.js
    • Конвертация видео в GIF на Python
    • Разработка навыка Алисы и сайта с авторизацией
  • Концепции
    • Обзор
    • Термины и определения
    • Соединение с БД и аутентификация
    • Модель данных и схема
    • Режимы работы Serverless и Dedicated
    • Транзакции
    • Вторичные индексы
    • Time to Live (TTL)
    • Скан запросы
    • Ограничения базы данных
    • Кластер YDB
      • Обзор
      • Общая схема YDB
      • Дисковая подсистема кластера
    • Квоты и лимиты
  • Пошаговые инструкции
    • Обзор
    • Переименование
    • Использование плана запроса и AST
    • Чтение и запись данных
    • Работа со вторичными индексами
  • Рекомендации
    • Обзор
    • Выбор первичного ключа для максимальной производительности
    • Вторичные индексы
    • Постраничный вывод
    • Загрузка больших объемов данных
    • Использование таймаутов
  • Управление базами данных
    • Обзор
    • Облачная консоль управления
      • Обзор
      • Создание, изменение, удаление баз данных
      • Таблицы и директории
      • Управление доступом
    • Интерфейс командной строки YC CLI
    • Резервное копирование и восстановление
    • Диагностика
      • Обзор
      • Системные таблицы
      • Мониторинг
  • Правила тарификации
    • Обзор
    • Бессерверный режим
      • Правила тарификации для бессерверного режима
      • Стоимость запроса для YQL
      • Стоимость запроса для Document API
      • Стоимость запроса для специальных API
    • Режим с выделенными инстансами
  • HTTP API, совместимый с Amazon DynamoDB
    • Все методы
    • Actions
      • BatchGetItem
      • BatchWriteItem
      • CreateTable
      • DeleteItem
      • DeleteTable
      • DescribeTable
      • DescribeTimeToLive
      • GetItem
      • ListTables
      • PutItem
      • Query
      • Scan
      • TransactGetItems
      • TransactWriteItems
      • UpdateItem
      • UpdateTimeToLive
    • Общие ошибки
  • YQL
    • Обзор
    • Типы данных
      • Обзор
      • Простые
      • Опциональные
      • Контейнеры
      • Специальные
      • Преобразования типов
      • Текстовое представление типов данных
      • JSON
    • Синтаксис
      • Обзор
      • Лексическая структура
      • Выражения
      • ACTION
      • ALTER TABLE
      • CREATE TABLE
      • DECLARE
      • DELETE
      • DISCARD
      • DROP TABLE
      • GROUP BY
      • FLATTEN
      • INSERT
      • INTO RESULT
      • JOIN
      • PRAGMA
      • REPLACE
      • SELECT
      • UPDATE
      • UPSERT
      • VALUES
      • WINDOW
      • Неподдерживаемые конструкции
    • Встроенные функции
      • Обзор
      • Базовые
      • Агрегатные
      • Оконные
      • Для работы со списками
      • Для работы со словарями
      • Для работы со структурами
      • Для работы с типами
      • Для работы с JSON
      • Библиотеки C++
        • Обзор
        • Hyperscan
        • Pcre
        • Pire
        • Re2
        • String
        • Unicode
        • DateTime
        • Url
        • Ip
        • Yson
        • Digest
        • Math
        • Histogram
    • Туториал YQL
      • Обзор
      • Создание таблицы
      • Добавление данных в таблицу
      • Выборка данных из всех колонок
      • Выборка данных из определенных колонок
      • Сортировка и фильтрация
      • Агрегирование данных
      • Дополнительные условия выборки
      • Объединение таблиц с помощью JOIN
      • Вставка и модификация данных с помощью REPLACE
      • Вставка и модификация данных с помощью UPSERT
      • Вставка данных с помощью INSERT
      • Обновление данных с помощью UPDATE
      • Удаление данных
      • Добавление и удаление колонок
      • Удаление таблицы
  • Работа с YDB CLI
    • Обзор
    • Установка
    • Структура команд YDB CLI
    • Сервисные команды
    • Соединение с БД и аутентификация
    • Глобальные параметры
    • Работа со схемой БД
      • Список объектов
      • Информация об объекте
      • Директории
      • Вторичные индексы
      • Переименование таблиц
    • Работа с данными
      • Выполнение запроса к данным
      • План исполнения запроса
      • Потоковое чтение таблицы
      • Скан запросы
    • Загрузка и выгрузка данных
      • Обзор
      • Файловая структура выгрузки
      • Выгрузка в файловую систему
      • Загрузка из файловой системы
      • Соединение и аутентификация с S3
      • Выгрузка в S3
      • Загрузка из S3
      • Импорт данных из файла в существующую таблицу
    • Управление профилями
      • Обзор
      • Создание профиля
      • Использование профиля в запросах
      • Получение информации о профиле
      • Удаление профиля
      • Активированный профиль
    • Информационные сервисы
      • Список эндпоинтов
      • Проверка аутентификации
    • Нагрузочное тестирование
      • Обзор
      • Stock нагрузка
  • Работа с YDB SDK
    • Обзор
    • Установка
    • Аутентификация
    • Тестовое приложение
      • Обзор
      • C++
      • C# (.NET)
      • Go
      • Java
      • Node.js
      • PHP
      • Python
      • Архив
        • Go v1
        • Go v2
    • Обработка ошибок в API
    • Рецепты кода
      • Обзор
      • Аутентификация
        • Обзор
        • С помощью токена
        • Анонимная
        • Файл сервисного аккаунта
        • Сервис метаданных
        • С помощью переменных окружения
        • С помощью логина и пароля
      • Балансировка
        • Обзор
        • Равномерный случайный выбор
        • Предпочитать ближайший дата-центр
        • Предпочитать зону доступности
      • Выполнение повторных запросов
      • Диагностика проблем
        • Обзор
        • Включить логирование
        • Подключить метрики в Prometheus
        • Подключить трассировку в Jaeger
      • Установить размер пула сессий
      • Вставка данных
      • Пакетная вставка данных
  • Управление кластером
    • Обзор
    • Развертывание
      • Обзор
      • Kubernetes
        • Обзор
        • Развертывание в Yandex Managed Service for Kubernetes
        • Развертывание в AWS Elastic Kubernetes Service
        • Эксплуатация
      • VM / Baremetal
      • Конфигурация
    • Обслуживание дисковой подсистемы кластера
      • Обзор
      • Способы предотвращения выхода за модель отказа
      • Балансировка нагрузки на диски
      • Способы освобождения места на физических устройствах
      • Расширение кластера
      • Добавление групп хранения
      • Безопасные рестарт и выключение узлов
      • Включение/выключение SelfHeal
      • Включение/выключение Scrubbing
      • Перевоз VDisk'ов
      • Изменение конфигураций через CMS
      • Изменение конфигурации акторсистемы
    • Встроенный UI
      • Обзор
      • YDB Monitoring
      • Hive web-viewer
      • Обзор соединений
      • Логи
      • Графики
    • Системные таблицы
  • Вопросы и ответы
    • Обзор
    • Общие вопросы
    • Ошибки
    • YQL
    • Serverless
    • Все вопросы на одной странице
  • Публичные материалы
  1. YQL
  2. Синтаксис
  3. Лексическая структура

Лексическая структура

Статья создана
Yandex Cloud
  • Режимы совместимости синтаксиса
  • Комментарии
  • Ключевые слова и идентификаторы
  • Строковые литералы
    • Многострочные строковые литералы
    • Типизированные строковые литералы
  • Числовые литералы

Запрос на языке YQL представляет собой валидный UTF-8 текст, который состоит из команд (statement) разделенных символом точка с запятой (;).
Последняя точка с запятой при этом может отсутствовать.
Каждая команда, в свою очередь, состоит из последовательности токенов допустимых для данной команды.
Токеном может быть ключевое слово, идентификатор, литерал и другие.
Токены разделяются пробельными символами (пробел, табуляция, перевод строки) либо комментариями. Комментарий не является частью команды и синтаксически эквивалентен пробельному символу.

Режимы совместимости синтаксиса

Поддерживаются два режима совместимости синтаксиса:

  • Расширенный C++ (по-умолчанию)
  • ANSI SQL

Режим ANSI SQL включается с помощью специального комментария --!ansi-lexer, который должен стоять в начале запроса.

Особенности интерпретации лексических элементов в разных режимах совместимости описаны ниже.

Комментарии

Поддерживаются следующие виды комментариев:

  • Однострочные: начинается с последовательности символов -- (два минуса подряд) и продолжается до конца строки
  • Многострочные: начинается с последовательности символов /* и заканчивается на последовательности символов */
SELECT 1; -- A single-line comment
/*
   Some multi-line comment
*/

В режиме совместимости синтаксиса C++ (по-умолчанию) многострочный комментарий заканчивается на ближайшей последовательности символов */.
В режиме совместимости синтаксиса ANSI SQL учитывается вложенность многострочных комментариев:

--!ansi_lexer
SELECT * FROM T; /* комментарий /* вложенный комментарий, без ansi_lexer будет ошибка  */ */

Ключевые слова и идентификаторы

Ключевые слова – это токены, имеющее фиксированное значение в языке YQL. Примеры ключевых слов – SELECT, INSERT, FROM, ACTION и т.д. Ключевые слова регистронезависимы, то есть SELECT и SeLEcT эквивалентны.
Список ключевых слов не фиксирован – по мере развития языка он будет расширяться. Ключевое слово не может содержать цифры и начинаться или заканчиваться символом подчеркивания.

Идентификаторы – это токены, которые идентифицируют имена таблиц, колонок и других объектов в YQL. Идентификаторы в YQL всегда регистрозависимы.
Идентификатор может быть записан в теле программы без специального оформления, если он:

  • Не является ключевым словом
  • Начинается с латинской буквы или подчеркивания
  • Последующими символами могут быть латинская буква, подчеркивание или цифра
SELECT my_column FROM my_table; -- my_column and my_table are identifiers

Для записи в теле запроса произвольного идентификатора он заключается в обратные кавычки (бэктики):

SELECT `column with space` from T;
SELECT * FROM `my_dir/my_table`

Идентификатор в обратных кавычках никогда не интерпретируется как ключевое слово:

SELECT `select` FROM T; -- select - имя колонки в таблице T

При использовании обратных кавычек применим стандартный C-эскейпинг:

SELECT 1 as `column with\n newline, \x0a newline and \` backtick `;

В режиме совместимости синтаксиса ANSI SQL произвольные идентификаторы также могут быть выделены заключением их в двойные кавычки. Для включения двойной кавычки в идентификатор в кавычках она должна быть удвоена:

--!ansi_lexer
SELECT 1 as "column with "" double quoute"; -- имя колонки будет: column with " double quoute

Строковые литералы

Строковый литерал (константа) записывается как последовательность символов, заключенных в одинарные кавычки. Внутри строкового литерала можно использовать правила эскейпинга в стиле C:

SELECT 'string with\n newline, \x0a newline and \' backtick ';

В режиме совместимости синтаксиса С++ (по-умолчанию) разрешается использовать вместо одинарных кавычек двойные:

SELECT "string with\n newline, \x0a newline and \" backtick ";

В режиме совместимости синтаксиса ASNI SQL двойные кавычки используются для идентификаторов, а единственный вид эскепинга который действует для строковых литералов – это дублирование символа одиночной кавычки:

--!ansi_lexer
SELECT 'string with '' quote'; -- результат: string with ' quote

На основании строковых литералов могут быть получены литералы простых типов.

Многострочные строковые литералы

Многострочный строковой литерал записывается в виде произвольного набора символов между двойными собачками @@:

$text = @@some
multiline
text@@;
SELECT LENGTH($text);

Если необходимо вставить в текст двойную собачку, ее необходимо удвоить:

$text = @@some
multiline with double at: @@@@
text@@;
SELECT $text;

Типизированные строковые литералы

  • Для строкового литерала, включая многострочный, по умолчанию используется тип String.
  • С помощью следующих суффиксов можно явно управлять типом литерала:
    • u — Utf8;
    • y — Yson;
    • j — Json.

Пример:

SELECT "foo"u, '[1;2]'y, @@{"a":null}@@j;

Числовые литералы

  • Целочисленные литералы по умолчанию имеют тип Int32, если попадают в его диапазон, и в противном случае автоматически расширяются до Int64.
  • С помощью следующих суффиксов можно явно управлять типом литерала:
    • l — Int64;
    • s — Int16;
    • t — Int8.
  • Добавление суффикса u превращает тип в соответствующий беззнаковый:
    • ul — Uint64;
    • u — Uint32;
    • us — Uint16;
    • ut — Uint8.
  • Также для целочисленных литералов доступна запись в шестнадцатеричной, восьмеричной и двоичной форме с помощью префиксов 0x, 0o и 0b, соответственно. Их можно произвольным образом комбинировать с описанными выше суффиксами.
  • Литералы с плавающей точкой по умолчанию имеют тип Double, но с помощью суффикса f его можно сузить до Float.
SELECT
  123l AS `Int64`,
  0b01u AS `Uint32`,
  0xfful AS `Uint64`,
  0o7ut AS `Uint8`,
  456s AS `Int16`,
  1.2345f AS `Float`;

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Режимы совместимости синтаксиса
  • Комментарии
  • Ключевые слова и идентификаторы
  • Строковые литералы
  • Многострочные строковые литералы
  • Типизированные строковые литералы
  • Числовые литералы