ClickHouse/docs/ru/engines/table-engines/integrations/s3.md
Roman Bug b4a81267c9
Update docs/ru/engines/table-engines/integrations/s3.md
Co-authored-by: olgarev <56617294+olgarev@users.noreply.github.com>
2021-03-05 17:11:43 +03:00

158 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
toc_priority: 4
toc_title: S3
---
# S3 {#table_engines-s3}
Движок S3 обеспечивает интеграцию с экосистемой [Amazon S3](https://aws.amazon.com/s3/). Он похож на движок [HDFS](hdfs.md), но обладает специфическими для S3 функциями.
## Использование движка {#ispolzovanie-dvizhka}
``` sql
ENGINE = S3(path, [aws_access_key_id, aws_secret_access_key,] format, structure, [compression])
```
**Входные параметры**
- `path` — URL бакета, включая путь к файлу. В режиме только для чтения поддерживаются следующие подстановочные знаки: `*`, `?`, `{abc,def}` и `{N..M}`, где `N`, `M` — числа, `abc`, `def` — строки.
- `format` — [формат](../../../interfaces/formats.md#formats) файла.
- `structure` — структура таблицы. Указывается в формате `'column1_name column1_type, column2_name column2_type, ...'`.
- `compression` — необязательный параметр. Необходим если требуется использовать определенный формат сжатия. Поддерживаемые значения: `none`, `gzip/gz`, `brotli/br`, `xz/LZMA`, `zstd/zst`. По умолчанию формат сжатия определяется автоматически исходя из расширения файла.
**Примеры**
**1.** Настройте таблицу `s3_engine_table`:
``` sql
CREATE TABLE s3_engine_table (name String, value UInt32) ENGINE = S3('https://storage.yandexcloud.net/my-test-bucket-768/test-data.csv.gz', 'CSV', 'name String, value UInt32', 'gzip');
```
**2.** Заполните файл данными:
``` sql
INSERT INTO s3_engine_table VALUES ('one', 1), ('two', 2), ('three', 3);
```
**3.** Прочитайте данные:
Запрос:
``` sql
SELECT * FROM s3_engine_table LIMIT 2;
```
Результат:
``` text
┌─name─┬─value─┐
│ one │ 1 │
│ two │ 2 │
└──────┴───────┘
```
## Детали реализации {#detali-realizatsii}
- Поддерживается многопоточное чтение и запись.
- Не поддерживается:
- использование операций `ALTER` и `SELECT...SAMPLE`;
- индексы;
- репликация.
**Символы подстановки в пути**
Символы подстановки могут содержаться в нескольких компонентах пути. Обрабатываются только существующие файлы, название которых целиком удовлетворяет шаблону (не только суффиксом или префиксом). Список файлов определяется во время выполнения запроса `SELECT` (не во время `CREATE`).
- `*` — заменяет любое количество любых символов кроме `/`, включая отсутствие символов.
- `?` — заменяет любой одиночный символ.
- `{some_string,another_string,yet_another_one}` — заменяет любую из строк `'some_string', 'another_string', 'yet_another_one'`.
- `{N..M}` — заменяет любое число в интервале от `N` до `M` включительно (может содержать ведущие нули, например: `000..078`).
Конструкция с `{}` аналогична табличной функции [remote](../../../sql-reference/table-functions/remote.md).
**Примеры**
1. Предположим, что у нас есть несколько файлов в формате TSV со следующими URL-адресами в HDFS:
- https://storage.yandexcloud.net/my-test-bucket-768/some_prefix/some_file_1.csv
- https://storage.yandexcloud.net/my-test-bucket-768/some_prefix/some_file_2.csv
- https://storage.yandexcloud.net/my-test-bucket-768/some_prefix/some_file_3.csv
- https://storage.yandexcloud.net/my-test-bucket-768/another_prefix/some_file_1.csv
- https://storage.yandexcloud.net/my-test-bucket-768/another_prefix/some_file_2.csv
- https://storage.yandexcloud.net/my-test-bucket-768/another_prefix/some_file_3.csv
2. Существует несколько способов создать таблицу, объединяющую все шесть файлов:
``` sql
CREATE TABLE table_with_range (name String, value UInt32) ENGINE = S3('https://storage.yandexcloud.net/my-test-bucket-768/{some,another}_prefix/some_file_{1..3}', 'CSV');
```
3. Еще один способ:
``` sql
CREATE TABLE table_with_question_mark (name String, value UInt32) ENGINE = S3('https://storage.yandexcloud.net/my-test-bucket-768/{some,another}_prefix/some_file_?', 'CSV');
```
4. Можно создать таблицу, содержащую все файлы из обоих директорий (все файлы должны соответствовать формату и схеме, описанным в запросе):
``` sql
CREATE TABLE table_with_asterisk (name String, value UInt32) ENGINE = S3('https://storage.yandexcloud.net/my-test-bucket-768/{some,another}_prefix/*', 'CSV');
```
!!! warning "Предупреждение"
Если список файлов содержит диапазоны чисел с ведущими нулями, используйте конструкцию с фигурными скобками для каждой цифры отдельно или используйте `?`.
**Пример**
Создайте таблицу из файлов `file-000.csv`, `file-001.csv`, … , `file-999.csv`:
``` sql
CREATE TABLE big_table (name String, value UInt32) ENGINE = S3('https://storage.yandexcloud.net/my-test-bucket-768/big_prefix/file-{000..999}.csv', 'CSV');
```
## Виртуальные столбцы {#virtualnye-stolbtsy}
- `_path` — путь к файлу.
- `_file` — имя файла.
**Смотрите также**
- [Виртуальные столбцы](index.md#table_engines-virtual_columns)
## Настройки, связанные с S3 {#settings}
Перед выполнением запроса или в конфигурационном файле могут быть указаны следующие параметры:
- `s3_max_single_part_upload_size` — максимальный размер объекта для одиночной загрузки в S3. Значение по умолчанию `64Mb`.
- `s3_min_upload_part_size` — минимальный размер части файла для [составной загрузки](https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html). Значение по умолчанию `512Mb`.
- `s3_max_redirects` — максимальное количество http-перенаправлений в запросе на хранилище S3. Значение по умолчанию `10`.
**Соображения безопасности**: чтобы избежать CSRF атак, когда злоумышленник может указать произвольные URL-адреса S3, следует установить `s3_max_redirects` значение `0`; или обязательно указывать `remote_host_filter` в конфигурации сервера.
## Настройки конечных точек {#endpointsettings}
В файле конфигурации для определенной конечной точки (которая соответствует точному префиксу URL-адреса) можно указать следующие параметры:
- `endpoint` — указывает префикс конечной точки. Обязательный параметр.
- `access_key_id` and `secret_access_key` — содержит учетные данные для использования с данной конечной точкой. Опциональный параметр.
- `use_environment_credentials` — если установлено значение `true`, клиент S3 будет использовать учетные сведения из переменных сред и метаданных Amazon EC2 для данной конечной точки. Опциональный параметр. Значение по умолчанию `false`.
- `header` — добавляет указанный HTTP-заголовок к запросу к заданной конечной точке. Опциональный параметр, может быть указан несколько раз.
- `server_side_encryption_customer_key_base64` — устанавливает необходимые заголовки для доступа к объектам S3 с помощью шифрования SSE-C. Опциональный параметр.
Пример:
```
<s3>
<endpoint-name>
<endpoint>https://storage.yandexcloud.net/my-test-bucket-768/</endpoint>
<!-- <access_key_id>ACCESS_KEY_ID</access_key_id> -->
<!-- <secret_access_key>SECRET_ACCESS_KEY</secret_access_key> -->
<!-- <use_environment_credentials>false</use_environment_credentials> -->
<!-- <header>Authorization: Bearer SOME-TOKEN</header> -->
<!-- <server_side_encryption_customer_key_base64>BASE64-ENCODED-KEY</server_side_encryption_customer_key_base64> -->
</endpoint-name>
</s3>
```
[Оригинальная статья](https://clickhouse.tech/docs/ru/engines/table-engines/integrations/s3/) <!--hide-->