Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for ClickHouse®
  • Начало работы
    • Все руководства
    • Добавление данных в БД
    • Миграция данных в Managed Service for ClickHouse® средствами ClickHouse®
    • Миграция данных в Managed Service for ClickHouse® при помощи Data Transfer
    • Шардирование таблиц
    • Перешардирование данных в кластере
    • Использование гибридного хранилища
    • Получение данных из Managed Service for Apache Kafka®
    • Получение данных из RabbitMQ
    • Обмен данными с Yandex Data Processing
    • Настройка Yandex Cloud DNS для доступа к кластеру из других облачных сетей
    • Анализ логов Yandex Object Storage при помощи Yandex DataLens
    • Настройка Managed Service for ClickHouse® для Graphite
    • Сохранение потока данных Yandex Data Streams в Managed Service for ClickHouse®
    • Миграция базы данных из Google BigQuery
    • Поставка данных из Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Миграция данных из Яндекс Директ с использованием Yandex Cloud Functions, Yandex Object Storage и Yandex Data Transfer
    • Загрузка данных из Yandex Object Storage в Managed Service for ClickHouse® с помощью Yandex Data Transfer
    • Миграция базы данных из Greenplum® в ClickHouse®
    • Миграция базы данных из MySQL® в ClickHouse® с помощью Yandex Data Transfer
    • Асинхронная репликация данных из PostgreSQL в ClickHouse®
    • Загрузка данных из Yandex Managed Service for YDB в Managed Service for ClickHouse® с помощью Yandex Data Transfer
    • Копирование данных из Managed Service for OpenSearch в Managed Service for ClickHouse® с помощью Yandex Data Transfer
    • Ввод данных в системы хранения
    • Использование параметров
    • Примеры создания QL-чартов
    • Веб-аналитика с расчетом воронок и когорт на данных Яндекс Метрики
    • AppMetrica: прямое подключение
    • AppMetrica: экспорт, постобработка и визуализация данных
    • Загрузка данных из Яндекс Метрика в витрину ClickHouse®
    • Yandex Tracker: экспорт и визуализация данных
    • Дашборд сети магазинов из БД ClickHouse®
    • Анализ продаж и локаций пиццерий на данных из БД ClickHouse® и Marketplace
    • Геокодинг с помощью API Яндекс Карт для визуализации в DataLens
    • Импорт данных из Object Storage, обработка и экспорт в Managed Service for ClickHouse®
    • Работа с данными с помощью Query
    • Федеративные запросы к данным с помощью Query
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Yandex Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Обучающие курсы

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

  • Необходимые платные ресурсы
  • Перед началом работы
  • Подготовьте инфраструктуру
  • Настройте clickhouse-client
  • Создайте таблицы с данными
  • Классическое шардирование
  • Шардирование с использованием групп шардов
  • Продвинутое шардирование с использованием групп шардов
  • Проверьте работоспособность таблиц
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Шардирование таблиц

Шардирование таблиц в ClickHouse®

Статья создана
Yandex Cloud
Обновлена 8 апреля 2025 г.
  • Необходимые платные ресурсы
  • Перед началом работы
    • Подготовьте инфраструктуру
    • Настройте clickhouse-client
  • Создайте таблицы с данными
    • Классическое шардирование
    • Шардирование с использованием групп шардов
    • Продвинутое шардирование с использованием групп шардов
  • Проверьте работоспособность таблиц
  • Удалите созданные ресурсы

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

Существует три подхода к шардированию:

  • Классический, когда распределенная таблица использует все шарды кластера.
  • С группами шардов, когда часть шардов объединена в группу.
  • Продвинутый с группами шардов, когда шарды разделены на две группы: в одной находится распределенная таблица, в другой — нижележащие таблицы.

Далее рассмотрены примеры настройки шардирования для всех трех подходов.

Подробнее читайте в разделе Шардирование в Managed Service for ClickHouse®.

Чтобы настроить шардирование:

  1. Создайте таблицы с данными.
  2. Проверьте работоспособность таблиц.

Если созданные ресурсы вам больше не нужны, удалите их.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за кластер Managed Service for ClickHouse®: использование вычислительных ресурсов, выделенных хостам (в том числе хостам ZooKeeper), и дискового пространства (см. тарифы Managed Service for ClickHouse®).
  • Плата за использование публичных IP-адресов, если для хостов кластера включен публичный доступ (см. тарифы Virtual Private Cloud).

Перед началом работыПеред началом работы

Подготовьте инфраструктуруПодготовьте инфраструктуру

Вручную
Terraform
  1. Создайте кластер Managed Service for ClickHouse®:

    • Имя кластера — chcluster.

    • Тип диска — выберите нужный тип дисков.

      От выбранного типа дисков зависит минимальное количество хостов в каждом шарде:

      • Два хоста, если выбраны локальные SSD-диски (local-ssd).
      • Три хоста, если выбраны сетевые нереплицируемые диски (network-ssd-nonreplicated).

      Дополнительные хосты для этих типов дисков необходимы для обеспечения отказоустойчивости.

      Подробнее см. в разделе Типы дисков в Managed Service for ClickHouse®.

    • Имя БД — tutorial.

    Хосты кластера должны быть доступны из интернета.

  2. Создайте два дополнительных шарда с именами shard2, shard3.

  3. Добавьте в кластер три хоста ZooKeeper.

  4. Создайте группы шардов. Их количество зависит от типа шардирования:

    • Шардирование с использованием групп шардов требует одну группу шардов с именем sgroup, которая включает шарды shard1 и shard2.
    • Продвинутое шардирование с использованием групп шардов требует две группы:
      • sgroup включает shard1 и shard2.
      • sgroup_data включает shard3.

    Для классического шардирования создание групп шардов не требуется.

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

  1. Если у вас еще нет Terraform, установите его.

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

  3. Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

  4. Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.

  5. Скачайте в ту же рабочую директорию файл конфигурации для одного из описанных ниже примеров шардирования:

    • simple-sharding.tf — классическое шардирование.
    • sharding-with-groups.tf — шардирование с использованием групп шардов.
    • advanced-sharding-with-groups.tf — продвинутое шардирование с использованием групп шардов.

    В каждом файле описаны:

    • сеть;
    • подсеть;
    • группа безопасности по умолчанию и правила, необходимые для подключения к кластеру из интернета;
    • кластер Managed Service for ClickHouse® с необходимыми хостами и шардами.
  6. Укажите в конфигурационном файле имя пользователя и пароль, которые будут использоваться для доступа к кластеру Managed Service for ClickHouse®.

  7. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

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

  8. Создайте необходимую инфраструктуру:

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

      terraform plan
      

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

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

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

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

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

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

Настройте clickhouse-clientНастройте clickhouse-client

Установите и настройте clickhouse-client, чтобы иметь возможность подключаться с его помощью к базе данных.

Создайте таблицы с даннымиСоздайте таблицы с данными

Пусть необходимо включить шардирование для таблицы hits_v1. Текст запроса на создание таблицы зависит от выбранного подхода к шардированию.

Структура таблицы, которую нужно подставить вместо обозначения <структура_таблицы>, приведена в документации ClickHouse®.

После включения шардирования любым из способов, вы сможете отправлять SELECT- и INSERT-запросы к созданной распределенной таблице, и они будут обрабатываться согласно заданной конфигурации.

В примерах в качестве ключа шардирования используется случайное число rand().

Классическое шардированиеКлассическое шардирование

В этом примере распределенная таблица, которая будет создана на основе hits_v1, использует все шарды shard1, shard2, shard3 кластера chcluster.

Перед работой с распределенной таблицей:

  1. Подключитесь к базе tutorial.

  2. Создайте таблицу hits_v1 на движке MergeTree, которая будет размещена на всех хостах кластера:

    CREATE TABLE tutorial.hits_v1 ON CLUSTER '{cluster}' ( <структура_таблицы> )
    ENGINE = MergeTree()
    PARTITION BY toYYYYMM(EventDate)
    ORDER BY (CounterID, EventDate, intHash32(UserID))
    SAMPLE BY intHash32(UserID)
    SETTINGS index_granularity = 8192
    

Чтобы создать распределенную таблицу hits_v1_distributed в кластере:

  1. Подключитесь к базе tutorial.

  2. Создайте таблицу на движке Distributed:

    CREATE TABLE tutorial.hits_v1_distributed ON CLUSTER '{cluster}' AS tutorial.hits_v1
    ENGINE = Distributed('{cluster}', tutorial, hits_v1, rand())
    

    Здесь допустимо вместо явного указания структуры таблицы использовать выражение AS tutorial.hits_v1, т. к. таблицы hits_v1_distributed и hits_v1 находятся на одних и тех же хостах кластера.

    При создании таблицы на движке Distributed укажите идентификатор кластера chcluster. Его можно получить со списком кластеров в каталоге.

    Совет

    Вместо идентификатора кластера можно использовать макрос {cluster} — при выполнении запроса идентификатор кластера, в котором выполняется операция CREATE TABLE, будет подставлен автоматически.

Шардирование с использованием групп шардовШардирование с использованием групп шардов

В этом примере:

  • Используется одна группа шардов sgroup.
  • Распределенная таблица и нижележащая таблица hits_v1 расположены в одной группе шардов sgroup кластера.

Перед работой с распределенной таблицей:

  1. Подключитесь к базе tutorial.

  2. Создайте таблицу hits_v1 на движке MergeTree, которая использует все хосты группы шардов sgroup кластера:

    CREATE TABLE tutorial.hits_v1 ON CLUSTER sgroup ( <структура_таблицы> )
    ENGINE = MergeTree()
    PARTITION BY toYYYYMM(EventDate)
    ORDER BY (CounterID, EventDate, intHash32(UserID))
    SAMPLE BY intHash32(UserID)
    SETTINGS index_granularity = 8192
    

Чтобы создать распределенную таблицу tutorial.hits_v1_distributed в кластере:

  1. Подключитесь к базе tutorial.

  2. Создайте таблицу на движке Distributed:

    CREATE TABLE tutorial.hits_v1_distributed ON CLUSTER sgroup AS tutorial.hits_v1
    ENGINE = Distributed(sgroup, tutorial, hits_v1, rand())
    

    Здесь допустимо вместо явного указания структуры таблицы использовать выражение AS tutorial.hits_v1, т. к. таблицы hits_v1_distributed и hits_v1 используют один шард и находятся на одних и тех же хостах.

Продвинутое шардирование с использованием групп шардовПродвинутое шардирование с использованием групп шардов

В этом примере:

  1. Используются две группы шардов: sgroup и sgroup_data.
  2. Распределенная таблица расположена в группе шардов sgroup.
  3. Нижележащая таблица hits_v1 расположена в группе шардов sgroup_data.

Перед работой с распределенной таблицей:

  1. Подключитесь к базе tutorial.

  2. Создайте таблицу hits_v1 на движке ReplicatedMergeTree, которая использует все хосты группы шардов sgroup_data кластера:

    CREATE TABLE tutorial.hits_v1 ON CLUSTER sgroup_data ( <структура_таблицы> )
    ENGINE = ReplicatedMergeTree('/tables/{shard}/hits_v1', '{replica}')
    PARTITION BY toYYYYMM(EventDate)
    ORDER BY (CounterID, EventDate, intHash32(UserID))
    SAMPLE BY intHash32(UserID)
    SETTINGS index_granularity = 8192
    

    Движок ReplicatedMergeTree используется для обеспечения отказоустойчивости.

Чтобы создать распределенную таблицу tutorial.hits_v1_distributed в кластере:

  1. Подключитесь к базе tutorial.

  2. Создайте таблицу на движке Distributed:

    CREATE TABLE tutorial.hits_v1_distributed ON CLUSTER sgroup ( <структура_таблицы> )
    ENGINE = Distributed(sgroup_data, tutorial, hits_v1, rand())
    

    Здесь необходимо явно указать структуру распределенной таблицы, т. к. таблицы hits_v1_distributed и hits_v1 используют разные шарды и находятся на разных хостах.

Проверьте работоспособность таблицПроверьте работоспособность таблиц

Чтобы проверить работоспособность созданной распределенной таблицы tutorial.hits_v1_distributed:

  1. Загрузите тестовый набор данных hits_v1:

    curl https://storage.yandexcloud.net/doc-files/managed-clickhouse/hits_v1.tsv.xz | unxz --threads=`nproc` > hits_v1.tsv
    
  2. Наполните таблицу тестовыми данными:

    clickhouse-client \
       --host "<FQDN_любого_хоста_с_распределенной_таблицей>" \
       --secure \
       --port 9440 \
       --user "<имя_пользователя>" \
       --password "<пароль_пользователя>" \
       --database "tutorial" \
       --query "INSERT INTO tutorial.hits_v1_distributed FORMAT TSV" \
       --max_insert_block_size=100000 < hits_v1.tsv
    

    Чтобы узнать имена хостов, посмотрите список хостов ClickHouse® в кластере.

  3. Выполните один или несколько тестовых запросов к этой таблице. Например, можно узнать количество строк в ней:

    SELECT count() FROM tutorial.hits_v1_distributed
    

    Результат:

    8873898
    

Удалите созданные ресурсыУдалите созданные ресурсы

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

Вручную
Terraform
  1. Удалите кластер Managed Service for ClickHouse®.
  2. Если для доступа к кластеру использовались статические публичные IP-адреса, освободите и удалите их.
  1. В терминале перейдите в директорию с планом инфраструктуры.

    Важно

    Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.

  2. Удалите ресурсы:

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

      terraform destroy
      
    2. Подтвердите удаление ресурсов и дождитесь завершения операции.

    Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.

ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc.

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

Предыдущая
Миграция данных в Managed Service for ClickHouse® при помощи Data Transfer
Следующая
Перешардирование данных в кластере
Проект Яндекса
© 2025 ООО «Яндекс.Облако»