BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Российские платформы современного стека хранения, обработки и анализа данных » Хранилища данных (DWH / Lakehouse) » ClickHouse » Как работают первичные ключи Clickhouse

Как работают первичные ключи Clickhouse

Система индексирования и хранения данных Clickhouse довольно сложная, что обеспечивает непревзойденную производительность   СУБД. При создании таблицы MergeTree в первую очередь необходимо выбрать первичный ключ, который как раз и будет влиять на производительность большинства аналитических запросов. Как работают эти первичные ключи? Как выбрать наиболее подходящий? Давайте разбираться вместе!

 

Указываем первичный ключ

Каждая таблица MergeTree может иметь только один первичный ключ, который должен быть указан при создании таблицы:

CREATE TABLE test
(
    `dt` DateTime,
    `event` String,
    `user_id` UInt64,
    `context` String
)
ENGINE = MergeTree
PRIMARY KEY (event, user_id, dt)
ORDER BY (event, user_id, dt)

 

В данном случае  мы создали первичный ключ для 3 столбцов в следующем порядке: event, user_id, dt. Обратите внимание на то, что первичный ключ должен быть таким же, как и ключ сортировки (заданный выражением ORDER BY) или представлять собой его префикс.

Ключ сортировки определяет порядок, в котором данные будут храниться на диске, а первичный ключ определяет то, как данные будут структурированы для выполнения запросов. Обычно они совпадают (в этом случае Вы можете опустить выражение PRIMARY KEY, Clickhouse возьмет эту информацию из выражения ORDER BY).

 

Гранулы

Clickhouse логически разделяет каждый набор данных на группы или гранулы:

 

Количество гранул определяется автоматически в зависимости от настроек таблицы. По умолчанию размер гранулы составляет 8192 записи, поэтому количество гранул для нашей таблицы будет равно:

 

Гранула – это что-то вроде виртуальной «минитаблицы» с небольшим количеством записей (по умолчанию 8192), которые являются подмножеством всех записей основной таблицы.

Каждая гранула хранит в себе строки в отсортированном порядке, который определяется при создании таблицы выражением ORDER BY:

 

Первичные ключи и индексы

Первичный ключ хранит только первую строку каждой гранулы:

 

Именно поэтому Clickhouse работает так быстро. Вместо того чтобы хранить все значения, он сохраняет только их часть, именно поэтому первичные ключи такие короткие. Вместо того, чтобы искать отдельные строки, Clickhouse сначала находит гранулы, а затем выполняет их полное сканирование (что очень эффективно ввиду небольшого размера каждой гранулы)

:

 

Производительность запросов

Занесем в нашу таблицу 50 млн случайных  записей:

INSERT INTO test
SELECT * FROM generateRandom(
  'dt datetime, event Text, user_id UInt64, context Text'
) LIMIT 50000000;

 

Как указано выше, первичный ключ нашей таблицы состоит из 3 столбцов:

 

Clickhouse сможет использовать первичный ключ для поиска данных, если в запросе мы будем использовать столбец (столбцы), входящий в его состав:

 

Итак, в результате поиска по определенному значению столбца мы получили только одну гранулу, что можно подтвердить с помощью EXPLAIN:

 

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

 

Если мы будем использовать столбцы, не входящие в состав первичного ключа, то для того, чтобы Clickhouse мог найти интересующие нас данные, ему придется просканировать всю таблицу:

 

В то же самое время, если мы будем использовать столбец(ы) из первичного ключа, но пропустим начальный столбец(ы), Clickhouse не сможет полностью использовать индекс первичного ключа:

 

В каких случаях используется индекс первичного ключа

Clickhouse использует индекс первичного ключа в следующих случаях:

  • Запрос WHERE или ORDER содержит первый столбец первичного ключа.
  • Запрос WHERE содержит первые X столбцов первичного ключа, а ORDER (если есть)  - следующие столбцы первичного ключа.
  • Запрос WHERE содержит все столбцы первичного ключа.

 

В других случаях для того, чтобы найти искомые данные, Clickhouse придется просканировать всю таблицу.

 

Заключение

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

  • Выбирайте только те столбцы, которые планируете использовать в большинстве запросов;
  • Определите порядок, который будет охватывать большинство случаев частичного использования первичного ключа (например, в запросе используется 1 или 2 столбца, а первичный ключ содержит 3).
  • Если Вы не уверены, используйте сначала столбцы с низкой кардинальностью, а затем  - столбцы с высокой кардинальностью. Благодаря этому сжатие данных пройдет более эффективно.

 

Узнать стоимость решенияЗапросить видео презентацию

← Предыдущая статья
ClickHouse и видеоаналитика
Следующая статья →
Конвертация часовых поясов на аналитической платформе, основанной на ClickHouse

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • "Уральский банк реконструкции и развития" входит в топ-25 крупнейших банков России и список значимых кредитных организаций на рынке платежных услуг по версии ЦБ РФ.

  • НПФ «Будущее» — один из крупнейших негосударственных пенсионных фондов России, предоставляющий услуги по пенсионному обеспечению и накоплениям. Фонд активно внедряет цифровые технологии для повышения качества обслуживания клиентов.

  •  ООО «ММК-Информсервис» создает высокотехнологичные решения для эффективной работы предприятий. Разрабатывают и внедряют телекоммуникационные и бизнес-приложения, автоматизируют производство, выстраивают и поддерживают корпоративную IT-инфраструктуру.

  • Ситилинк

    Электронный дискаунтер «Ситилинк» — один из крупнейших онлайн‑ритейлеров России (3‑е место по объему онлайн‑продаж в рейтинге Data Insight и Ruward 2016 года E‑commerce Index TOP‑100, 8 место в рейтинге Forbes «20 самых дорогих компаний Рунета — 2017»). На рынке работает 9 лет.

    В ассортименте дискаунтера более 50 000 наименований компьютерной цифровой, бытовой и садовой техники, офисной мебели и других товарных категорий. Более 700 мировых брендов в портфеле. Около 4 000 сотрудников по всей России

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.