Настройка доступа к Object Storage
Managed Service for ClickHouse поддерживает работу с Yandex Object Storage для:
- подключения моделей машинного обучения, схем формата данных и собственной геобазы;
- обработки данных, которые находятся в объектном хранилище, если эти данные представлены в любом из поддерживаемых ClickHouse форматов.
Для доступа к данным в бакете Object Storage из кластера воспользуйтесь одним из следующих способов:
- Настройте беспарольный доступ к бакету с помощью сервисного аккаунта. Данный способ позволяет получить доступ к объекту в бакете без ввода учетных данных. Чтобы воспользоваться этим способом:
- Настройте публично доступный бакет, открыв публичный доступ к нему на чтение или на запись.
После настройки любого из этих способов получите ссылку на объект в бакете, которую можно использовать при работе с данными в кластере. См. также Примеры работы с объектами.
Подключить сервисный аккаунт к кластеру
-
При создании или изменении кластера выберите существующий сервисный аккаунт, либо создайте новый.
-
Убедитесь, что этому аккаунту назначены корректные роли из группы ролей
storage.*
. При необходимости назначьте нужные роли, например,storage.viewer
иstorage.uploader
.
Совет
Для связи кластеров Managed Service for ClickHouse с Object Storage рекомендуется использовать специально созданные для этой цели сервисные аккаунты: это позволяет организовать работу с любыми бакетами, в том числе с такими, для которых предоставление публичного доступа нежелательно или невозможно.
Настроить права доступа
-
В консоли управления выберите каталог, в котором находится нужный бакет. Если бакета не существует — создайте его и наполните необходимыми данными.
-
Выберите сервис Object Storage.
-
Настройте ACL бакета или ACL объекта:
- В списке бакетов или объектов выберите нужный элемент и нажмите значок .
- Нажмите ACL бакета или ACL объекта.
- В выпадающем списке Выберите пользователя укажите сервисный аккаунт, подключенный к кластеру.
- Нажмите кнопку Добавить.
- Задайте нужные разрешения для сервисного аккаунта из выпадающего списка.
- Нажмите кнопку Сохранить.
Примечание
При необходимости отзовите доступ у одного или нескольких пользователей, нажав кнопку Отозвать в нужной строке.
Получить ссылку на объект
Чтобы работать в Managed Service for ClickHouse с данными объекта в Object Storage, нужно получить ссылку на этот объект в бакете:
- Для бакета с ограниченным доступом ссылку вида
https://storage.yandexcloud.net/<имя бакета>/<имя объекта>?X-Amz-Algorithm=...
приведите к видуhttps://storage.yandexcloud.net/<имя бакета>/<имя объекта>
, удалив все параметры в строке запроса. - Для бакета с публичным доступом ссылка будет сгенерирована сразу в нужном виде.
Примеры работы с объектами
Ссылки на объекты вида https://storage.yandexcloud.net/<имя бакета>/<имя объекта>
можно использовать при работе с геометками, схемами, а также при использовании табличной функции s3
и табличного движка S3
.
Табличный движок S3
аналогичен движкам File и URL, за исключением того, что данные хранятся в S3-совместимом хранилище (таком как Yandex Object Storage), а не на файловой системе или удаленном HTTP/HTTPS сервере. Этот движок позволяет читать и записывать данные в хранилище с использование стандартных SQL-запросов SELECT
и INSERT
.
Табличная функция s3
предоставляет ту же самую функциональность, что и движок таблиц S3
, но при ее использовании не требуется предварительно создавать таблицу.
Например, если в бакете с ограниченным доступом my-bucket
Object Storage в файле table.tsv
хранятся данные таблицы в формате TSV, то можно создать таблицу или функцию, которая будет работать с этим файлом. Предполагается, что настроен беспарольный доступ и получена ссылка на файл table.tsv
.
-
Создайте таблицу:
CREATE TABLE test (n Int32) ENGINE = S3('https://storage.yandexcloud.net/my-bucket/table.tsv', 'TSV');
-
Выполните тестовые запросы к таблице:
INSERT INTO test VALUES (1); SELECT * FROM test; ┌─n─┐ │ 1 │ └───┘
-
Вставьте данные:
INSERT INTO FUNCTION s3('https://storage.yandexcloud.net/my-bucket/table.tsv', 'TSV', 'n Int32') VALUES (1);
-
Выполните тестовый запрос:
SELECT * FROM s3('https://storage.yandexcloud.net/my-bucket/table.tsv', 'TSV', 'n Int32'); ┌─n─┐ │ 1 │ └───┘