Вставка в ClickHouse в сравнении с OLTP-базами данных
Рекомендации по вставке данных
Выполняйте вставку большими батчами
Обеспечьте согласованность батчей для идемпотентных повторных попыток
-
- Если на узле, принимающем данные, возникают проблемы, запрос на вставку завершится по тайм-ауту (или вернет более конкретную ошибку), и подтверждение получено не будет.
-
- Если узел записал данные, но из-за сетевых сбоев не может вернуть подтверждение отправителю запроса, отправитель либо получит тайм-аут, либо ошибку сети.
Вставка в таблицу MergeTree или distributed таблицу
internal_replication=true.
Это позволит ClickHouse реплицировать данные на любые доступные реплики сегментов и обеспечит итоговую согласованность данных.
Если такая балансировка нагрузки на стороне клиента неудобна, то можно выполнять вставку через distributed таблицу, которая затем распределит записи по узлам. В этом случае также рекомендуется установить internal_replication=true.
Однако стоит отметить, что этот подход немного менее производителен, поскольку записи сначала выполняются локально на узле с distributed таблицей, а затем отправляются в сегменты.
Используйте асинхронные вставки для небольших батчей
Используйте официальные клиенты ClickHouse
Предпочитайте формат Native
Использование HTTP-интерфейса
Базовый пример
INSERT INTO TABLE. Давайте вставим данные в таблицу, которую мы создали в руководстве быстрого старта “Создание таблиц в ClickHouse”.
SELECT:
Загрузка данных из Postgres
ClickPipes— ETL-инструмент, специально разработанный для репликации баз данных PostgreSQL. Он доступен в обоих вариантах:- ClickHouse Cloud — через наш управляемый сервис ингестии в ClickPipes.
- Самоуправляемый — через open-source-проект PeerDB.
- PostgreSQL table engine для прямого чтения данных, как показано в предыдущих примерах. Обычно это подходящий вариант, если достаточно батч-репликации на основе известной водяной метки, например временной метки, или если речь идёт о разовой миграции. Этот подход масштабируется до десятков миллионов строк. Если вам нужно мигрировать более крупные наборы данных, стоит разбить процесс на несколько запросов, каждый из которых обрабатывает фрагмент данных. Для каждого фрагмента можно использовать staging-таблицы до переноса его партиций в итоговую таблицу. Это позволяет повторно выполнять запросы, завершившиеся ошибкой. Дополнительные сведения об этой стратегии массовой загрузки см. здесь.
- Данные можно экспортировать из PostgreSQL в формате CSV. Затем их можно вставить в ClickHouse либо из локальных файлов, либо через Объектное хранилище с использованием табличных функций.
Нужна помощь со вставкой больших наборов данных?Если вам нужна помощь со вставкой больших наборов данных или вы столкнулись с ошибками при импорте данных в ClickHouse Cloud, свяжитесь с нами по адресу support@clickhouse.com, и мы поможем.
Вставка данных из командной строки
- У вас установлен ClickHouse
clickhouse-serverзапущен- У вас есть доступ к терминалу, где доступны
wget,zcatиcurl
Скачайте CSV
Выполните следующую команду, чтобы скачать CSV-версию набора данных из нашего публичного S3 бакета:Создайте таблицу
При запущенномclickhouse-server вы можете создать пустую таблицу со следующей схемой прямо из командной строки с помощью clickhouse-client в батч-режиме:_EOF) используются одинарные кавычки, чтобы предотвратить подстановку значений. Без одинарных кавычек пришлось бы экранировать обратные кавычки вокруг имен столбцов.Вставьте данные из командной строки
Теперь выполните приведенную ниже команду, чтобы вставить в таблицу данные из файла, который вы скачали ранее:gzip, zcat или аналогичного инструмента, а затем передать распакованные данные по каналу в clickhouse-client с соответствующим оператором INSERT и FORMAT.При вставке данных с помощью clickhouse-client в интерактивном режиме можно позволить ClickHouse выполнить распаковку за вас во время вставки с помощью предложения
COMPRESSION. ClickHouse может автоматически определить тип сжатия по расширению файла, но его также можно указать явно.Тогда запрос на вставку будет выглядеть так:hackernews:Вставка данных через командную строку с использованием curl
В предыдущих шагах вы сначала скачали CSV-файл на локальную машину с помощьюwget. Также можно вставить данные напрямую с удаленного URL одной командой.Выполните следующую команду, чтобы удалить данные из таблицы hackernews и затем вставить их снова без промежуточного скачивания на локальную машину: