- Объектное хранилище Amazon S3.
- Azure Blob Storage.
- Не поддерживается: Hadoop Distributed File System (HDFS)
ClickHouse также поддерживает внешние движки таблиц, которые отличаются от
варианта внешнего хранилища, описанного на этой странице, поскольку позволяют читать данные,
хранящиеся в распространенных файловых форматах (например, Parquet). На этой странице описывается
конфигурация хранилища для таблиц семейства
MergeTree или семейства Log.- для работы с данными, хранящимися на дисках
Amazon S3, используйте движок таблицы S3. - для работы с данными, хранящимися в Azure Blob Storage, используйте движок таблицы AzureBlobStorage.
- для работы с данными в Hadoop Distributed File System (не поддерживается) используйте движок таблицы HDFS.
Настройка внешнего хранилища
MergeTree и Log
могут хранить данные в S3, AzureBlobStorage, HDFS (не поддерживается), используя соответственно диски типов s3,
azure_blob_storage, hdfs (не поддерживается).
Для настройки диска требуется:
- Раздел
typeсо значением одного из следующих типов:s3,azure_blob_storage,hdfs(не поддерживается),local_blob_storage,web. - Конфигурация конкретного типа внешнего хранилища.
typeсо значениемobject_storageobject_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):
MergeTree,
добавьте следующий раздел в конфигурационный файл:
disk вместо storage_policy. В этом случае раздел storage_policy в файле конфигурации не нужен —
достаточно раздела disk.
refresh_parts_interval and table_disk
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.
У этого параметра нет значения по умолчанию, поэтому при использовании локального диска
его тоже нужно задать.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/
Использование шифрования данных
encrypted и выбрать диск, на котором будут сохраняться данные. Диск encrypted шифрует все записываемые файлы на лету, а при чтении файлов с диска encrypted автоматически расшифровывает их. Таким образом, с диском encrypted можно работать как с обычным диском.
Пример конфигурации диска:
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 в зашифрованном виде.
Обязательные параметры
Необязательные параметры
Пример конфигурации диска:
Использование локального кэша
s3. Для версий >= 22.8 кэш поддерживается для любых типов дисков: S3, Azure, Local, Encrypted и т. д.
Для версий >= 23.5 кэш поддерживается только для удалённых типов дисков: S3, Azure, HDFS (не поддерживается).
Кэш использует политику LRU.
Пример конфигурации для версий 22.8 и выше:
Примечание: Для значений размера поддерживаются единицы измеренияki,Mi,Giи т. д. (например,10Gi).
Настройки запросов/профилей для File Cache
Системные таблицы файлового кэша
Команды управления кэшем
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/ - используется кэш в локальном хранилище
ATTACH TABLE указанный UUID совпадает с именем каталога с данными, а конечная точка — это URL исходного содержимого GitHub.
Обязательные параметры
Необязательные параметры
Если запрос завершается исключением
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.