Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
  • Marketplace
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Акции и free tier
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»
Yandex Managed Service for Trino
  • Начало работы
    • Все инструкции
      • Получение информации об имеющихся кластерах
      • Создание кластера
      • Изменение кластера
      • Обновление версии Trino
      • Остановка и запуск кластера
      • Подключение к кластеру
      • Управление доступом к кластеру
      • Техническое обслуживание
      • Управление ресурсными группами
      • Удаление кластера
  • Справочник Terraform
  • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Метрики Yandex Monitoring
  • Аудитные логи Audit Trails
  • История изменений

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

  • Получить информацию о конфигурации ресурсных групп
  • Задать конфигурацию ресурсных групп при создании кластера
  • Задать или изменить конфигурацию ресурсных групп кластера
  • Удалить конфигурацию ресурсных групп
  • Пример конфигурации ресурсных групп в кластере Managed Service for Trino
  1. Пошаговые инструкции
  2. Кластеры
  3. Управление ресурсными группами

Управление ресурсными группами в Managed Service for Trino

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 26 мая 2026 г.
  • Получить информацию о конфигурации ресурсных групп
  • Задать конфигурацию ресурсных групп при создании кластера
  • Задать или изменить конфигурацию ресурсных групп кластера
  • Удалить конфигурацию ресурсных групп
  • Пример конфигурации ресурсных групп в кластере Managed Service for Trino

В Managed Service for Trino вы можете управлять конфигурацией ресурсных групп:

  • получить информацию о текущей конфигурации,
  • задать конфигурацию при создании кластера,
  • задать или изменить конфигурацию для существующего кластера,
  • удалить конфигурацию.

Получить информацию о конфигурации ресурсных группПолучить информацию о конфигурации ресурсных групп

Консоль управления
CLI
REST API
gRPC API
  1. В консоли управления перейдите в нужный каталог.
  2. Перейдите в сервис Managed Service for Trino.
  3. Нажмите на имя нужного кластера.
  4. Перейдите в блок Управление ресурсами.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

Чтобы получить описание ресурсных групп и правил маршрутизации в кластере Managed Service for Trino, выполните команду:

yc managed-trino cluster get-resource-groups <имя_или_идентификатор_кластера>

Идентификатор и имя кластера можно запросить со списком кластеров в каталоге.

  1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

    export IAM_TOKEN="<IAM-токен>"
    
  2. Воспользуйтесь методом Cluster.Get и выполните запрос, например, с помощью cURL:

    curl \
        --request GET \
        --header "Authorization: Bearer $IAM_TOKEN" \
        --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters/<идентификатор_кластера>'
    

    Идентификатор кластера можно запросить со списком кластеров в каталоге.

  3. Описание ресурсных групп и правил маршрутизации в кластере Managed Service for Trino содержится в ответе сервера в поле resourceGroups.

  1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

    export IAM_TOKEN="<IAM-токен>"
    
  2. Клонируйте репозиторий cloudapi:

    cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
    

    Далее предполагается, что содержимое репозитория находится в директории ~/cloudapi/.

  3. Воспользуйтесь вызовом ClusterService.Get и выполните запрос, например с помощью gRPCurl:

    grpcurl \
        -format json \
        -import-path ~/cloudapi/ \
        -import-path ~/cloudapi/third_party/googleapis/ \
        -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \
        -rpc-header "Authorization: Bearer $IAM_TOKEN" \
        -d '{
                "cluster_id": "<идентификатор_кластера>"
            }' \
        trino.api.cloud.yandex.net:443 \
        yandex.cloud.trino.v1.ClusterService.Get
    

    Идентификатор кластера можно запросить со списком кластеров в каталоге.

  4. Описание ресурсных групп и правил маршрутизации в кластере Managed Service for Trino содержится в ответе сервера в поле resource_groups.

Задать конфигурацию ресурсных групп при создании кластераЗадать конфигурацию ресурсных групп при создании кластера

Консоль управления
CLI
Terraform
REST API
gRPC API
  1. В консоли управления выберите каталог, в котором нужно создать кластер Managed Service for Trino.

  2. Перейдите в сервис Managed Service for Trino.

  3. Нажмите кнопку Создать кластер и задайте параметры кластера.

  4. Перейдите в блок Управление ресурсами.

  5. В поле CPU quota period задайте период расчета квоты CPU для ресурсных групп.

  6. Нажмите кнопку Добавить группу и задайте параметры ресурсной группы:

    1. (Опционально) Выберите родительскую группу.

    2. Задайте имя ресурсной группы.

      Имя группы может представлять собой шаблон, использующий подстановки переменных в формате ${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:

      • Встроенные: USER — имя пользователя, SOURCE — источник запроса.
      • Пользовательские: объявляются в параметрах правил маршрутизации Пользователь и Источник.

      При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.

    3. В поле Max queued задайте максимальное число запросов в очереди (должно быть больше 1). При достижении этого лимита новые запросы будут отклонены с ошибкой.

    4. (Опционально) В поле Soft concurrency limit задайте мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.

    5. В поле Hard concurrency limit задайте максимальное число запущенных запросов (должно быть больше 1). При достижении этого лимита новые запросы будут поставлены в очередь.

    6. (Опционально) В поле Soft memory limit, % задайте максимальный процент доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь.

    7. (Опционально) В поле Soft CPU limit задайте мягкий лимит процессорного времени. При достижении этого лимита максимальное число запущенных запросов будет снижено до окончания текущего периода расчета квоты CPU. Не может быть больше, чем Hard CPU limit. Чтобы задать Soft CPU limit, нужно также задать CPU quota period.

    8. (Опционально) В поле Hard CPU limit задайте жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь. Чтобы задать Hard CPU limit, нужно также задать CPU quota period.

    9. (Опционально) В поле Scheduling policy задайте политику планирования запросов. Возможные значения: fair, weighted, weighted_fair, query_priority. Значение по умолчанию — none (действует политика fair).

    10. (Опционально) В поле Scheduling weight задайте вес группы, используемый в политиках планирования weighted и weighted_fair.

    Подробнее о дереве групп в разделе Ресурсные группы в Managed Service for Trino.

  7. (Опционально) Добавьте другие ресурсные группы аналогичным образом.

  8. Нажмите кнопку Добавить правило и задайте параметры правила:

    1. (Опционально) В поле Пользователь задайте имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов от любых пользователей.

    2. (Опционально) В поле Группа задайте имя группы пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.

    3. (Опционально) В поле Тип запроса выберите тип запроса. Возможные значения:

      • SELECT — запросы SELECT.
      • EXPLAIN — запросы EXPLAIN, кроме EXPLAIN ANALYZE.
      • DESCRIBE — запросы DESCRIBE, DESCRIBE INPUT и DESCRIBE OUTPUT, а также запросы SHOW (например, SHOW CATALOGS или SHOW SCHEMAS).
      • INSERT — запросы INSERT, CREATE TABLE AS и REFRESH MATERIALIZED VIEW.
      • MERGE — запросы MERGE.
      • DELETE — запросы DELETE.
      • ANALYZE — запросы ANALYZE.
      • DATA_DEFINITION — запросы CREATE, ALTER и DROP для схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.
      • ALTER_TABLE_EXECUTE — запросы вида ALTER TABLE ... EXECUTE.
    4. (Опционально) В поле Источник задайте имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.

    5. В поле Ресурсная группа выберите ресурсную группу, в которой будет запущен запрос. Целевая группа не может иметь дочерних групп.

    6. (Опционально) В поле Теги укажите теги через запятую. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.

    Важно

    Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр Ресурсная группа.

    Подробнее о правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.

  9. (Опционально) Добавьте другие правила маршрутизации аналогичным образом.

  10. Нажмите кнопку Создать.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

Чтобы задать конфигурацию ресурсных групп:

  1. Создайте файл с описанием ресурсных групп и правил маршрутизации в формате JSON или YAML. Ниже представлен пример YAML-файла resource-groups.yaml.

    rootGroups:
      # Корневая ресурсная группа 1
      - name: "<имя_ресурсной_группы>"
        softMemoryLimit: "<лимит_использования_памяти>"
        softConcurrencyLimit: <мягкий_лимит_числа_запущенных_запросов>
        hardConcurrencyLimit: <жесткий_лимит_числа_запущенных_запросов>
        softCpuLimit: <мягкий_лимит_процессорного_времени>
        hardCpuLimit: <жесткий_лимит_процессорного_времени>
        maxQueued: <лимит_числа_запросов_в_очереди>
        schedulingPolicy: "<политика_планирования_запросов>"
        schedulingWeight: <вес_группы>
        subGroups:
          # Дочерняя ресурсная группа 1
          - name: "<имя_ресурсной_группы>"
            ...
            subGroups: [<список_дочерних_групп_следующих_уровней>]
          # Дочерняя ресурсная группа 2
          - name: "<имя_ресурсной_группы>"
            ...
            subGroups: [<список_дочерних_групп_следующих_уровней>]
          ...
          # Дочерняя ресурсная группа N
          - name: "<имя_ресурсной_группы>"
            ...
            subGroups: [<список_дочерних_групп_следующих_уровней>]
      # Корневая ресурсная группа 2
      - name: "<имя_ресурсной_группы_2>"
        ...
      # Корневая ресурсная группа N
      - name: "<имя_ресурсной_группы_N>"
        ...
    selectors:
      # Правило маршрутизации 1
      - user: "<регулярное_выражение_для_имен_пользователей>"
        userGroup: "<регулярное_выражение_для_групп_пользователей>"
        queryType: "<тип_запроса>"
        source: "<регулярное_выражение_для_источников_запросов>"
        clientTags: ["<список_тегов>"]
        group: "<имя_ресурсной_группы>"
      # Правило маршрутизации 2
      - ...
      ...
      # Правило маршрутизации N
      - ...
    cpuQuotaPeriod: "<период_расчета_квоты_CPU>"
    

    Где:

    • rootGroups — описание дерева ресурсных групп. Параметры name, hardConcurrencyLimit и maxQueued являются обязательными.

      • name — имя группы.

        Имя группы может представлять собой шаблон, использующий подстановки переменных в формате ${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:

        • Встроенные: USER — имя пользователя, SOURCE — источник запроса.
        • Пользовательские: объявляются в параметрах правил маршрутизации user, userGroup и source.

        При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.

      • softMemoryLimit — максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. Значение softMemoryLimit может задаваться одним из способов:

        • В процентах от общего объема доступной памяти, например 10%.
        • Как абсолютное значение объема памяти, например 1GB. Можно использовать один из следующих суффиксов: B, kB, MB, GB, TB, PB.
      • softConcurrencyLimit — мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.

      • hardConcurrencyLimit — максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь.

      • softCpuLimit — мягкий лимит процессорного времени. При достижении этого лимита значение hardConcurrencyLimit будет снижено до окончания текущего периода расчета квоты CPU. Значение softCpuLimit не может быть больше, чем hardCpuLimit.

      • hardCpuLimit — жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.

      Примечание

      Если задан хотя бы один из параметров — softCpuLimit или hardCpuLimit, задайте также параметр cpuQuotaPeriod.

      • maxQueued — максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой.

      • schedulingPolicy — политика планирования запросов. Возможные значения:

        • FAIR
        • WEIGHTED
        • WEIGHTED_FAIR
        • QUERY_PRIORITY

        Если параметр не указан, действует политика FAIR.

      • schedulingWeight — вес группы, используемый в политиках планирования WEIGHTED и WEIGHTED_FAIR.

        Если параметр не указан, вес группы равен 1.

      • subGroups — описания дочерних групп.

    • selectors — описание правил маршрутизации. Параметр group является обязательным.

      • user — имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей.

      • userGroup — имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.

      • queryType — тип запроса. Возможные значения:

        • SELECT — запросы SELECT.
        • EXPLAIN — запросы EXPLAIN, кроме EXPLAIN ANALYZE.
        • DESCRIBE — запросы DESCRIBE, DESCRIBE INPUT и DESCRIBE OUTPUT, а также запросы SHOW (например, SHOW CATALOGS или SHOW SCHEMAS).
        • INSERT — запросы INSERT, CREATE TABLE AS и REFRESH MATERIALIZED VIEW.
        • MERGE — запросы MERGE.
        • DELETE — запросы DELETE.
        • ANALYZE — запросы ANALYZE.
        • DATA_DEFINITION — запросы CREATE, ALTER и DROP для схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.
        • ALTER_TABLE_EXECUTE — запросы вида ALTER TABLE ... EXECUTE.
      • source — имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.

      • clientTags — список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.

      • group — полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате ${<имя_переменной>}. Целевая группа не может иметь дочерних групп.

      Важно

      Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр group.

    • cpuQuotaPeriod — период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например 140s, 30m или 1h.

    Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.

  2. Посмотрите описание команды CLI для создания кластера:

    yc managed-trino cluster create --help
    
  3. Выполните команду:

    yc managed-trino cluster create \
      ...
      --resource-groups-from-file resource-groups.yaml
    

    Доступные параметры кластера и их описания см. в инструкции.

  1. Создайте конфигурационный файл Terraform с планом инфраструктуры.

  2. Добавьте в описание кластера блок resource_groups:

    resource_groups = jsonencode(
      {
        "rootGroups" : [
          # Корневая ресурсная группа 1
          {
            "name" : "<имя_ресурсной_группы>",
            "softMemoryLimit" : "<лимит_использования_памяти>",
            "softConcurrencyLimit" : <мягкий_лимит_числа_запущенных_запросов>,
            "hardConcurrencyLimit" : <жесткий_лимит_числа_запущенных_запросов>,
            "softCpuLimit" : <мягкий_лимит_процессорного_времени>,
            "hardCpuLimit" : <жесткий_лимит_процессорного_времени>,
            "maxQueued" : <лимит_числа_запросов_в_очереди>,
            "schedulingPolicy" : "<политика_планирования_запросов>",
            "schedulingWeight" : <вес_группы>,
            "subGroups" : [
              # Дочерняя ресурсная группа 1
              {
                ...
                "subGroups" : [<список_дочерних_групп_следующих уровней>]
              },
              # Дочерняя ресурсная группа 2
              {
                ...
                "subGroups" : [<список_дочерних_групп_следующих уровней>]
              },
              ...
              # Дочерняя ресурсная группа N
              {
                ...
                "subGroups" : [<список_дочерних_групп_следующих уровней>]
              }
            ]
          },
          # Корневая ресурсная группа 2
          {
            ... 
          },
          ...
          # Корневая ресурсная группа N
          {
            ... 
          }
        ],
        "selectors" : [
          # Правило маршрутизации 1
          {
            "user" : "<регулярное_выражение_для_имен_пользователей>",
            "userGroup" : "<регулярное_выражение_для_групп_пользователей>",
            "queryType" : "<тип_запроса>",
            "source" : "<регулярное_выражение_для_источников_запросов>",
            "clientTags" : ["<список_тегов>"],
            "group" : "<имя_ресурсной_группы>"
          },
          # Правило маршрутизации 2
          {
            ... 
          },
          ...
          # Правило маршрутизации N
          {
            ... 
          }
        ],
        "cpuQuotaPeriod" : "<период_расчета_квоты_CPU>"
      }
    )
    

    Где:

    • rootGroups — описание дерева ресурсных групп. Параметры name, hardConcurrencyLimit и maxQueued являются обязательными.

      • name — имя группы.

        Имя группы может представлять собой шаблон, использующий подстановки переменных в формате ${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:

        • Встроенные: USER — имя пользователя, SOURCE — источник запроса.
        • Пользовательские: объявляются в параметрах правил маршрутизации user, userGroup и source.

        При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.

      • softMemoryLimit — максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. Значение softMemoryLimit может задаваться одним из способов:

        • В процентах от общего объема доступной памяти, например 10%.
        • Как абсолютное значение объема памяти, например 1GB. Можно использовать один из следующих суффиксов: B, kB, MB, GB, TB, PB.
      • softConcurrencyLimit — мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.

      • hardConcurrencyLimit — максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь.

      • softCpuLimit — мягкий лимит процессорного времени. При достижении этого лимита значение hardConcurrencyLimit будет снижено до окончания текущего периода расчета квоты CPU. Значение softCpuLimit не может быть больше, чем hardCpuLimit.

      • hardCpuLimit — жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.

      Примечание

      Если задан хотя бы один из параметров — softCpuLimit или hardCpuLimit, задайте также параметр cpuQuotaPeriod.

      • maxQueued — максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой.

      • schedulingPolicy — политика планирования запросов. Возможные значения:

        • FAIR
        • WEIGHTED
        • WEIGHTED_FAIR
        • QUERY_PRIORITY

        Если параметр не указан, действует политика FAIR.

      • schedulingWeight — вес группы, используемый в политиках планирования WEIGHTED и WEIGHTED_FAIR.

        Если параметр не указан, вес группы равен 1.

      • subGroups — описания дочерних групп.

    • selectors — описание правил маршрутизации. Параметр group является обязательным.

      • user — имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей.

      • userGroup — имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.

      • queryType — тип запроса. Возможные значения:

        • SELECT — запросы SELECT.
        • EXPLAIN — запросы EXPLAIN, кроме EXPLAIN ANALYZE.
        • DESCRIBE — запросы DESCRIBE, DESCRIBE INPUT и DESCRIBE OUTPUT, а также запросы SHOW (например, SHOW CATALOGS или SHOW SCHEMAS).
        • INSERT — запросы INSERT, CREATE TABLE AS и REFRESH MATERIALIZED VIEW.
        • MERGE — запросы MERGE.
        • DELETE — запросы DELETE.
        • ANALYZE — запросы ANALYZE.
        • DATA_DEFINITION — запросы CREATE, ALTER и DROP для схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.
        • ALTER_TABLE_EXECUTE — запросы вида ALTER TABLE ... EXECUTE.
      • source — имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.

      • clientTags — список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.

      • group — полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате ${<имя_переменной>}. Целевая группа не может иметь дочерних групп.

      Важно

      Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр group.

    • cpuQuotaPeriod — период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например 140s, 30m или 1h.

    Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.

    Примечание

    Вы также можете создать отдельный JSON-файл с описанием ресурсных групп и правил маршрутизации и передать его в параметре resource_groups следующим образом:

    resource_groups = file("resource-groups.json")
    
  3. Проверьте корректность настроек.

    1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.

    2. Выполните команду:

      terraform validate
      

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  4. Подтвердите изменение ресурсов.

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

Подробнее см. в документации провайдера Terraform.

  1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

    export IAM_TOKEN="<IAM-токен>"
    
  2. Создайте файл body.json и добавьте в него следующее содержимое:

    {
      <Параметры_кластера>
      ...
      "trino": {
        ...
        "resourceManagement": {
          "resourceGroups": {
            "rootGroups": [
              {
                "name" : "<имя_ресурсной_группы>",
                "softMemoryLimit" : "<лимит_использования_памяти>",
                "softConcurrencyLimit" : "<мягкий_лимит_числа_запущенных_запросов>",
                "hardConcurrencyLimit" : "<жесткий_лимит_числа_запущенных_запросов>",
                "softCpuLimit" : "<мягкий_лимит_процессорного_времени>",
                "hardCpuLimit" : "<жесткий_лимит_процессорного_времени>",
                "maxQueued" : "<лимит_числа_запросов_в_очереди>",
                "schedulingPolicy" : "<политика_планирования_запросов>",
                "schedulingWeight" : "<вес_группы>",
                "subGroups": [
                  {
                    <Дочерняя_ресурсная_группа_1>
                    ...
                    "subGroups" : [<список_дочерних_групп_следующих уровней>]
                  },
                  {
                    <Дочерняя_ресурсная_группа_2>
                    ...
                    "subGroups" : [<список_дочерних_групп_следующих уровней>]
                  },
                  ...
                  {
                    <Дочерняя_ресурсная_группа_N>
                    ...
                    "subGroups" : [<список_дочерних_групп_следующих уровней>]
                  }
                ]
              },
              {
                <Корневая_ресурсная_группа_2>
              },
              ...
              {
                <Корневая_ресурсная_группа_N>
              }
            ],
            "selectors": [
              {
                "user": "<регулярное_выражение_для_имен_пользователей>",
                "userGroup": "<регулярное_выражение_для_групп_пользователей>",
                "queryType": "<тип_запроса>",
                "source": "<регулярное_выражение_для_источников_запросов>",
                "clientTags": ["<список_тегов>"],
                "group": "<имя_ресурсной_группы>"
              },
              {
                <Правило_маршрутизации_2> 
              },
              ...
              {
                <Правило_маршрутизации_N>
              }
            ],
            "cpuQuotaPeriod": "<период_расчета_квоты_CPU>"
          }
          ...
        },
      }
    }
    

    Где:

    • rootGroups — описание дерева ресурсных групп. Параметры name, hardConcurrencyLimit и maxQueued являются обязательными.

      • name — имя группы.

        Имя группы может представлять собой шаблон, использующий подстановки переменных в формате ${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:

        • Встроенные: USER — имя пользователя, SOURCE — источник запроса.
        • Пользовательские: объявляются в параметрах правил маршрутизации user, userGroup и source.

        При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.

      • softMemoryLimit — максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. Значение softMemoryLimit может задаваться одним из способов:

        • В процентах от общего объема доступной памяти, например 10%.
        • Как абсолютное значение объема памяти, например 1GB. Можно использовать один из следующих суффиксов: B, kB, MB, GB, TB, PB.
      • softConcurrencyLimit — мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.

      • hardConcurrencyLimit — максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь.

      • softCpuLimit — мягкий лимит процессорного времени. При достижении этого лимита значение hardConcurrencyLimit будет снижено до окончания текущего периода расчета квоты CPU. Значение softCpuLimit не может быть больше, чем hardCpuLimit.

      • hardCpuLimit — жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.

      Примечание

      Если задан хотя бы один из параметров — softCpuLimit или hardCpuLimit, задайте также параметр cpuQuotaPeriod.

      • maxQueued — максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой.

      • schedulingPolicy — политика планирования запросов. Возможные значения:

        • FAIR
        • WEIGHTED
        • WEIGHTED_FAIR
        • QUERY_PRIORITY

        Если параметр не указан, действует политика FAIR.

      • schedulingWeight — вес группы, используемый в политиках планирования WEIGHTED и WEIGHTED_FAIR.

        Если параметр не указан, вес группы равен 1.

      • subGroups — описания дочерних групп.

    • selectors — описание правил маршрутизации. Параметр group является обязательным.

      • user — имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей.

      • userGroup — имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.

      • queryType — тип запроса. Возможные значения:

        • SELECT — запросы SELECT.
        • EXPLAIN — запросы EXPLAIN, кроме EXPLAIN ANALYZE.
        • DESCRIBE — запросы DESCRIBE, DESCRIBE INPUT и DESCRIBE OUTPUT, а также запросы SHOW (например, SHOW CATALOGS или SHOW SCHEMAS).
        • INSERT — запросы INSERT, CREATE TABLE AS и REFRESH MATERIALIZED VIEW.
        • MERGE — запросы MERGE.
        • DELETE — запросы DELETE.
        • ANALYZE — запросы ANALYZE.
        • DATA_DEFINITION — запросы CREATE, ALTER и DROP для схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.
        • ALTER_TABLE_EXECUTE — запросы вида ALTER TABLE ... EXECUTE.
      • source — имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.

      • clientTags — список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.

      • group — полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате ${<имя_переменной>}. Целевая группа не может иметь дочерних групп.

      Важно

      Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр group.

    • cpuQuotaPeriod — период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например 140s, 30m или 1h.

    Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.

  3. Воспользуйтесь методом Cluster.Create и выполните запрос, например с помощью cURL:

    curl \
        --request POST \
        --header "Authorization: Bearer $IAM_TOKEN" \
        --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters'
        --data '@body.json'
    
  4. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

  1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

    export IAM_TOKEN="<IAM-токен>"
    
  2. Клонируйте репозиторий cloudapi:

    cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
    

    Далее предполагается, что содержимое репозитория находится в директории ~/cloudapi/.

  3. Создайте файл body.json и добавьте в него следующее содержимое:

    {
      <Параметры_кластера>
      ...
      "trino": {
        ...
        "resource_management": {
          "resource_groups": {
            "root_groups": [
              {
                "name" : "<имя_ресурсной_группы>",
                "soft_memory_limit" : "<лимит_использования_памяти>",
                "soft_concurrency_limit" : "<мягкий_лимит_числа_запущенных_запросов>",
                "hard_concurrency_limit" : "<жесткий_лимит_числа_запущенных_запросов>",
                "soft_cpu_limit" : "<мягкий_лимит_процессорного_времени>",
                "hard_cpu_limit" : "<жесткий_лимит_процессорного_времени>",
                "max_queued" : "<лимит_числа_запросов_в_очереди>",
                "scheduling_policy" : "<политика_планирования_запросов>",
                "scheduling_weight" : "<вес_группы>",
                "sub_groups": [
                  {
                    <Дочерняя_ресурсная_группа_1>
                    ...
                    "sub_groups" : [<список_дочерних_групп_следующих уровней>]
                  },
                  {
                    <Дочерняя_ресурсная_группа_2>
                    ...
                    "sub_groups" : [<список_дочерних_групп_следующих уровней>]
                  },
                  ...
                  {
                    <Дочерняя_ресурсная_группа_N>
                    ...
                    "sub_groups" : [<список_дочерних_групп_следующих уровней>]
                  }
                ]
              },
              {
                <Корневая_ресурсная_группа_2>
              },
              ...
              {
                <Корневая_ресурсная_группа_N>
              }
            ],
            "selectors": [
              {
                "user": "<регулярное_выражение_для_имен_пользователей>",
                "user_group": "<регулярное_выражение_для_групп_пользователей>",
                "query_type": "<тип_запроса>",
                "source": "<регулярное_выражение_для_источников_запросов>",
                "client_tags": ["<список_тегов>"],
                "group": "<имя_ресурсной_группы>"
              },
              {
                <Правило_маршрутизации_2> 
              },
              ...
              {
                <Правило_маршрутизации_N>
              }
            ],
            "cpu_quota_period": "<период_расчета_квоты_CPU>"
          }
          ...
        },
      }
    }
    

    Где:

    • root_groups — описание дерева ресурсных групп. Параметры name, hard_concurrency_limit и max_queued являются обязательными.

      • name — имя группы.

        Имя группы может представлять собой шаблон, использующий подстановки переменных в формате ${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:

        • Встроенные: USER — имя пользователя, SOURCE — источник запроса.
        • Пользовательские: объявляются в параметрах правил маршрутизации user, user_group и source.

        При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.

      • soft_memory_limit — максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. Значение soft_memory_limit может задаваться одним из способов:

        • В процентах от общего объема доступной памяти, например 10%.
        • Как абсолютное значение объема памяти, например 1GB. Можно использовать один из следующих суффиксов: B, kB, MB, GB, TB, PB.
      • soft_concurrency_limit — мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.

      • hard_concurrency_limit — максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь.

      • soft_cpu_limit — мягкий лимит процессорного времени. При достижении этого лимита значение hard_concurrency_limit будет снижено до окончания текущего периода расчета квоты CPU. Значение soft_cpu_limit не может быть больше, чем hard_cpu_limit.

      • hard_cpu_limit — жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.

      Примечание

      Если задан хотя бы один из параметров — soft_cpu_limit или hard_cpu_limit, задайте также параметр cpu_quota_period.

      • max_queued — максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой.

      • scheduling_policy — политика планирования запросов. Возможные значения:

        • FAIR
        • WEIGHTED
        • WEIGHTED_FAIR
        • QUERY_PRIORITY

        Если параметр не указан, действует политика FAIR.

      • scheduling_weight — вес группы, используемый в политиках планирования WEIGHTED и WEIGHTED_FAIR.

        Если параметр не указан, вес группы равен 1.

      • sub_groups — описания дочерних групп.

    • selectors — описание правил маршрутизации. Параметр group является обязательным.

      • user — имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей.

      • user_group — имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.

      • query_type — тип запроса. Возможные значения:

        • SELECT — запросы SELECT.
        • EXPLAIN — запросы EXPLAIN, кроме EXPLAIN ANALYZE.
        • DESCRIBE — запросы DESCRIBE, DESCRIBE INPUT и DESCRIBE OUTPUT, а также запросы SHOW (например, SHOW CATALOGS или SHOW SCHEMAS).
        • INSERT — запросы INSERT, CREATE TABLE AS и REFRESH MATERIALIZED VIEW.
        • MERGE — запросы MERGE.
        • DELETE — запросы DELETE.
        • ANALYZE — запросы ANALYZE.
        • DATA_DEFINITION — запросы CREATE, ALTER и DROP для схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.
        • ALTER_TABLE_EXECUTE — запросы вида ALTER TABLE ... EXECUTE.
      • source — имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.

      • client_tags — список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.

      • group — полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате ${<имя_переменной>}. Целевая группа не может иметь дочерних групп.

      Важно

      Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр group.

    • cpu_quota_period — период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например 140s, 30m или 1h.

    Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.

    Доступные параметры кластера и их описания см. в инструкции.

  4. Воспользуйтесь вызовом ClusterService.Create и выполните запрос, например с помощью gRPCurl:

    grpcurl \
        -format json \
        -import-path ~/cloudapi/ \
        -import-path ~/cloudapi/third_party/googleapis/ \
        -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \
        -rpc-header "Authorization: Bearer $IAM_TOKEN" \
        -d @ \
        trino.api.cloud.yandex.net:443 \
        yandex.cloud.trino.v1.ClusterService.Create \
        < body.json
    
  5. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

Задать или изменить конфигурацию ресурсных групп кластераЗадать или изменить конфигурацию ресурсных групп кластера

Консоль управления
CLI
Terraform
REST API
gRPC API
  1. В консоли управления перейдите в нужный каталог.

  2. Перейдите в сервис Managed Service for Trino.

  3. Нажмите на имя нужного кластера.

  4. Перейдите в блок Управление ресурсами.

  5. В поле CPU quota period задайте новое значение периода расчета квоты CPU для ресурсных групп.

  6. Чтобы добавить новую ресурсную группу, нажмите кнопку Добавить группу и задайте параметры группы:

    1. (Опционально) Выберите родительскую группу.

    2. Задайте имя ресурсной группы.

      Имя группы может представлять собой шаблон, использующий подстановки переменных в формате ${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:

      • Встроенные: USER — имя пользователя, SOURCE — источник запроса.
      • Пользовательские: объявляются в параметрах правил маршрутизации Пользователь и Источник.

      При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.

    3. В поле Max queued задайте максимальное число запросов в очереди (должно быть больше 1). При достижении этого лимита новые запросы будут отклонены с ошибкой.

    4. (Опционально) В поле Soft concurrency limit задайте мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.

    5. В поле Hard concurrency limit задайте максимальное число запущенных запросов (должно быть больше 1). При достижении этого лимита новые запросы будут поставлены в очередь.

    6. (Опционально) В поле Soft memory limit, % задайте максимальный процент доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь.

    7. (Опционально) В поле Soft CPU limit задайте мягкий лимит процессорного времени. При достижении этого лимита максимальное число запущенных запросов будет снижено до окончания текущего периода расчета квоты CPU. Не может быть больше, чем Hard CPU limit. Чтобы задать Soft CPU limit, нужно также задать CPU quota period.

    8. (Опционально) В поле Hard CPU limit задайте жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь. Чтобы задать Hard CPU limit, нужно также задать CPU quota period.

    9. (Опционально) В поле Scheduling policy задайте политику планирования запросов. Возможные значения: fair, weighted, weighted_fair, query_priority. Значение по умолчанию — none (действует политика fair).

    10. (Опционально) В поле Scheduling weight задайте вес группы, используемый в политиках планирования weighted и weighted_fair.

    Подробнее о дереве групп в разделе Ресурсные группы в Managed Service for Trino.

  7. (Опционально) Добавьте другие ресурсные группы аналогичным образом.

  8. Чтобы отредактировать ресурсную группу:

    1. В строке этой группы нажмите на значок .
    2. Измените параметры группы и нажмите кнопку Редактировать.
  9. Чтобы добавить новое правило маршрутизации, нажмите кнопку Добавить правило и задайте параметры правила:

    1. (Опционально) В поле Пользователь задайте имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов от любых пользователей.

    2. (Опционально) В поле Группа задайте имя группы пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.

    3. (Опционально) В поле Тип запроса выберите тип запроса. Возможные значения:

      • SELECT — запросы SELECT.
      • EXPLAIN — запросы EXPLAIN, кроме EXPLAIN ANALYZE.
      • DESCRIBE — запросы DESCRIBE, DESCRIBE INPUT и DESCRIBE OUTPUT, а также запросы SHOW (например, SHOW CATALOGS или SHOW SCHEMAS).
      • INSERT — запросы INSERT, CREATE TABLE AS и REFRESH MATERIALIZED VIEW.
      • MERGE — запросы MERGE.
      • DELETE — запросы DELETE.
      • ANALYZE — запросы ANALYZE.
      • DATA_DEFINITION — запросы CREATE, ALTER и DROP для схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.
      • ALTER_TABLE_EXECUTE — запросы вида ALTER TABLE ... EXECUTE.
    4. (Опционально) В поле Источник задайте имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.

    5. В поле Ресурсная группа выберите ресурсную группу, в которой будет запущен запрос. Целевая группа не может иметь дочерних групп.

    6. (Опционально) В поле Теги укажите теги через запятую. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.

    Важно

    Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр Ресурсная группа.

    Подробнее о правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.

  10. (Опционально) Добавьте другие правила маршрутизации аналогичным образом.

  11. Чтобы отредактировать правило маршрутизации:

    1. В строке этого правила нажмите на значок .
    2. Измените параметры правила.
  12. Нажмите кнопку Сохранить изменения.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

Чтобы задать конфигурацию ресурсных групп:

  1. Если описание ресурсных групп и правил маршрутизации в кластере Managed Service for Trino еще не задано, создайте файл с описанием в формате JSON или YAML. Ниже представлен пример YAML-файла resource-groups.yaml.

    rootGroups:
      # Корневая ресурсная группа 1
      - name: "<имя_ресурсной_группы>"
        softMemoryLimit: "<лимит_использования_памяти>"
        softConcurrencyLimit: <мягкий_лимит_числа_запущенных_запросов>
        hardConcurrencyLimit: <жесткий_лимит_числа_запущенных_запросов>
        softCpuLimit: <мягкий_лимит_процессорного_времени>
        hardCpuLimit: <жесткий_лимит_процессорного_времени>
        maxQueued: <лимит_числа_запросов_в_очереди>
        schedulingPolicy: "<политика_планирования_запросов>"
        schedulingWeight: <вес_группы>
        subGroups:
          # Дочерняя ресурсная группа 1
          - name: "<имя_ресурсной_группы>"
            ...
            subGroups: [<список_дочерних_групп_следующих_уровней>]
          # Дочерняя ресурсная группа 2
          - name: "<имя_ресурсной_группы>"
            ...
            subGroups: [<список_дочерних_групп_следующих_уровней>]
          ...
          # Дочерняя ресурсная группа N
          - name: "<имя_ресурсной_группы>"
            ...
            subGroups: [<список_дочерних_групп_следующих_уровней>]
      # Корневая ресурсная группа 2
      - name: "<имя_ресурсной_группы_2>"
        ...
      # Корневая ресурсная группа N
      - name: "<имя_ресурсной_группы_N>"
        ...
    selectors:
      # Правило маршрутизации 1
      - user: "<регулярное_выражение_для_имен_пользователей>"
        userGroup: "<регулярное_выражение_для_групп_пользователей>"
        queryType: "<тип_запроса>"
        source: "<регулярное_выражение_для_источников_запросов>"
        clientTags: ["<список_тегов>"]
        group: "<имя_ресурсной_группы>"
      # Правило маршрутизации 2
      - ...
      ...
      # Правило маршрутизации N
      - ...
    cpuQuotaPeriod: "<период_расчета_квоты_CPU>"
    

    Где:

    • rootGroups — описание дерева ресурсных групп. Параметры name, hardConcurrencyLimit и maxQueued являются обязательными.

      • name — имя группы.

        Имя группы может представлять собой шаблон, использующий подстановки переменных в формате ${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:

        • Встроенные: USER — имя пользователя, SOURCE — источник запроса.
        • Пользовательские: объявляются в параметрах правил маршрутизации user, userGroup и source.

        При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.

      • softMemoryLimit — максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. Значение softMemoryLimit может задаваться одним из способов:

        • В процентах от общего объема доступной памяти, например 10%.
        • Как абсолютное значение объема памяти, например 1GB. Можно использовать один из следующих суффиксов: B, kB, MB, GB, TB, PB.
      • softConcurrencyLimit — мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.

      • hardConcurrencyLimit — максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь.

      • softCpuLimit — мягкий лимит процессорного времени. При достижении этого лимита значение hardConcurrencyLimit будет снижено до окончания текущего периода расчета квоты CPU. Значение softCpuLimit не может быть больше, чем hardCpuLimit.

      • hardCpuLimit — жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.

      Примечание

      Если задан хотя бы один из параметров — softCpuLimit или hardCpuLimit, задайте также параметр cpuQuotaPeriod.

      • maxQueued — максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой.

      • schedulingPolicy — политика планирования запросов. Возможные значения:

        • FAIR
        • WEIGHTED
        • WEIGHTED_FAIR
        • QUERY_PRIORITY

        Если параметр не указан, действует политика FAIR.

      • schedulingWeight — вес группы, используемый в политиках планирования WEIGHTED и WEIGHTED_FAIR.

        Если параметр не указан, вес группы равен 1.

      • subGroups — описания дочерних групп.

    • selectors — описание правил маршрутизации. Параметр group является обязательным.

      • user — имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей.

      • userGroup — имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.

      • queryType — тип запроса. Возможные значения:

        • SELECT — запросы SELECT.
        • EXPLAIN — запросы EXPLAIN, кроме EXPLAIN ANALYZE.
        • DESCRIBE — запросы DESCRIBE, DESCRIBE INPUT и DESCRIBE OUTPUT, а также запросы SHOW (например, SHOW CATALOGS или SHOW SCHEMAS).
        • INSERT — запросы INSERT, CREATE TABLE AS и REFRESH MATERIALIZED VIEW.
        • MERGE — запросы MERGE.
        • DELETE — запросы DELETE.
        • ANALYZE — запросы ANALYZE.
        • DATA_DEFINITION — запросы CREATE, ALTER и DROP для схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.
        • ALTER_TABLE_EXECUTE — запросы вида ALTER TABLE ... EXECUTE.
      • source — имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.

      • clientTags — список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.

      • group — полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате ${<имя_переменной>}. Целевая группа не может иметь дочерних групп.

      Важно

      Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр group.

    • cpuQuotaPeriod — период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например 140s, 30m или 1h.

    Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.

  2. Если описание ресурсных групп и правил маршрутизации уже задано, откройте файл resource-groups.yaml и внесите в него изменения. Вы можете:

    • добавить новые ресурсные группы и правила маршрутизации;
    • изменить параметры существующих групп и правил;
    • удалить ненужные группы и правила.
  3. Выполните команду:

yc managed-trino cluster set-resource-groups <имя_или_идентификатор_кластера> \
   --from-file resource-groups.yaml

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

  1. Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.

    О том, как создать такой файл, см. в разделе Создание кластера.

  2. Если описание ресурсных групп и правил маршрутизации в кластере Managed Service for Trino еще не задано, добавьте в описание кластера блок resource_groups:

    resource_groups = jsonencode(
      {
        "rootGroups" : [
          # Корневая ресурсная группа 1
          {
            "name" : "<имя_ресурсной_группы>",
            "softMemoryLimit" : "<лимит_использования_памяти>",
            "softConcurrencyLimit" : <мягкий_лимит_числа_запущенных_запросов>,
            "hardConcurrencyLimit" : <жесткий_лимит_числа_запущенных_запросов>,
            "softCpuLimit" : <мягкий_лимит_процессорного_времени>,
            "hardCpuLimit" : <жесткий_лимит_процессорного_времени>,
            "maxQueued" : <лимит_числа_запросов_в_очереди>,
            "schedulingPolicy" : "<политика_планирования_запросов>",
            "schedulingWeight" : <вес_группы>,
            "subGroups" : [
              # Дочерняя ресурсная группа 1
              {
                ...
                "subGroups" : [<список_дочерних_групп_следующих уровней>]
              },
              # Дочерняя ресурсная группа 2
              {
                ...
                "subGroups" : [<список_дочерних_групп_следующих уровней>]
              },
              ...
              # Дочерняя ресурсная группа N
              {
                ...
                "subGroups" : [<список_дочерних_групп_следующих уровней>]
              }
            ]
          },
          # Корневая ресурсная группа 2
          {
            ... 
          },
          ...
          # Корневая ресурсная группа N
          {
            ... 
          }
        ],
        "selectors" : [
          # Правило маршрутизации 1
          {
            "user" : "<регулярное_выражение_для_имен_пользователей>",
            "userGroup" : "<регулярное_выражение_для_групп_пользователей>",
            "queryType" : "<тип_запроса>",
            "source" : "<регулярное_выражение_для_источников_запросов>",
            "clientTags" : ["<список_тегов>"],
            "group" : "<имя_ресурсной_группы>"
          },
          # Правило маршрутизации 2
          {
            ... 
          },
          ...
          # Правило маршрутизации N
          {
            ... 
          }
        ],
        "cpuQuotaPeriod" : "<период_расчета_квоты_CPU>"
      }
    )
    

    Где:

    • rootGroups — описание дерева ресурсных групп. Параметры name, hardConcurrencyLimit и maxQueued являются обязательными.

      • name — имя группы.

        Имя группы может представлять собой шаблон, использующий подстановки переменных в формате ${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:

        • Встроенные: USER — имя пользователя, SOURCE — источник запроса.
        • Пользовательские: объявляются в параметрах правил маршрутизации user, userGroup и source.

        При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.

      • softMemoryLimit — максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. Значение softMemoryLimit может задаваться одним из способов:

        • В процентах от общего объема доступной памяти, например 10%.
        • Как абсолютное значение объема памяти, например 1GB. Можно использовать один из следующих суффиксов: B, kB, MB, GB, TB, PB.
      • softConcurrencyLimit — мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.

      • hardConcurrencyLimit — максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь.

      • softCpuLimit — мягкий лимит процессорного времени. При достижении этого лимита значение hardConcurrencyLimit будет снижено до окончания текущего периода расчета квоты CPU. Значение softCpuLimit не может быть больше, чем hardCpuLimit.

      • hardCpuLimit — жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.

      Примечание

      Если задан хотя бы один из параметров — softCpuLimit или hardCpuLimit, задайте также параметр cpuQuotaPeriod.

      • maxQueued — максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой.

      • schedulingPolicy — политика планирования запросов. Возможные значения:

        • FAIR
        • WEIGHTED
        • WEIGHTED_FAIR
        • QUERY_PRIORITY

        Если параметр не указан, действует политика FAIR.

      • schedulingWeight — вес группы, используемый в политиках планирования WEIGHTED и WEIGHTED_FAIR.

        Если параметр не указан, вес группы равен 1.

      • subGroups — описания дочерних групп.

    • selectors — описание правил маршрутизации. Параметр group является обязательным.

      • user — имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей.

      • userGroup — имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.

      • queryType — тип запроса. Возможные значения:

        • SELECT — запросы SELECT.
        • EXPLAIN — запросы EXPLAIN, кроме EXPLAIN ANALYZE.
        • DESCRIBE — запросы DESCRIBE, DESCRIBE INPUT и DESCRIBE OUTPUT, а также запросы SHOW (например, SHOW CATALOGS или SHOW SCHEMAS).
        • INSERT — запросы INSERT, CREATE TABLE AS и REFRESH MATERIALIZED VIEW.
        • MERGE — запросы MERGE.
        • DELETE — запросы DELETE.
        • ANALYZE — запросы ANALYZE.
        • DATA_DEFINITION — запросы CREATE, ALTER и DROP для схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.
        • ALTER_TABLE_EXECUTE — запросы вида ALTER TABLE ... EXECUTE.
      • source — имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.

      • clientTags — список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.

      • group — полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате ${<имя_переменной>}. Целевая группа не может иметь дочерних групп.

      Важно

      Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр group.

    • cpuQuotaPeriod — период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например 140s, 30m или 1h.

    Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.

    Примечание

    Вы также можете создать отдельный JSON-файл с описанием ресурсных групп и правил маршрутизации и передать его в параметре resource_groups следующим образом:

    resource_groups = file("resource-groups.json")
    
  3. Если описание ресурсных групп и правил маршрутизации уже задано, внесите правки в блок resource_groups или JSON-файл. Вы можете:

    • добавить новые ресурсные группы и правила маршрутизации;
    • изменить параметры существующих групп и правил;
    • удалить ненужные группы и правила.
  4. Проверьте корректность настроек.

    1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.

    2. Выполните команду:

      terraform validate
      

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  5. Подтвердите изменение ресурсов.

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

Подробнее см. в документации провайдера Terraform.

  1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

    export IAM_TOKEN="<IAM-токен>"
    
  2. Создайте файл body.json и добавьте в него следующее содержимое:

    {
      "updateMask": "<список_изменяемых_параметров>",
      "trino": {
        "resourceManagement": {
          "resourceGroups": {
            "rootGroups": [
              {
                "name" : "<имя_ресурсной_группы>",
                "softMemoryLimit" : "<лимит_использования_памяти>",
                "softConcurrencyLimit" : "<мягкий_лимит_числа_запущенных_запросов>",
                "hardConcurrencyLimit" : "<жесткий_лимит_числа_запущенных_запросов>",
                "softCpuLimit" : "<мягкий_лимит_процессорного_времени>",
                "hardCpuLimit" : "<жесткий_лимит_процессорного_времени>",
                "maxQueued" : "<лимит_числа_запросов_в_очереди>",
                "schedulingPolicy" : "<политика_планирования_запросов>",
                "schedulingWeight" : "<вес_группы>",
                "subGroups": [
                  {
                    <Дочерняя_ресурсная_группа_1>
                    ...
                    "subGroups" : [<список_дочерних_групп_следующих уровней>]
                  },
                  {
                    <Дочерняя_ресурсная_группа_2>
                    ...
                    "subGroups" : [<список_дочерних_групп_следующих уровней>]
                  },
                  ...
                  {
                    <Дочерняя_ресурсная_группа_N>
                    ...
                    "subGroups" : [<список_дочерних_групп_следующих уровней>]
                  }
                ]
              },
              {
                <Корневая_ресурсная_группа_2>
              },
              ...
              {
                <Корневая_ресурсная_группа_N>
              }
            ],
            "selectors": [
              {
                "user": "<регулярное_выражение_для_имен_пользователей>",
                "userGroup": "<регулярное_выражение_для_групп_пользователей>",
                "queryType": "<тип_запроса>",
                "source": "<регулярное_выражение_для_источников_запросов>",
                "clientTags": ["<список_тегов>"],
                "group": "<имя_ресурсной_группы>"
              },
              {
                <Правило_маршрутизации_2> 
              },
              ...
              {
                <Правило_маршрутизации_N>
              }
            ],
            "cpuQuotaPeriod": "<период_расчета_квоты_CPU>"
          }
          ...
        },
      }
    }
    

    Где:

    • updateMask — перечень изменяемых параметров в строку через запятую.

      Важно

      При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре updateMask.

    • rootGroups — описание дерева ресурсных групп. Параметры name, hardConcurrencyLimit и maxQueued являются обязательными.

      • name — имя группы.

        Имя группы может представлять собой шаблон, использующий подстановки переменных в формате ${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:

        • Встроенные: USER — имя пользователя, SOURCE — источник запроса.
        • Пользовательские: объявляются в параметрах правил маршрутизации user, userGroup и source.

        При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.

      • softMemoryLimit — максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. Значение softMemoryLimit может задаваться одним из способов:

        • В процентах от общего объема доступной памяти, например 10%.
        • Как абсолютное значение объема памяти, например 1GB. Можно использовать один из следующих суффиксов: B, kB, MB, GB, TB, PB.
      • softConcurrencyLimit — мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.

      • hardConcurrencyLimit — максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь.

      • softCpuLimit — мягкий лимит процессорного времени. При достижении этого лимита значение hardConcurrencyLimit будет снижено до окончания текущего периода расчета квоты CPU. Значение softCpuLimit не может быть больше, чем hardCpuLimit.

      • hardCpuLimit — жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.

      Примечание

      Если задан хотя бы один из параметров — softCpuLimit или hardCpuLimit, задайте также параметр cpuQuotaPeriod.

      • maxQueued — максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой.

      • schedulingPolicy — политика планирования запросов. Возможные значения:

        • FAIR
        • WEIGHTED
        • WEIGHTED_FAIR
        • QUERY_PRIORITY

        Если параметр не указан, действует политика FAIR.

      • schedulingWeight — вес группы, используемый в политиках планирования WEIGHTED и WEIGHTED_FAIR.

        Если параметр не указан, вес группы равен 1.

      • subGroups — описания дочерних групп.

    • selectors — описание правил маршрутизации. Параметр group является обязательным.

      • user — имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей.

      • userGroup — имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.

      • queryType — тип запроса. Возможные значения:

        • SELECT — запросы SELECT.
        • EXPLAIN — запросы EXPLAIN, кроме EXPLAIN ANALYZE.
        • DESCRIBE — запросы DESCRIBE, DESCRIBE INPUT и DESCRIBE OUTPUT, а также запросы SHOW (например, SHOW CATALOGS или SHOW SCHEMAS).
        • INSERT — запросы INSERT, CREATE TABLE AS и REFRESH MATERIALIZED VIEW.
        • MERGE — запросы MERGE.
        • DELETE — запросы DELETE.
        • ANALYZE — запросы ANALYZE.
        • DATA_DEFINITION — запросы CREATE, ALTER и DROP для схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.
        • ALTER_TABLE_EXECUTE — запросы вида ALTER TABLE ... EXECUTE.
      • source — имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.

      • clientTags — список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.

      • group — полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате ${<имя_переменной>}. Целевая группа не может иметь дочерних групп.

      Важно

      Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр group.

    • cpuQuotaPeriod — период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например 140s, 30m или 1h.

    Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.

  3. Воспользуйтесь методом Cluster.Update и выполните запрос, например с помощью cURL:

    curl \
      --request PATCH \
      --header "Authorization: Bearer $IAM_TOKEN" \
      --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters/<идентификатор_кластера>'
      --data '@body.json'
    

    Идентификатор кластера можно получить со списком кластеров в каталоге.

  4. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

  1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

    export IAM_TOKEN="<IAM-токен>"
    
  2. Клонируйте репозиторий cloudapi:

    cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
    

    Далее предполагается, что содержимое репозитория находится в директории ~/cloudapi/.

  3. Создайте файл body.json и добавьте в него следующее содержимое:

    {
      "cluster_id": "<идентификатор_кластера>",
        "update_mask": {
          "paths": [
            <список_изменяемых_параметров>
          ]
        },
      "trino": {
        "resource_management": {
          "resource_groups": {
            "root_groups": [
              {
                "name" : "<имя_ресурсной_группы>",
                "soft_memory_limit" : "<лимит_использования_памяти>",
                "soft_concurrency_limit" : "<мягкий_лимит_числа_запущенных_запросов>",
                "hard_concurrency_limit" : "<жесткий_лимит_числа_запущенных_запросов>",
                "soft_cpu_limit" : "<мягкий_лимит_процессорного_времени>",
                "hard_cpu_limit" : "<жесткий_лимит_процессорного_времени>",
                "max_queued" : "<лимит_числа_запросов_в_очереди>",
                "scheduling_policy" : "<политика_планирования_запросов>",
                "scheduling_weight" : "<вес_группы>",
                "sub_groups": [
                  {
                    <Дочерняя_ресурсная_группа_1>
                    ...
                    "sub_groups" : [<список_дочерних_групп_следующих уровней>]
                  },
                  {
                    <Дочерняя_ресурсная_группа_2>
                    ...
                    "sub_groups" : [<список_дочерних_групп_следующих уровней>]
                  },
                  ...
                  {
                    <Дочерняя_ресурсная_группа_N>
                    ...
                    "sub_groups" : [<список_дочерних_групп_следующих уровней>]
                  }
                ]
              },
              {
                <Корневая_ресурсная_группа_2>
              },
              ...
              {
                <Корневая_ресурсная_группа_N>
              }
            ],
            "selectors": [
              {
                "user": "<регулярное_выражение_для_имен_пользователей>",
                "user_group": "<регулярное_выражение_для_групп_пользователей>",
                "query_type": "<тип_запроса>",
                "source": "<регулярное_выражение_для_источников_запросов>",
                "client_tags": ["<список_тегов>"],
                "group": "<имя_ресурсной_группы>"
              },
              {
                <Правило_маршрутизации_2> 
              },
              ...
              {
                <Правило_маршрутизации_N>
              }
            ],
            "cpu_quota_period": "<период_расчета_квоты_CPU>"
          }
          ...
        },
      }
    }
    

    Где:

    • cluster_id — идентификатор кластера.

      Идентификатор кластера можно получить со списком кластеров в каталоге.

    • update_mask — перечень изменяемых параметров в виде массива строк paths[].

      "update_mask": {
        "paths": [
          "<настройка_1>",
          "<настройка_2>",
          ...
          "<настройка_N>"
        ]
      }
      

      Важно

      При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре update_mask.

    • root_groups — описание дерева ресурсных групп. Параметры name, hard_concurrency_limit и max_queued являются обязательными.

      • name — имя группы.

        Имя группы может представлять собой шаблон, использующий подстановки переменных в формате ${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:

        • Встроенные: USER — имя пользователя, SOURCE — источник запроса.
        • Пользовательские: объявляются в параметрах правил маршрутизации user, user_group и source.

        При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.

      • soft_memory_limit — максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. Значение soft_memory_limit может задаваться одним из способов:

        • В процентах от общего объема доступной памяти, например 10%.
        • Как абсолютное значение объема памяти, например 1GB. Можно использовать один из следующих суффиксов: B, kB, MB, GB, TB, PB.
      • soft_concurrency_limit — мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.

      • hard_concurrency_limit — максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь.

      • soft_cpu_limit — мягкий лимит процессорного времени. При достижении этого лимита значение hard_concurrency_limit будет снижено до окончания текущего периода расчета квоты CPU. Значение soft_cpu_limit не может быть больше, чем hard_cpu_limit.

      • hard_cpu_limit — жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.

      Примечание

      Если задан хотя бы один из параметров — soft_cpu_limit или hard_cpu_limit, задайте также параметр cpu_quota_period.

      • max_queued — максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой.

      • scheduling_policy — политика планирования запросов. Возможные значения:

        • FAIR
        • WEIGHTED
        • WEIGHTED_FAIR
        • QUERY_PRIORITY

        Если параметр не указан, действует политика FAIR.

      • scheduling_weight — вес группы, используемый в политиках планирования WEIGHTED и WEIGHTED_FAIR.

        Если параметр не указан, вес группы равен 1.

      • sub_groups — описания дочерних групп.

    • selectors — описание правил маршрутизации. Параметр group является обязательным.

      • user — имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей.

      • user_group — имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.

      • query_type — тип запроса. Возможные значения:

        • SELECT — запросы SELECT.
        • EXPLAIN — запросы EXPLAIN, кроме EXPLAIN ANALYZE.
        • DESCRIBE — запросы DESCRIBE, DESCRIBE INPUT и DESCRIBE OUTPUT, а также запросы SHOW (например, SHOW CATALOGS или SHOW SCHEMAS).
        • INSERT — запросы INSERT, CREATE TABLE AS и REFRESH MATERIALIZED VIEW.
        • MERGE — запросы MERGE.
        • DELETE — запросы DELETE.
        • ANALYZE — запросы ANALYZE.
        • DATA_DEFINITION — запросы CREATE, ALTER и DROP для схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.
        • ALTER_TABLE_EXECUTE — запросы вида ALTER TABLE ... EXECUTE.
      • source — имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.

      • client_tags — список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.

      • group — полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате ${<имя_переменной>}. Целевая группа не может иметь дочерних групп.

      Важно

      Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр group.

    • cpu_quota_period — период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например 140s, 30m или 1h.

    Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.

  4. Воспользуйтесь вызовом ClusterService.Update и выполните запрос, например с помощью gRPCurl:

    grpcurl \
      -format json \
      -import-path ~/cloudapi/ \
      -import-path ~/cloudapi/third_party/googleapis/ \
      -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \
      -rpc-header "Authorization: Bearer $IAM_TOKEN" \
      -d @ \
      trino.api.cloud.yandex.net:443 \
      yandex.cloud.trino.v1.ClusterService.Update \
      < body.json
    
  5. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

Удалить конфигурацию ресурсных группУдалить конфигурацию ресурсных групп

Консоль управления
CLI
Terraform
REST API
gRPC API
  1. В консоли управления перейдите в нужный каталог.
  2. Перейдите в сервис Managed Service for Trino.
  3. Нажмите на имя нужного кластера.
  4. Перейдите в блок Управление ресурсами.
  5. Чтобы удалить ненужные ресурсные группы:
    1. В строке ресурсной группы, которую вы хотите удалить, нажмите на значок .
    2. (Опционально) Удалите другие ресурсные группы аналогичным образом.
  6. Чтобы удалить ненужные правила маршрутизации:
    1. В строке правила, которое вы хотите удалить, нажмите на значок .
    2. (Опционально) Удалите другие правила маршрутизации аналогичным образом.
  7. Нажмите кнопку Сохранить изменения.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

Чтобы удалить все ресурсные группы и правила маршрутизации, выполните команду:

yc managed-trino cluster remove-resource-groups <имя_или_идентификатор_кластера>

Идентификатор и имя кластера можно запросить со списком кластеров в каталоге.

  1. Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.

    О том, как создать такой файл, см. в разделе Создание кластера.

  2. Чтобы удалить все ресурсные группы и правила маршрутизации, удалите из описания кластера параметр resource_groups.

  3. Проверьте корректность настроек.

    1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.

    2. Выполните команду:

      terraform validate
      

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  4. Подтвердите изменение ресурсов.

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

  1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

    export IAM_TOKEN="<IAM-токен>"
    
  2. Создайте файл body.json и добавьте в него следующее содержимое:

    {
      "updateMask": "trino.resourceManagement.resourceGroups",
      "trino": {
        "resourceManagement": {
          "resourceGroups": {}
        }
      }
    }
    

    Где:

    • updateMask — перечень изменяемых параметров в строку через запятую.

      Важно

      При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре updateMask.

    • resourceGroups — описание ресурсных групп и правил маршрутизации.

  3. Воспользуйтесь методом Cluster.Update и выполните запрос, например с помощью cURL:

    curl \
      --request PATCH \
      --header "Authorization: Bearer $IAM_TOKEN" \
      --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters/<идентификатор_кластера>'
      --data '@body.json'
    

    Идентификатор кластера можно получить со списком кластеров в каталоге.

  4. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

  1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

    export IAM_TOKEN="<IAM-токен>"
    
  2. Клонируйте репозиторий cloudapi:

    cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
    

    Далее предполагается, что содержимое репозитория находится в директории ~/cloudapi/.

  3. Создайте файл body.json и добавьте в него следующее содержимое:

    {
      "cluster_id": "<идентификатор_кластера>",
      "update_mask": {
        "paths": [
          "trino.resource_management.resource_groups"
        ]
      },
      "trino": {
        "resource_management": {
          "resource_groups": {}
        }
      }
    }
    

    Где:

    • cluster_id — идентификатор кластера.

      Идентификатор кластера можно получить со списком кластеров в каталоге.

    • update_mask — перечень изменяемых параметров в виде массива строк paths[].

      Формат перечисления настроек
      "update_mask": {
        "paths": [
          "<настройка_1>",
          "<настройка_2>",
          ...
          "<настройка_N>"
        ]
      }
      

      Важно

      При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре update_mask.

    • resource_groups — описание ресурсных групп и правил маршрутизации.

  4. Воспользуйтесь вызовом ClusterService.Update и выполните запрос, например с помощью gRPCurl:

    grpcurl \
      -format json \
      -import-path ~/cloudapi/ \
      -import-path ~/cloudapi/third_party/googleapis/ \
      -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \
      -rpc-header "Authorization: Bearer $IAM_TOKEN" \
      -d @ \
      trino.api.cloud.yandex.net:443 \
      yandex.cloud.trino.v1.ClusterService.Update \
      < body.json
    
  5. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

Пример конфигурации ресурсных групп в кластере Managed Service for TrinoПример конфигурации ресурсных групп в кластере Managed Service for Trino

В примере используются следующие ресурсные группы:

  • global — корневая группа, задающая общие лимиты hardConcurrencyLimit и maxQueued. Группа global содержит дочерние группы adm, bi, etl и adhoc.

  • adm — группа для запросов администраторов и запросов с типом DATA_DEFINITION. Благодаря высокому значению schedulingWeight снижается вероятность блокировки этих запросов пользовательской нагрузкой.

  • bi — группа для запросов систем бизнес-аналитики. В этой группе используется лимит softMemoryLimit, чтобы запросы не занимали слишком много памяти и не вытесняли другие типы запросов. Внутри этой группы для каждого инструмента создается экземпляр дочерней группы с динамически сформированным именем. Внутри группы каждого инструмента создаются экземпляры дочерних групп для каждого пользователя. Это задает отдельный лимит для каждого инструмента и пользователя. В результате ограничивается влияние запросов от разных пользователей и разных инструментов друг на друга.

  • etl — группа для запросов извлечения, преобразования и загрузки данных. В этой группе используются лимиты softCpuLimit и hardCpuLimit, чтобы ограничить потребление процессорного времени запросами.

  • adhoc — группа для интерактивных пользовательских запросов. Внутри этой группы для каждого пользователя создается экземпляр дочерней группы с динамически сформированным именем. Это задает отдельный лимит для каждого пользователя, что ограничивает влияние запросов от разных пользователей друг на друга.

Между группами adm, bi, etl и adhoc запросы распределяются в соответствии с политикой планирования weighted_fair. Для группы adhoc не указан параметр schedulingWeight, поэтому используется значение по умолчанию — 1. Для групп bi и adhoc не указана политика планирования, поэтому между их дочерними группами запросы распределяются в соответствии с политикой по умолчанию fair.

Для направления запросов в группы используются следующие правила маршрутизации:

  1. Запросы пользователей из группы admins направляются в ресурсную группу global.adm.

  2. Запросы с тегом etl_job направляются в группу global.etl.

  3. Запросы с типом DATA_DEFINITION направляются в ресурсную группу global.adm. Благодаря этому запросы для вызова процедуры system.runtime.kill_query() не будут ожидать завершения других пользовательских запросов.

  4. Запросы типа SELECT от источника с именем вида jdbc#(?<toolname>[^#]+) направляются в группу-шаблон global.bi.${toolname}.${USER}. Например, запрос пользователя bob от источника jdbc#grafana будет направлен в экземпляр группы с именем global.bi.grafana.bob.

  5. Все остальные запросы направляются в группу-шаблон global.adhoc.${USER}. Например, запрос пользователя bob будет направлен в экземпляр группы с именем global.adhoc.bob.

CLI
Terraform
REST API
gRPC API

Файл resource-groups.json этого примера:

{
  "rootGroups": [
    {
      "name": "global",
      "hardConcurrencyLimit": 20,
      "maxQueued": 200,
      "schedulingPolicy": "weighted_fair",
      "subGroups": [
        {
          "name": "adm",
          "hardConcurrencyLimit": 5,
          "maxQueued": 50,
          "schedulingWeight": 5
        },
        {
          "name": "bi",
          "hardConcurrencyLimit": 10,
          "softMemoryLimit": "20%",
          "maxQueued": 100,
          "schedulingWeight": 3,
          "subGroups": [
            {
              "name": "${toolname}",
              "hardConcurrencyLimit": 5,
              "maxQueued": 50,
              "subGroups": [
                {
                  "name": "${USER}",
                  "hardConcurrencyLimit": 2,
                  "maxQueued": 20
                }
              ]
            }
          ]
        },
        {
          "name": "etl",
          "hardConcurrencyLimit": 5,
          "softCpuLimit": "20s",
          "hardCpuLimit": "40s",
          "maxQueued": 50,
          "schedulingWeight": 1
        },
        {
          "name": "adhoc",
          "hardConcurrencyLimit": 5,
          "maxQueued": 100,
          "subGroups": [
            {
              "name": "${USER}",
              "hardConcurrencyLimit": 2,
              "maxQueued": 20
            }
          ]
        }
      ]
    }
  ],
  "selectors": [
    {
      "userGroup": "admins",
      "group": "global.adm"
    },
    {
      "clientTags": ["etl_job"],
      "group": "global.etl"
    },
    {
      "queryType": "DATA_DEFINITION",
      "group": "global.adm"
    },
    {
      "source": "jdbc#(?<toolname>[^#]+)",
      "queryType": "SELECT",
      "group": "global.bi.${toolname}.${USER}"
    },
    {
      "group": "global.adhoc.${USER}"
    }
  ],
  "cpuQuotaPeriod": "1m"
}

Файл resource-groups.json этого примера:

{
  "rootGroups": [
    {
      "name": "global",
      "hardConcurrencyLimit": 20,
      "maxQueued": 200,
      "schedulingPolicy": "weighted_fair",
      "subGroups": [
        {
          "name": "adm",
          "hardConcurrencyLimit": 5,
          "maxQueued": 50,
          "schedulingWeight": 5
        },
        {
          "name": "bi",
          "hardConcurrencyLimit": 10,
          "softMemoryLimit": "20%",
          "maxQueued": 100,
          "schedulingWeight": 3,
          "subGroups": [
            {
              "name": "${toolname}",
              "hardConcurrencyLimit": 5,
              "maxQueued": 50,
              "subGroups": [
                {
                  "name": "${USER}",
                  "hardConcurrencyLimit": 2,
                  "maxQueued": 20
                }
              ]
            }
          ]
        },
        {
          "name": "etl",
          "hardConcurrencyLimit": 5,
          "softCpuLimit": "20s",
          "hardCpuLimit": "40s",
          "maxQueued": 50,
          "schedulingWeight": 1
        },
        {
          "name": "adhoc",
          "hardConcurrencyLimit": 5,
          "maxQueued": 100,
          "subGroups": [
            {
              "name": "${USER}",
              "hardConcurrencyLimit": 2,
              "maxQueued": 20
            }
          ]
        }
      ]
    }
  ],
  "selectors": [
    {
      "userGroup": "admins",
      "group": "global.adm"
    },
    {
      "clientTags": ["etl_job"],
      "group": "global.etl"
    },
    {
      "queryType": "DATA_DEFINITION",
      "group": "global.adm"
    },
    {
      "source": "jdbc#(?<toolname>[^#]+)",
      "queryType": "SELECT",
      "group": "global.bi.${toolname}.${USER}"
    },
    {
      "group": "global.adhoc.${USER}"
    }
  ],
  "cpuQuotaPeriod": "1m"
}

Файл body.json этого примера:

{
  "updateMask": "trino.resourceManagement.resourceGroups",
  "trino": {
    "resourceManagement": {
      "resourceGroups": {
        "rootGroups": [
          {
            "name": "global",
            "hardConcurrencyLimit": "20",
            "maxQueued": "200",
            "schedulingPolicy": "weighted_fair",
            "subGroups": [
              {
                "name": "adm",
                "hardConcurrencyLimit": "5",
                "maxQueued": "50",
                "schedulingWeight": "5"
              },
              {
                "name": "bi",
                "hardConcurrencyLimit": "10",
                "softMemoryLimit": "20%",
                "maxQueued": "100",
                "schedulingWeight": "3",
                "subGroups": [
                  {
                    "name": "${toolname}",
                    "hardConcurrencyLimit": "5",
                    "maxQueued": "50",
                    "subGroups": [
                      {
                        "name": "${USER}",
                        "hardConcurrencyLimit": "2",
                        "maxQueued": "20"
                      }
                    ]
                  }
                ]
              },
              {
                "name": "etl",
                "hardConcurrencyLimit": "5",
                "softCpuLimit": "20s",
                "hardCpuLimit": "40s",
                "maxQueued": "50",
                "schedulingWeight": "1"
              },
              {
                "name": "adhoc",
                "hardConcurrencyLimit": "5",
                "maxQueued": "100",
                "subGroups": [
                  {
                    "name": "${USER}",
                    "hardConcurrencyLimit": "2",
                    "maxQueued": "20"
                  }
                ]
              }
            ]
          }
        ],
        "selectors": [
          {
            "userGroup": "admins",
            "group": "global.adm"
          },
          {
            "clientTags": ["etl_job"],
            "group": "global.etl"
          },
          {
            "queryType": "DATA_DEFINITION",
            "group": "global.adm"
          },
          {
            "source": "jdbc#(?<toolname>[^#]+)",
            "queryType": "SELECT",
            "group": "global.bi.${toolname}.${USER}"
          },
          {
            "group": "global.adhoc.${USER}"
          }
        ],
        "cpuQuotaPeriod": "1m"
      }
    }
  }
}

Файл body.json этого примера:

{
  "cluster_id": "<идентификатор_кластера>",
  "update_mask": {
    "paths": [
      "trino.resource_management.resource_groups"
    ]
  },
  "trino": {
    "resource_management": {
      "resource_groups": {
        "root_groups": [
          {
            "name": "global",
            "hard_concurrency_limit": "20",
            "max_queued": "200",
            "scheduling_policy": "weighted_fair",
            "sub_groups": [
              {
                "name": "adm",
                "hard_concurrency_limit": "5",
                "max_queued": "50",
                "scheduling_weight": "5"
              },
              {
                "name": "bi",
                "hard_concurrency_limit": "10",
                "soft_memory_limit": "20%",
                "max_queued": "100",
                "scheduling_weight": "3",
                "sub_groups": [
                  {
                    "name": "${toolname}",
                    "hard_concurrency_limit": "5",
                    "max_queued": "50",
                    "sub_groups": [
                      {
                        "name": "${USER}",
                        "hard_concurrency_limit": "2",
                        "max_queued": "20"
                      }
                    ]
                  }
                ]
              },
              {
                "name": "etl",
                "hard_concurrency_limit": "5",
                "soft_cpu_limit": "20s",
                "hard_cpu_limit": "40s",
                "max_queued": "50",
                "scheduling_weight": "1"
              },
              {
                "name": "adhoc",
                "hard_concurrency_limit": "5",
                "max_queued": "100",
                "sub_groups": [
                  {
                    "name": "${USER}",
                    "hard_concurrency_limit": "2",
                    "max_queued": "20"
                  }
                ]
              }
            ]
          }
        ],
        "selectors": [
          {
            "user_group": "admins",
            "group": "global.adm"
          },
          {
            "client_tags": ["etl_job"],
            "group": "global.etl"
          },
          {
            "query_type": "DATA_DEFINITION",
            "group": "global.adm"
          },
          {
            "source": "jdbc#(?<toolname>[^#]+)",
            "query_type": "SELECT",
            "group": "global.bi.${toolname}.${USER}"
          },
          {
            "group": "global.adhoc.${USER}"
          }
        ],
        "cpu_quota_period": "1m"
      }
    }
  }
}

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

Предыдущая
Техническое обслуживание
Следующая
Удаление кластера
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»