# Data Query Language

Data Query Language — команды языка SQL, читающие данные (как
сгенерированные, так и уже находящиеся в таблицах). Для чтения данных из
таблиц используется команда `SELECT`.

## Синтаксис {: #syntax }

![DQL](../../images/ebnf/dql.svg)

## Параметры {: #params }

* **SQL_VDBE_OPCODE_MAX** — ограничение на максимальное количество
  [инструкций ](https://www.sqlite.org/opcode.html) при исполнении
  локального плана ([VDBE](https://www.sqlite.org/vdbe.html)) на узле
  кластера.

* **SQL_MOTION_ROW_MAX** — ограничение на максимальное число строк в
  результирующей виртуальной таблице, собирающей результаты отдельных
  локальных запросов.

* **READ_PREFERENCE** — предпочтительная стратегия чтения данных с репликасета.
  Допустимые значения:
    * `LEADER` (по умолчанию) — чтение производится только с [лидеров](../../overview/glossary.md#leader) [репликасетов](../../overview/glossary.md#replicaset).
    Это безопасная и рекомендуемая стратегия, так как [vshard](../../overview/glossary.md#vshard) контролирует перемещение бакетов только на лидерах.
    В [неблокирующем SQL](non_block.md) чтение всегда выполняется с лидеров, другие значения опции вернут ошибку.
    * `ANY` — чтение производится с ближайшей доступной реплики, а при её отсутствии — с лидера.
    Если запрос может быть полностью выполнен через локальный fast-path на экземпляре, куда он пришёл
    (например, запрос маршрутизируется в локальный репликасет или весь целевой tier локален),
    то Picodata выполняет его на текущем экземпляре, включая лидера. Это поведение уменьшает
    число сетевых пересылок для локальных запросов.
    **Важно:** во время выполнения DQL-запросов не должно быть пишущей нагрузки и изменений топологии кластера. Это помогает избежать перемещения бакетов, которое может привести к неконсистентным результатам.
    Использование этой стратегии помогает лучше утилизировать ресурсы.
    * `REPLICA` — чтение производится только с ближайшей доступной реплики, а при её отсутствии запрос возвращает ошибку.
    Если запрос может быть полностью выполнен через локальный fast-path на экземпляре, куда он пришёл,
    то этот fast-path используется только на реплике. Если тот же запрос приходит на лидер,
    Picodata отправляет его на доступную реплику обычным маршрутом, а не исполняет локально.
    Требования к отсутствию пишущей нагрузки и изменений топологии аналогичны `ANY`.
