Пример
Создайте таблицу
Параметры движка
path— URL бакета с путём к файлу. В режимеreadonlyподдерживаются следующие подстановочные шаблоны:*,**,?,{abc,def}и{N..M}, гдеN,M— числа, а'abc','def'— строки. Подробнее см. ниже.NOSIGN- Если это ключевое слово указано вместо учётных данных, запросы не будут подписываться.format— Формат файла.aws_access_key_id,aws_secret_access_key- Долговременные учётные данные пользователя аккаунта AWS. Их можно использовать для аутентификации запросов. Параметр необязателен. Если учётные данные не указаны, они берутся из файла конфигурации. Подробнее см. Использование S3 для хранения данных.compression— Тип сжатия. Поддерживаемые значения:none,gzip/gz,brotli/br,xz/LZMA,zstd/zst. Параметр необязателен. По умолчанию тип сжатия определяется автоматически по расширению файла.partition_strategy– Варианты:WILDCARDилиHIVE. ДляWILDCARDв пути должен присутствовать{_partition_id}, который заменяется ключом партиционирования.HIVEне поддерживает подстановочные шаблоны, предполагает, что путь указывает на корень таблицы, и генерирует каталоги партиций в стиле Hive, где в качестве имён файлов используются Snowflake ID, а расширением служит формат файла. По умолчанию используетсяWILDCARDpartition_columns_in_data_file- Используется только со стратегией партиционированияHIVE. Указывает, должен ли ClickHouse ожидать, что столбцы партиции будут записаны в файл данных. По умолчанию —false.storage_class_name- Варианты:STANDARDилиINTELLIGENT_TIERING; позволяет указать AWS S3 Intelligent Tiering.extra_credentials- Необязательный параметр. Используется для передачиrole_arnдля ролевого доступа в ClickHouse Cloud. Инструкции по настройке см. в Secure S3.
Кэш данных
S3 поддерживает кэширование данных на локальном диске.
Параметры конфигурации и использование файлового кэша описаны в этом разделе.
Кэширование выполняется на основе path и ETag объекта хранилища, поэтому ClickHouse не будет читать устаревшую версию кэша.
Чтобы включить кэширование, используйте настройки filesystem_cache_name = '<name>' и enable_filesystem_cache = 1.
- добавьте следующий раздел в конфигурационный файл ClickHouse:
- повторно использовать конфигурацию кэша (а значит, и хранилище кэша) из раздела
storage_configurationв ClickHouse, описанного здесь
PARTITION BY
PARTITION BY — необязателен. В большинстве случаев ключ партиционирования не нужен, а если он всё же нужен, то, как правило, достаточно партиционирования по месяцам. Партиционирование не ускоряет запросы (в отличие от выражения ORDER BY). Никогда не используйте слишком мелкое партиционирование. Не разбивайте данные на партиции по идентификаторам или именам клиентов (вместо этого сделайте идентификатор или имя клиента первым столбцом в выражении ORDER BY).
Для партиционирования по месяцам используйте выражение toYYYYMM(date_column), где date_column — столбец с датой типа Date. Имена партиций в этом случае имеют формат "YYYYMM".
Стратегия партиционирования
WILDCARD (по умолчанию): заменяет подстановочный символ {_partition_id} в пути к файлу на фактический ключ партиционирования. Чтение не поддерживается.
HIVE реализует секционирование в стиле Hive для чтения и записи. Для чтения используется рекурсивный glob-шаблон; это эквивалентно SELECT * FROM s3('table_root/**.parquet').
При записи файлы создаются в следующем формате: <prefix>/<key1=val1/key2=val2...>/<snowflakeid>.<toLower(file_format)>.
Примечание: при использовании стратегии партиционирования HIVE настройка use_hive_partitioning не имеет эффекта.
Пример стратегии партиционирования HIVE:
Запросы к данным, разбитым на партиции
ENGINE использует токен параметра {_partition_id} как часть объекта S3 (имени файла), а в запросах SELECT используются получившиеся имена объектов (например, test_3.csv).
Как показано в примере, выполнение запросов к S3-таблицам с разбиением на партиции
в настоящее время напрямую не поддерживается, но этого можно добиться, запрашивая отдельные партиции
с помощью табличной функции S3.Основной сценарий использования
записи данных с разбиением на партиции в S3 — перенос этих данных в другую
систему ClickHouse (например, при переходе с локальных систем на ClickHouse
Cloud). Поскольку датасеты ClickHouse часто бывают очень большими, а надёжность
сети не всегда идеальна, имеет смысл передавать датасеты
по частям — отсюда и запись с разбиением на партиции.
Создание таблицы
Вставка данных
Выборка из партиции 3
Выборка из партиции 1
Выборка данных из партиции 45
Ограничение
Select * from p, но, как отмечалось выше, этот запрос завершится ошибкой; используйте запрос выше.
Вставка данных
s3_truncate_on_insert и s3_create_new_file_on_insert. Подробнее см. здесь.
Виртуальные столбцы
_path— Путь к файлу. Тип:LowCardinality(String)._file— Имя файла. Тип:LowCardinality(String)._size— Размер файла в байтах. Тип:Nullable(UInt64). Если размер неизвестен, значение равноNULL._time— Время последнего изменения файла. Тип:Nullable(DateTime). Если время неизвестно, значение равноNULL._etag— ETag файла. Тип:LowCardinality(String). Если ETag неизвестен, значение равноNULL._tags— Метки файла. Тип:Map(String, String). Если меток нет, значение — пустойMap{}.
Подробности реализации
- Чтение и запись могут выполняться параллельно
- Не поддерживаются:
- операции
ALTERиSELECT...SAMPLE. - индексы.
- возможна репликация с нулевым копированием, но она не поддерживается.
- операции
Репликация с нулевым копированием не готова для продакшнаВ ClickHouse версии 22.8 и выше репликация с нулевым копированием по умолчанию отключена. Эта возможность не рекомендуется для использования в продакшне.
Подстановочные шаблоны в path
path может задавать несколько файлов с помощью bash-подобных подстановочных шаблонов. Чтобы файл был обработан, он должен существовать и соответствовать всему шаблону пути. Список файлов определяется во время выполнения SELECT (а не в момент CREATE).
*— Подставляет любое количество любых символов, кроме/, включая пустую строку.**— Подставляет любое количество любых символов, включая/, включая пустую строку.?— Подставляет любой отдельный символ.{some_string,another_string,yet_another_one}— Подставляет любую из строк'some_string', 'another_string', 'yet_another_one'.{N..M}— Подставляет любое число в диапазоне от N до M включительно. N и M могут содержать ведущие нули, например000..078.
{} аналогичны табличной функции remote.
Если список файлов содержит числовые диапазоны с ведущими нулями, используйте конструкцию с фигурными скобками отдельно для каждой цифры или
?.file-000.csv, file-001.csv, … , file-999.csv:
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_1.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_2.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_3.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_1.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_2.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_3.csv'
- Укажите диапазон суффиксов файлов:
- Возьмите все файлы с префиксом
some_file_(в обеих папках не должно быть других файлов с таким префиксом):
- Возьмите все файлы из обеих папок (все файлы должны соответствовать формату и схеме, указанным в запросе):
Настройки хранилища
- s3_truncate_on_insert - позволяет обрезать файл перед вставкой данных. По умолчанию отключена.
- s3_create_new_file_on_insert - позволяет создавать новый файл при каждой вставке, если у формата есть суффикс. По умолчанию отключена.
- s3_skip_empty_files - позволяет пропускать пустые файлы при чтении. По умолчанию включена.
Настройки, связанные с S3
s3_max_single_part_upload_size— Максимальный размер объекта для загрузки в S3 с помощью singlepart upload. Значение по умолчанию —32Mb.s3_min_upload_part_size— Минимальный размер части, загружаемой при multipart-загрузке через S3 Multipart upload. Значение по умолчанию —16Mb.s3_max_redirects— Максимально допустимое количество переходов при перенаправлениях S3. Значение по умолчанию —10.s3_single_read_retries— Максимальное количество попыток при одном чтении. Значение по умолчанию —4.s3_max_put_rps— Максимальная частота PUT-запросов в секунду до применения троттлинга. Значение по умолчанию —0(без ограничений).s3_max_put_burst— Максимальное количество запросов, которые можно отправить одновременно до достижения лимита запросов в секунду. По умолчанию (значение0) равноs3_max_put_rps.s3_max_get_rps— Максимальная частота GET-запросов в секунду до применения троттлинга. Значение по умолчанию —0(без ограничений).s3_max_get_burst— Максимальное количество запросов, которые можно отправить одновременно до достижения лимита запросов в секунду. По умолчанию (значение0) равноs3_max_get_rps.s3_upload_part_size_multiply_factor- Умножаетs3_min_upload_part_sizeна этот коэффициент каждый раз, когда в рамках одной записи в S3 было загруженоs3_multiply_parts_count_thresholdчастей. Значение по умолчанию —2.s3_upload_part_size_multiply_parts_count_threshold- Каждый раз, когда в S3 загружено такое количество частей,s3_min_upload_part_sizeумножается наs3_upload_part_size_multiply_factor. Значение по умолчанию —500.s3_max_inflight_parts_for_one_file- Ограничивает количество PUT-запросов, которые могут выполняться параллельно для одного объекта. Это число следует ограничивать. Значение0означает отсутствие ограничений. Значение по умолчанию —20. Для каждой части в процессе загрузки выделяется буфер размеромs3_min_upload_part_sizeдля первыхs3_upload_part_size_multiply_factorчастей и большего размера, если файл достаточно велик; см.upload_part_size_multiply_factor. При настройках по умолчанию загрузка одного файла размером менее8Gпотребляет не более320Mb. Для файлов большего размера потребление выше.
s3_max_redirects необходимо установить в ноль, чтобы избежать атак SSRF; либо, в качестве альтернативы, в конфигурации сервера необходимо указать remote_host_filter.
Настройки для конечных точек
endpoint— Задает префикс конечной точки. Обязательно.access_key_idиsecret_access_key— Задают учетные данные, которые будут использоваться для данной конечной точки. Необязательно.use_environment_credentials— Если установлено значениеtrue, клиент S3 попытается получить учетные данные из переменных окружения и метаданных Amazon EC2 для данной конечной точки. Необязательно, значение по умолчанию —false.region— Задает имя региона S3. Необязательно.use_insecure_imds_request— Если установлено значениеtrue, клиент S3 будет использовать небезопасный запрос IMDS при получении учетных данных из метаданных Amazon EC2. Необязательно, значение по умолчанию —false.expiration_window_seconds— Льготный период для проверки того, не истек ли срок действия учетных данных. Необязательно, значение по умолчанию —120.no_sign_request- Игнорирует все учетные данные, чтобы запросы не подписывались. Полезно для доступа к публичным бакетам.header— Добавляет указанный HTTP-заголовок в запрос к данной конечной точке. Необязательно, можно указывать несколько раз.access_header- Добавляет указанный HTTP-заголовок в запрос к данной конечной точке в случаях, когда отсутствуют другие учетные данные из другого источника.server_side_encryption_customer_key_base64— Если указано, будут установлены необходимые заголовки для доступа к объектам S3 с шифрованием SSE-C. Необязательно.server_side_encryption_kms_key_id- Если указано, будут установлены необходимые заголовки для доступа к объектам S3 с шифрованием SSE-KMS. Если указана пустая строка, будет использоваться ключ S3 под управлением AWS. Необязательно.server_side_encryption_kms_encryption_context- Если указано вместе сserver_side_encryption_kms_key_id, будет установлен указанный заголовок контекста шифрования для SSE-KMS. Необязательно.server_side_encryption_kms_bucket_key_enabled- Если указано вместе сserver_side_encryption_kms_key_id, будет установлен заголовок для включения ключей S3 бакета для SSE-KMS. Необязательно, может бытьtrueилиfalse, по умолчанию не задано (соответствует настройке на уровне бакета).max_single_read_retries— Максимальное количество попыток в ходе одного чтения. Значение по умолчанию —4. Необязательно.max_put_rps,max_put_burst,max_get_rpsиmax_get_burst- Настройки ограничения скорости (см. описание выше), используемые для конкретной конечной точки вместо настроек на уровне запроса. Необязательно.
Работа с архивами
- ‘https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-10.csv.zip'
- ‘https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-11.csv.zip'
- ‘https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-12.csv.zip'
ClickHouse поддерживает три формата архивов:
ZIP
TAR
7Z
Хотя к архивам ZIP и TAR можно обращаться из любого поддерживаемого места хранения, архивы 7Z можно читать только из локальной файловой системы, на которой установлен ClickHouse.
Доступ к публичным бакетам
403.
Этой проблемы можно избежать, используя ключевое слово NOSIGN, которое заставляет клиент игнорировать все учетные данные и не подписывать запросы.
Оптимизация производительности
Доступ на основе ролей
roleARN можно передать через параметр extra_credentials: