---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ydb.tech/docs/en/yql/reference/syntax/select/with.md?version=v26.1
  - https://ydb.tech/docs/ru/yql/reference/syntax/select/with.md?version=v26.1
  - href: ru/yql/reference/syntax/select/with.md
    type: text/markdown
    title: Markdown version
  - href: ../../../../llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/yql/reference/syntax/select/with.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# WITH

Задается после источника данных во `FROM` и используется для указания дополнительных подсказок использования таблиц. Подсказки нельзя задать для подзапросов и [именованных выражений](https://ydb.tech/docs/ru/yql/reference/syntax/expressions.md?version=v26.1#named-nodes).

Поддерживаются следующие значения:

* `INFER_SCHEMA` — задает флаг вывода схемы таблицы. Поведение аналогично заданию [прагмы yt.InferSchema](https://ydb.tech/docs/ru/yql/reference/syntax/pragma.md?version=v26.1#inferschema), только для конкретного источника данных. Можно задать число строк для выведения (число от 1 до 1000).
* `FORCE_INFER_SCHEMA` — задает флаг вывода схемы таблицы. Поведение аналогично заданию [прагмы yt.ForceInferSchema](https://ydb.tech/docs/ru/yql/reference/syntax/pragma.md?version=v26.1#inferschema), только для конкретного источника данных. Можно задать число строк для выведения (число от 1 до 1000).
* `DIRECT_READ` — подавляет работу некоторых оптимизаторов и заставляет использовать содержимое таблицы как есть. Поведение аналогично заданию отладочной [прагмы DirectRead](https://ydb.tech/docs/ru/yql/reference/syntax/pragma.md?version=v26.1#debug), только для конкретного источника данных.
* `INLINE` — указание на то, что содержимое таблицы небольшое и нужно использовать его представление в памяти для обработки запроса. Реальный объем таблицы при этом не контролируется, и если он большой, то запрос может упасть по превышению памяти.
* `UNORDERED` — подавляет использование исходной сортировки таблицы.
* `XLOCK` — указание на то, что нужно брать эксклюзивный лок на таблицу. Полезен, когда чтение таблицы происходит на стадии обработки [метапрограммы запроса](https://ydb.tech/docs/ru/yql/reference/syntax/action.md?version=v26.1), а затем ее содержимое обновляется в основном запросе. Позволяет избежать потери данных, если между исполнением фазы метапрограммы и основной частью запроса внешний процесс успел изменить таблицу.
* `SCHEMA` type — указание на то, что следует использовать указанную схему таблицы целиком, игнорируя схему в метаданных.
* `COLUMNS` type — указание на то, что следует использовать указанные типы для колонок, чьи имена совпадают с именами колонок таблицы в метаданных, а также какие колонки дополнительно присутствуют в таблице.
* `IGNORETYPEV3`, `IGNORE_TYPE_V3` — задает флаг игнорирования type_v3 типов в таблице. Поведение аналогично заданию [прагмы yt.IgnoreTypeV3](https://ydb.tech/docs/ru/yql/reference/syntax/pragma.md?version=v26.1#ignoretypev3), только для конкретного источника данных.


При работе с [внешними файловыми источниками данных](https://ydb.tech/docs/ru/concepts/datamodel/external_data_source.md?version=v26.1) можно дополнительно указывать ряд параметров:

* `FORMAT` - формат хранимых данных в файловых хранилищах в [федеративных запросах](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/formats.md?version=v26.1). Допустимые значения: `csv_with_names`, `tsv_with_names`, `json_list`, `json_each_row`, `json_as_string`, `parquet`, `raw`.
* `COMPRESSION` - формат сжатия файлов в файловых хранилищах в [федеративных запросах](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/partition_projection.md?version=v26.1). Допустимые значения: [gzip](https://ru.wikipedia.org/wiki/Gzip), [zstd](https://ru.wikipedia.org/wiki/Zstandard), [lz4](https://ru.wikipedia.org/wiki/LZ4), [brotli](https://ru.wikipedia.org/wiki/Brotli), [bzip2](https://ru.wikipedia.org/wiki/Bzip2), [xz](https://ru.wikipedia.org/wiki/XZ).
* `PARTITIONED_BY` - список [колонок партиционирования](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/partitioning.md?version=v26.1) данных в файловых хранилищах в федеративных запросах. Содержит список колонок в порядке их размещения в файловом хранилище.
* `projection.enabled` - флаг включения [расширенного партиционирования данных](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/partition_projection.md?version=v26.1). Допустимые значения: `true`, `false`.
* `projection.<field_name>.type` - тип поля [расширенного партиционирования данных](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/partition_projection.md?version=v26.1). Допустимые значения: `integer`, `enum`, `date`.
* `projection.<field_name>.<options>` - расширенные свойства поля [расширенного партиционирования данных](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/partition_projection.md?version=v26.1).

При чтении из [топика](https://ydb.tech/docs/ru/concepts/datamodel/topic.md?version=v26.1) в [потоковых запросах](https://ydb.tech/docs/ru/dev/streaming-query/index.md?version=v26.1) можно указывать параметры watermarks:

<!-- source: ru/_includes/watermark_parameters.md -->
* `WATERMARK` — выражение для вычисления [watermark](https://ydb.tech/docs/ru/dev/streaming-query/watermarks.md?version=v26.1). Сейчас поддерживается только время записи в [топик](https://ydb.tech/docs/ru/concepts/datamodel/topic.md?version=v26.1) с константной задержкой. Формат: `__ydb_write_time - Interval("<delay>")`, где `<delay>` задаётся в формате [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Durations).
* `WATERMARK_GRANULARITY` — периодичность генерации watermarks. Чем она меньше, тем больше потребление CPU запросом и тем меньше задержка ответа. Имеет смысл только для [потоковых запросов](https://ydb.tech/docs/ru/dev/streaming-query/index.md?version=v26.1). Задаётся в формате [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Durations). Значение по умолчанию — 1 секунда.
* `WATERMARK_IDLE_TIMEOUT` — период, после которого [простаивающая партиция](https://ydb.tech/docs/ru/dev/streaming-query/watermarks.md?version=v26.1#idle-partitions) будет исключена из вычисления объединённого watermark. Имеет смысл только для [потоковых запросов](https://ydb.tech/docs/ru/dev/streaming-query/index.md?version=v26.1). Задаётся в формате [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Durations). Значение по умолчанию — 5 секунд.
<!-- endsource: ru/_includes/watermark_parameters.md -->

При задании подсказок `SCHEMA` и `COLUMNS` в качестве значения типа type должен быть задан тип [структуры](https://ydb.tech/docs/ru/yql/reference/types/containers.md?version=v26.1).


## Примеры

```yql
SELECT key FROM my_table WITH INFER_SCHEMA;
SELECT key FROM my_table WITH FORCE_INFER_SCHEMA="42";
```

```yql
$s = (SELECT COUNT(*) FROM my_table WITH XLOCK);

INSERT INTO my_table WITH TRUNCATE
SELECT EvaluateExpr($s) AS a;
```

```yql
SELECT key, value FROM my_table WITH SCHEMA Struct<key:String, value:Int32>;
```

```yql
SELECT key, value FROM my_table WITH COLUMNS Struct<value:Int32?>;
```

```yql
SELECT key, value FROM EACH($my_tables) WITH SCHEMA Struct<key:String, value:List<Int32>>;
```

```yql
SELECT
    *
FROM
    my_topic
WITH (
    FORMAT = json_each_row,
    SCHEMA = (
        ts String
    ),
    WATERMARK = __ydb_write_time - Interval("PT5S"),
    WATERMARK_GRANULARITY = "PT1S",
    WATERMARK_IDLE_TIMEOUT = "PT5S"
);
```
