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

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

  • Синтаксис
  • Описание полей
  • Поле типа integer
  • Поле типа enum
  • Поле типа date
  • Шаблоны путей
  • Примеры использования
  1. Концепции
  2. Аналитическая обработка данных
  3. Расширенное партицирование

Расширенное партицирование

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

Партицирование позволяет подсказать для Yandex Query правила размещения данных в Yandex Object Storage.

Предположим, что данные в Yandex Object Storage хранятся в следующей структуре каталогов:

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

При выполнении запроса ниже Yandex Query выполнит следующие действия:

  1. Получит полный список подкаталогов внутри '/'.
  2. Для каждого подкаталога выполнит попытку обработать имя подкаталога в формате "year=<DIGITS>".
  3. Для каждого подкаталога "year=<DIGITS>" получит список всех подкаталогов в формате "month=<DIGITS>".
  4. Обработает считанные данные.
SELECT 
    * 
FROM 
    objectstorage.'/' 
    WITH
    (
        Schema =
        (
            data String, 
            year Int, 
            month Int
        ),
        partitioned_by = 
        (
            year,
            month
        )
    ) 
WHERE 
    year=2021 
    AND month=02

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

Для оптимизации работы на больших объемах данных следует использовать "расширенное партицирование". В этом режиме не происходит сканирования каталогов Yandex Object Storage, вместо этого все пути вычисляются заранее и обращение происходит только к ним.

Для работы расширенного партицирования необходимо задать правила работы через специальный параметр - "projection". В этом параметре описываются все правила размещения данных в каталога Yandex Object Storage.

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

Расширенное партицирование называется "partition projection" и задается через параметр projection.

Пример указания расширенного партицирования:


$projection = 
@@ 
{
    "projection.enabled" : true,

    "projection.year.type" : "integer",
    "projection.year.min" : 2010,
    "projection.year.max" : 2022,
    "projection.year.interval" : 1,

    "projection.month.type" : "integer",
    "projection.month.min" : 1,
    "projection.month.max" : 12,
    "projection.month.interval" : 1,
    "projection.month.digits" : 2,

    "storage.location.template" : "${year}/${month}"
}
@@;

SELECT 
    * 
FROM 
    <соединение>.`/`
WITH 
(
    schema=
    (
        data String, 
        year Int, 
        month Int
    ), 
    partitioned_by=(year, month),
    projection=$projection
)

В примере выше указывается, что данные существуют за каждый год и каждый месяц с 2010 по 2022 годы, при этом в бакете данные размещены в каталогах вида 2022/12.

В общем виде настройка расширенного партицирования выглядит следующим образом:


$projection = 
@@ 
{
    "projection.enabled" : <доступность_расширенного_партицирования>,

    "projection.<имя_поля_1>.type" : "<тип>",
    "projection.<имя_поля_1>...." : "<свойства>",

    "projection.<имя_поля_2>.type" : "<тип>",
    "projection.<имя_поля_2>...." : "<свойства>",

    "storage.location.template" : ".../${<имя_поля_2>}/${<имя_поля_1>}/..."
}
@@;

SELECT 
    * 
FROM 
    <соединение>.<путь> 
WITH 
(
    schema=(<поля>, <поле_1>, <поле_2>), 
    partitioned_by=(<имя_поля_1>, <имя_поля_2>),
    projection=$projection
)

Описание полейОписание полей

Название поля Описание поля Допустимые значения
projection.enabled Включено или нет расширенное партицирование true, false
projection.<имя_поля_1>.type Тип данных поля integer, enum, date
projection.<имя_поля_1>.XXX Свойства конкретного типа

Поле типа integerПоле типа integer

Используется для колонок, чьи значения можно представить в виде целых чисел диапазона -263 до 263-1.

Название поля Обязательное Описание поля Пример значений
projection.<имя_поля>.type Да Тип данных поля integer
projection.<имя_поля>.min Да Определяет минимально допустимое значение. Задается в виде целого числа -100
004
projection.<имя_поля>.max Да Определяет максимально допустимое значение. Задается в виде целого числа -10
5000
projection.<имя_поля>.interval Нет, по умолчанию 1 Определяет шаг между элементами внутри диапазона значений. Например, шаг 3 при диапазоне значений 2, 10, приведет к следующим значениям: 2, 5, 8 2
11
projection.<имя_поля>.digits Нет, по умолчанию 0 Определяет количество цифр в числе. Если ненулевых цифр в числе меньше, чем указанное значение, то значение дополняется нулями спереди вплоть до числа указанного числа цифр. Например, если указано значение .digits=3, а передается число 2, то оно будет превращено в значение 002 2
4

Поле типа enumПоле типа enum

Используется для колонок, чьи значения можно представить в виде перечисления значений.

Название поля Обязательное Описание поля Пример значений
projection.<имя_поля>.type Да Тип данных поля enum
projection.<имя_поля>.values Да Определяет допустимые значения, указанные через запятую. Пробелы не игнорируются 1, 2
A,B,C

Поле типа dateПоле типа date

Используется для колонок, чьи значения можно представить в виде даты.

Название поля Обязательное Описание поля Пример значений
projection.<имя_поля>.type Да Тип данных поля date
projection.<имя_поля>.min Да Определяет минимально допустимую дату. Разрешены значения в формате YYYY-MM-DD или в виде выражения, содержащего специальную макроподстановку NOW. С макроподстановкой NOW возможно выполнять арифметические действия:
NOW-3DAYS,
NOW+1MONTH,
NOW-6YEARS,
NOW+4HOURS,
NOW-5MINUTES,
NOW+6SECONDS.
2020-01-01
NOW-5DAYS
NOW+3HOURS
projection.<имя_поля>.max Да Определяет максимально допустимую дату. Разрешены значения в формате YYYY-MM-DD или в виде выражения, содержащего специальную макроподстановку NOW. С макроподстановкой NOW возможно выполнять арифметические действия:
NOW-3DAYS,
NOW+1MONTH,
NOW-6YEARS,
NOW+4HOURS,
NOW-5MINUTES,
NOW+6SECONDS.
2020-01-01
NOW-5DAYS
NOW+3HOURS
projection.<имя_поля>.format Да Строка форматирования даты на основе strptime %Y-%m-%d
%D
projection.<имя_поля>.unit Нет Единицы измерения интервалов времени. Допустимые значения: DAYS DAYS
projection.<имя_поля>.interval Нет, по умолчанию 1 Определяет шаг между элементами внутри диапазона значений с размерностью, указанной в projection.<имя_поля>.unit. Например, для диапазона 2021-02-02, 2021-03-05 шаг 15 c размерностью DAYS приведет к значениям: 2021-02-17, 2021-03-04 2
6

Шаблоны путейШаблоны путей

Данные в бакетах Yandex Object Storage могут быть размещены в каталогах с произвольными названием. С помощью настройки storage.location.template можно указать правила именования каталогов, где хранятся данные.

Название поля Описание поля Пример значений
storage.location.template Шаблон пути имен каталогов. Задается в формате ${<имя_поля...>}/${<имя_поля...>} root/a/${year}/b/${month}/d
${year}/${month}

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

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

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

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