Перейти к основному содержанию
Данные, обрабатываемые в ClickHouse, обычно хранятся в локальной файловой системе машины, на которой работает сервер ClickHouse. Для этого требуются диски большой емкости, которые могут быть дорогими. Чтобы не хранить данные локально, поддерживаются различные варианты хранилищ:
  1. Объектное хранилище Amazon S3.
  2. Azure Blob Storage.
  3. Не поддерживается: Hadoop Distributed File System (HDFS)

ClickHouse также поддерживает внешние движки таблиц, которые отличаются от варианта внешнего хранилища, описанного на этой странице, поскольку позволяют читать данные, хранящиеся в распространенных файловых форматах (например, Parquet). На этой странице описывается конфигурация хранилища для таблиц семейства MergeTree или семейства Log.
  1. для работы с данными, хранящимися на дисках Amazon S3, используйте движок таблицы S3.
  2. для работы с данными, хранящимися в Azure Blob Storage, используйте движок таблицы AzureBlobStorage.
  3. для работы с данными в Hadoop Distributed File System (не поддерживается) используйте движок таблицы HDFS.

Настройка внешнего хранилища

Семейства движков таблиц MergeTree и Log могут хранить данные в S3, AzureBlobStorage, HDFS (не поддерживается), используя соответственно диски типов s3, azure_blob_storage, hdfs (не поддерживается). Для настройки диска требуется:
  1. Раздел type со значением одного из следующих типов: s3, azure_blob_storage, hdfs (не поддерживается), local_blob_storage, web.
  2. Конфигурация конкретного типа внешнего хранилища.
Начиная с версии ClickHouse 24.1 можно использовать новую опцию конфигурации. Для этого нужно указать:
  1. type со значением object_storage
  2. object_storage_type со значением одного из следующих типов: s3, azure_blob_storage (или просто azure, начиная с 24.3), hdfs (не поддерживается), local_blob_storage (или просто local, начиная с 24.3), web.

При необходимости можно указать metadata_type (по умолчанию используется значение local), также его можно задать как plain, web и, начиная с 24.4, plain_rewritable. Использование типа метаданных plain описано в разделе plain storage, тип метаданных web можно использовать только с типом объектного хранилища web, а тип метаданных local хранит файлы метаданных локально (каждый файл метаданных содержит сопоставление с файлами в объектном хранилище и некоторую дополнительную метаинформацию о них). Например:
эквивалентна следующей конфигурации (начиная с версии 24.1):
Конфигурация ниже:
равно:
Полная конфигурация хранилища может выглядеть так:
Начиная с версии 24.1 это также может выглядеть так:
Чтобы сделать определённый тип хранилища используемым по умолчанию для всех таблиц MergeTree, добавьте следующий раздел в конфигурационный файл:
Если вы хотите настроить определённую политику хранения для конкретной таблицы, её можно задать в настройках при создании таблицы:
Вы также можете использовать disk вместо storage_policy. В этом случае раздел storage_policy в файле конфигурации не нужен — достаточно раздела disk.

refresh_parts_interval and table_disk

Эта настройка предназначена для нереплицируемых таблиц MergeTree, в которых части могут записываться извне и требуется обновлять обнаружение метаданных из хранилища. Настройка MergeTree refresh_parts_interval включает периодическое обновление списка частей данных из нижележащего хранилища (например, чтобы подхватывать части, записанные извне). Ключевое различие здесь — общие метаданные для всех реплик и локальные метаданные реплики (например, S3 с локальными метаданными на каждой реплике): только при общих метаданных новые части будут видны всем репликам. Само по себе использование Объектного хранилища не означает, что метаданные общие.
  • Объектное хранилище (например, disk = 's3') не означает, что метаданные общие. Когда метаданные по умолчанию хранятся локально на каждой реплике, каждая реплика независимо управляет своими указателями на blob-объекты в Объектном хранилище. Изменения, внесённые на одной реплике, не видны другим. В этом случае refresh_parts_interval не сделает новые части видимыми на всех репликах, потому что метаданные, которые читает каждая реплика, локальны для неё.
  • Для автоматического обновления частей метаданные файловой системы должны быть общими (или таблица должна использовать собственные метаданные в режиме только для чтения, для которых применимо обновление). Установка table_disk = true вместе с локальным для таблицы диском (например, SETTINGS disk = disk(type=object_storage, ...), table_disk = true) — один из способов получить нужную семантику: таблица управляет жизненным циклом метаданных, а хранилище рассматривается как только для чтения, поэтому refresh_parts_interval работает, и части, добавленные извне, могут быть обнаружены.
  • При глобально определённом диске (например, disk = 's3' в storage_configuration) и локальных метаданных по умолчанию каждая реплика имеет собственное состояние метаданных. Даже если blob-объекты находятся в S3, такое хранилище не считается общим для целей refresh_parts_interval, и новые части, созданные вне ClickHouse или на другой реплике, обнаружены не будут.
Чтобы автоматическое обновление частей работало, убедитесь, что метаданные являются общими, либо используйте диск уровня таблицы с table_disk = true, как показано выше. Если полагаться только на refresh_parts_interval при локальных метаданных реплики, части не будут обновляться должным образом.
refresh_parts_interval не используется для таблиц ReplicatedMergeTree. Реплицируемые таблицы уже синхронизируют части через механизм репликации. Эта настройка применима только к нереплицируемым таблицам MergeTree, в которых части записываются извне и требуется обновление метаданных.

Динамическая конфигурация

Конфигурацию хранилища также можно задать в файле конфигурации без предопределённого диска, а затем настроить её через параметры запроса CREATE/ATTACH. Следующий пример запроса основан на приведённой выше динамической конфигурации диска и показывает, как использовать локальный диск для кэширования данных из таблицы, доступной по URL.
В примере ниже к внешнему хранилищу добавляется кэш.
В выделенных ниже настройках обратите внимание, что диск type=web вложен в диск type=cache.
В примере используется type=web, но в качестве динамического можно настроить любой тип диска, включая локальный диск. Для локальных дисков аргумент path должен находиться внутри каталога, заданного параметром конфигурации сервера custom_local_disks_base_directory. У этого параметра нет значения по умолчанию, поэтому при использовании локального диска его тоже нужно задать.
Также возможна комбинация конфигурации на основе config и конфигурации, определённой в SQL:
где web берётся из файла конфигурации сервера:

Использование хранилища S3

Обязательные параметры

Необязательные параметры

Google Cloud Storage (GCS) также поддерживается с типом s3. См. MergeTree с хранилищем GCS.

Использование Plain Storage

В 22.10 появился новый тип диска s3_plain, который предоставляет хранилище с однократной записью. Параметры его конфигурации такие же, как у типа диска s3. В отличие от типа диска s3, он хранит данные в исходном виде. Иными словами, вместо случайно сгенерированных имен blob-объектов он использует обычные имена файлов (так же, как ClickHouse хранит файлы на локальном диске) и не хранит локально никаких метаданных. Например, метаданные восстанавливаются по данным в s3. Этот тип диска позволяет хранить статическую версию таблицы, поскольку он не позволяет выполнять слияние существующих данных и не поддерживает вставку новых данных. Один из сценариев использования этого типа диска — создание на нем резервных копий, что можно сделать с помощью BACKUP TABLE data TO Disk('plain_disk_name', 'backup_name'). После этого можно выполнить RESTORE TABLE data AS data_restored FROM Disk('plain_disk_name', 'backup_name') или использовать ATTACH TABLE data (...) ENGINE = MergeTree() SETTINGS disk = 'plain_disk_name'. Конфигурация:
Начиная с версии 24.1 можно настроить любой диск Объектного хранилища (s3, azure, hdfs (не поддерживается), local) с использованием типа метаданных plain. Конфигурация:

Использование простого перезаписываемого хранилища в S3

Новый тип диска s3_plain_rewritable появился в версии 24.4. Как и тип диска s3_plain, он не требует дополнительного хранилища для файлов метаданных. Вместо этого метаданные хранятся в S3. В отличие от типа диска s3_plain, s3_plain_rewritable позволяет выполнять слияние и поддерживает операции INSERT. Мутации и репликация таблиц не поддерживаются. Этот тип диска можно использовать для таблиц MergeTree без репликации. Хотя тип диска s3 подходит для таблиц MergeTree без репликации, можно выбрать тип диска s3_plain_rewritable, если вам не нужны локальные метаданные таблицы и вы готовы мириться с ограниченным набором операций. Это может быть полезно, например, для системных таблиц. Конфигурация:
равно
Начиная с версии 24.5, можно настроить любой диск объектного хранилища (s3, azure, local), используя тип метаданных plain_rewritable.

Использование Azure Blob Storage

Движки таблиц семейства MergeTree могут хранить данные в Azure Blob Storage с помощью диска типа azure_blob_storage. Разметка конфигурации:

Параметры подключения

Параметры аутентификации (диск попробует все доступные методы, а также Managed Identity Credential):

Параметры ограничений

Другие параметры

Примеры рабочих конфигураций можно найти в каталоге интеграционных тестов (см., например, test_merge_tree_azure_blob_storage или test_azure_blob_storage_zero_copy_replication).
Репликация zero-copy не готова к промышленной эксплуатацииВ ClickHouse версии 22.8 и выше репликация zero-copy по умолчанию отключена. Эта возможность не рекомендуется для использования в production.

Использование хранилища HDFS (не поддерживается)

В этой примерной конфигурации:
  • диск имеет тип hdfs (не поддерживается)
  • данные хранятся по адресу hdfs://hdfs1:9000/clickhouse/
Кстати, HDFS не поддерживается, поэтому при его использовании возможны проблемы. Если столкнётесь с ними, можете отправить pull request с исправлением.
Имейте в виду, что HDFS может не работать в некоторых нестандартных сценариях.

Использование шифрования данных

Вы можете шифровать данные, хранящиеся на внешних дисках S3 или HDFS (не поддерживается), а также на локальном диске. Чтобы включить режим шифрования, в конфигурационном файле необходимо определить диск типа encrypted и выбрать диск, на котором будут сохраняться данные. Диск encrypted шифрует все записываемые файлы на лету, а при чтении файлов с диска encrypted автоматически расшифровывает их. Таким образом, с диском encrypted можно работать как с обычным диском. Пример конфигурации диска:
Например, когда ClickHouse записывает данные из некоторой таблицы в файл store/all_1_1_0/data.bin на disk1, фактически этот файл будет записан на физический диск по пути /path1/store/all_1_1_0/data.bin. При записи того же файла на disk2 он фактически будет записан на физический диск по пути /path1/path2/store/all_1_1_0/data.bin в зашифрованном виде.

Обязательные параметры

Необязательные параметры

Пример конфигурации диска:

Использование локального кэша

Начиная с версии 22.3 в конфигурации хранилища можно настроить локальный кэш для дисков. Для версий 22.3–22.7 кэш поддерживается только для дисков типа s3. Для версий >= 22.8 кэш поддерживается для любых типов дисков: S3, Azure, Local, Encrypted и т. д. Для версий >= 23.5 кэш поддерживается только для удалённых типов дисков: S3, Azure, HDFS (не поддерживается). Кэш использует политику LRU. Пример конфигурации для версий 22.8 и выше:
Пример конфигурации для версий до 22.8:
Настройки дисковой конфигурации File Cache: Эти настройки должны быть заданы в разделе конфигурации диска.
Примечание: Для значений размера поддерживаются единицы измерения ki, Mi, Gi и т. д. (например, 10Gi).

Настройки запросов/профилей для File Cache

Параметры конфигурации кэша и параметры кэша запросов соответствуют последней версии ClickHouse; в более ранних версиях некоторые возможности могут не поддерживаться.

Системные таблицы файлового кэша

Команды управления кэшем

SYSTEM CLEAR|DROP FILESYSTEM CACHE (<cache_name>) (ON CLUSTER)ON CLUSTER
Эта команда поддерживается только без указания <cache_name>
SHOW FILESYSTEM CACHES
Выводит список файловых кэшей, настроенных на сервере. (В версиях 22.8 и ниже команда называется SHOW CACHES)
Query
Response
DESCRIBE FILESYSTEM CACHE '<cache_name>'
Показывает конфигурацию кэша и некоторую общую статистику для указанного кэша. Имя кэша можно получить с помощью команды SHOW FILESYSTEM CACHES. (Для версий ниже или равных 22.8 команда называется DESCRIBE CACHE)
Query
Response

Использование статического Web-хранилища (только для чтения)

Это диск в режиме только для чтения. Данные на нем можно только читать, но нельзя изменять. Новая таблица подключается к этому диску с помощью запроса ATTACH TABLE (см. пример ниже). Локальный диск фактически не используется: каждый запрос SELECT приводит к http-запросу для получения необходимых данных. Любое изменение данных таблицы приведет к исключению, то есть следующие типы запросов не допускаются: CREATE TABLE, ALTER TABLE, RENAME TABLE, DETACH TABLE и TRUNCATE TABLE. Web-хранилище можно использовать только для чтения. Например, для размещения образцов данных или для миграции данных. Для этого существует инструмент clickhouse-static-files-uploader, который подготавливает каталог данных для заданной таблицы (SELECT data_paths FROM system.tables WHERE name = 'table_name'). Для каждой нужной таблицы создается каталог с файлами. Эти файлы можно загрузить, например, на веб-сервер со статическими файлами. После такой подготовки вы сможете подключить эту таблицу к любому серверу ClickHouse через DiskWeb. В этой примерной конфигурации:
  • диск имеет тип web
  • данные размещены по адресу http://nginx:80/test1/
  • используется кэш в локальном хранилище
Хранилилище также можно временно настроить в рамках запроса, если веб-датасет не предполагается использовать регулярно; см. динамическую конфигурацию и пропустите редактирование конфигурационного файла.На GitHub размещён демо-набор данных. Чтобы подготовить собственные таблицы для веб- хранилища, см. инструмент clickhouse-static-files-uploader
В этом запросе ATTACH TABLE указанный UUID совпадает с именем каталога с данными, а конечная точка — это URL исходного содержимого GitHub.
Готовый тестовый сценарий. Вам нужно добавить эту конфигурацию в config:
Затем выполните следующий запрос:

Обязательные параметры

Необязательные параметры

Если запрос завершается исключением DB:Exception Unreachable URL, попробуйте изменить настройки: http_connection_timeout, http_receive_timeout, keep_alive_timeout. Чтобы получить файлы для загрузки, выполните: clickhouse static-files-disk-uploader --metadata-path <path> --output-dir <dir> (--metadata-path можно найти с помощью запроса SELECT data_paths FROM system.tables WHERE name = 'table_name'). При загрузке файлов по endpoint их нужно помещать в каталог <endpoint>/store/, но в конфигурации должен быть указан только endpoint. Если при загрузке диска URL недоступен в момент, когда сервер поднимает таблицы, все ошибки перехватываются. В этом случае при наличии ошибок таблицы можно перезагрузить (снова сделать видимыми) через DETACH TABLE table_name -> ATTACH TABLE table_name. Если метаданные были успешно загружены при запуске сервера, таблицы становятся доступными сразу. Используйте настройку http_max_single_read_retries, чтобы ограничить максимальное количество повторных попыток в рамках одного HTTP-чтения.

Репликация без копирования (не готово к использованию в production)

Репликация без копирования возможна, но не рекомендуется для дисков S3 и HDFS (не поддерживается). Репликация без копирования означает, что если данные удалённо хранятся на нескольких машинах и их нужно синхронизировать, то реплицируются только метаданные (пути к частям данных), а не сами данные.
Репликация без копирования не готова к использованию в productionВ ClickHouse версии 22.8 и выше репликация без копирования по умолчанию отключена. Эта возможность не рекомендуется для использования в production.
Последнее изменение 2 июля 2026 г.