[Документация Yandex Cloud](../../index.md) > [Yandex Query](../index.md) > [Концепции](index.md) > Аналитическая обработка данных > Партицирование данных

# Партицирование данных

В Yandex Object Storage можно хранить очень большие объемы данных. При этом запросы к этим данным могут затрагивать не все данные, а только их часть. Если описать правила разметки структуры хранения ваших данных в Yandex Query, тогда данные, которые не нужны для запроса, можно даже не считывать из Yandex Object Storage. Это значительно ускоряет выполнение запросов без влияния на результат. 

Например, данные хранятся в следующей структуре каталогов:

```
year=2021
    month=01
    month=02
    month=03
year=2022
    month=01
```

Запрос ниже явно подразумевает, что обработать нужно только данные за февраль 2021-го года и другие данные не нужны. 

```sql
SELECT 
    * 
FROM 
    objectstorage.'/' 
    WITH
    (
        Schema =
        (
            data String, 
            year Int, 
            month Int
        )
    ) 
WHERE 
    year=2021 
    AND month=02
```

Если схема партицирования данных не указана, то из Yandex Object Storage будут считаны _все_ хранимые данные, но в результате обработки данные за все другие даты будут отброшены.

Если описать структуру хранения явно, указав, что данные в Yandex Object Storage размещены в каталогах по годам и месяцам
```sql
SELECT 
    * 
FROM 
    objectstorage.'/' 
    WITH
    (
        Schema =
        (
            data String, 
            year Int, 
            month Int
        ),
        partitioned_by = 
        (
            year,
            month
        )
    ) 
WHERE 
    year=2021 
    AND month=02
```

то в процессе исполнения запроса из Yandex Object Storage будут считаны не все данные, а только данные за февраль 2021-го года, что существенно сократит объем обрабатываемых данных и ускорит обработку, при этом результаты обоих запросов будут идентичны.

{% note info %}

В примере выше показана работа с данными на уровне [соединений](glossary.md#connection). Такой пример выбран только для иллюстративных целей. Мы настоятельно рекомендуем для работы с данными использовать "привязки к данным" и не использовать прямую работу с соединениями.

{% endnote %}

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

При работе на уровне соединений партицирование задается с помощью параметра `partitioned_by`.

```sql
SELECT 
    * 
FROM 
    <соединение>.<путь> 
WITH 
(
    schema=(<поле_1>, <поле_2>, <поле_3>), 
    partitioned_by=(<поле_2>, <поле_3>)
)
```


В параметре `partitioned_by` перечисляются колонки схемы данных, по которым партицированы хранимые в Yandex Object Storage данные. Порядок указания полей в параметре partitioned_by определяет вложенность каталогов Yandex Object Storage друг в друга. 

Например, `partitioned_by=(year, month)` определяет структуру каталогов

```
year=2021
    month=01
    month=02
    month=03
year=2022
    month=01
```

А `partitioned_by=(month, year)` определяет другую структуру каталогов

```
month=01
    year=2021
    year=2022
month=02
    year=2021
month=03
    year=2021
```

## Поддерживаемые типы данных

Партицирование возможно только по следующему набору типов данных YQL:
- Uint16, Uint32, Uint64
- Int16, Int32, Int64
- String
- Bool

При использовании других типов для указания партицирования возвращается ошибка.

## Поддерживаемые форматы путей хранения {#formats}

Формат путей хранения, когда в имени каждого каталога явно указано название колонки, называется "[Hive-Metastore форматом](https://yandex.cloud/ru-kz/blog/posts/2023/06/hive-metastore-preview)" или просто "Hive-форматом".

Такой формат выглядит следующим образом:
```
month=01
    year=2021
    year=2022
month=02
    year=2021
month=03
    year=2021
```

{% note warning %}

Базовый режим партицирования в Yandex Query поддерживает только Hive-формат. 

{% endnote %}

Для указания произвольных путей хранения необходимо воспользоваться режимом [Расширенного партицирования данных](partition-projection.md).

## Примеры использования {#examples}

* [Работа с данными в Yandex Object Storage](../tutorials/yq-storage.md).