Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Query
    • Обзор
    • Термины и определения
    • Квоты и лимиты
    • Обработка запроса
      • Описание
      • Федеративные запросы
      • Партицирование данных
      • Расширенное партицирование
    • Единый анализ потоковых и аналитических данных
    • Резервное копирование
  • Управление доступом
  • Правила тарификации
  • Интеграции
  • Аудитные логи Audit Trails
  • Вопросы и ответы
  • Публичные материалы
  • Обучающие курсы

В этой статье:

  • Синтаксис
  • Поддерживаемые типы данных
  • Поддерживаемые форматы путей хранения
  • Примеры использования
  1. Концепции
  2. Аналитическая обработка данных
  3. Партицирование данных

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

Статья создана
Yandex Cloud
Обновлена 19 февраля 2025 г.
  • Синтаксис
  • Поддерживаемые типы данных
  • Поддерживаемые форматы путей хранения
  • Примеры использования

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

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

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

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

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

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

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

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-го года, что существенно сократит объем обрабатываемых данных и ускорит обработку, при этом результаты обоих запросов будут идентичны.

Примечание

В примере выше показана работа с данными на уровне соединений. Такой пример выбран только для иллюстративных целей. Мы настоятельно рекомендуем для работы с данными использовать "привязки к данным" и не использовать прямую работу с соединениями.

СинтаксисСинтаксис

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

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

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

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

Формат путей хранения, когда в имени каждого каталога явно указано название колонки, называется "Hive-Metastore форматом" или просто "Hive-форматом".

Такой формат выглядит следующим образом:

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

Важно

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

Для указания произвольных путей хранения необходимо воспользоваться режимом Расширенного партицирования данных.

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

  • Работа с данными в Yandex Object Storage.

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

Предыдущая
Федеративные запросы
Следующая
Расширенное партицирование
Проект Яндекса
© 2025 ООО «Яндекс.Облако»