Подключение Trino к S3
В лабораторной работе мы рассмотрим:
сценарий взаимодействия между Managed Trino, Managed Metastore и Object Storage;
отправку запросов через DBeaver;
работу с управляемыми таблицами;
работу с внешними таблицами.
Все сущности должны располагаться в одной VPC и подсетях одного типа.
Перед началом работы
Зарегистрируйтесь в личном кабинете Cloud.ru.
Если вы уже зарегистрированы, войдите под своей учетной записью.
Ознакомьтесь с разделом Управляемые и внешние таблицы. В следующих блоках вам будут встречаться термины «Управляемые таблицы» и «Внешние таблицы».
Создайте бакет Object Storage, в котором будут храниться таблицы и схемы.
Установите JDBC-клиент DBeaver.
Создайте инстанс Managed Metastore
Перейдите в раздел Evolution и выберите сервис Managed Metastore.
Откройте раздел Инстансы.
Нажмите Создать инстанс.
В блоке Общие параметры заполните поля следующими значениями:
Название — metastore-lab.
База данных — выберите базу данных.
VPC — выберите VPC-сеть.
Зона доступности — выберите зону доступности, для которой создан SNAT-шлюз.
Подсеть — выберите подсеть.
В блоке Настройки сервера:
Название — server-lab.
Группа безопасности — выберите группу безопасности.
Группа логов — выберите группу логов.
Файловая система — S3.
Источник — Object Storage.
Бакет — выберите созданный бакет Object Storage.
Дождитесь, когда статус инстанса изменится на «Готов».
Нажмите Скопировать Thrift URL.
Создайте подключение к Managed Metastore
Перейдите в раздел Evolution и выберите сервис Managed Metastore.
Откройте раздел Подключения.
Нажмите Создать подключение.
Заполните поля следующими значениями:
Название — metastore_lab;
Коннектор — Metastore;
Thrift URL — Thrift URL, скопированный с карточки Metastore;
Эндпоинт — https://s3.cloud.ru;
Идентификатор ключа доступа — access key, выбирается из Secret Manager;
Секретный ключ доступа — secret key, выбирается из Secret Manager;
Регион S3 — ru-central-1.
Нажмите Создать.
На странице Managed Trino на вкладке Подключения появится запись с названием «metastore_lab».
Создайте инстанс Trino
Перейдите в раздел Evolution и выберите сервис Managed Trino.
Откройте раздел Инстансы.
Нажмите Создать инстанс.
В блоке Общие параметры заполните поля следующими значениями:
Название — trino-lab-2.
Вычислительные ресурсы — Small (vCPU 4, RAM 16).
Количество нод — 3.
Подключения — выберите из списка подключение Metastore с названием «metastore_lab».
Нажмите Продолжить.
В блоке Сетевые настройки заполните поля:
VPC — выберите сеть VPC.
Зона доступности — выберите зону доступности, для которой создан SNAT-шлюз.
Подсеть — выберите подсеть, в которой расположен инстанс Managed Metastore.
Группа безопасности — выберите группу безопасности.
Пользователь — введите имя пользователя.
Пароль — выберите секретный ключ.
Подключить публичный хост — активируйте переключатель.
Нажмите Создать.
Дождитесь, когда статус инстанса изменится на «Готов».
Откройте карточку инстанса Trino. Информация из него понадобится на следующих этапах.
Подключите Trino к DBeaver
Откройте приложение DBeaver.
В панели сверху нажмите База данных → Новое соединение.
В списке соединений выберите Trino.
Нажмите Далее заполните поля на вкладке Главное:
Хост — публичный хост, указанный в карточке инстанса.
Порт — порт, указанный в карточке инстанса.
Пользователь — пользователь, указанный в карточке инстанса.
Пароль — пароль, указанный в карточке инстанса.
На вкладке Свойства драйвера измените значение свойства SSL на true.
Нажмите Тест соединения.
Нажмите Готово.
Слева в списке объектов появится база данных Metastore с названием «metastore_lab».

Работа с управляемыми таблицами
SQL-запросы в следующих шагах мы будем отправлять через DBeaver. Проверять результат будем в CyberDuck.
Ознакомьтесь с разделом Управляемые и внешние таблицы перед началом.
Управляемая таблица в формате .orc
Создайте схему.
CREATE SCHEMA IF NOT EXISTS metastore_lab . my_companyВ S3 автоматически создастся каталог warehouse и каталог со схемой my_company.db.
Создайте таблицу.
CREATE TABLE IF NOT EXISTS metastore_lab . my_company . employees ( id_employee INT , email VARCHAR ( 255 ))В S3 создастся каталог employees.
Заполните таблицу.
INSERT INTO metastore_lab . my_company . employees values ( 1 , 'xxx@example.com' ), ( 2 , 'yyy@example.com' ), ( 3 , 'zzz@example.com' )Проверьте результат.
SELECT * FROM metastore_lab . my_company . employeesВ S3 появится файл в формате .orc.
Удалите таблицу.
DROP TABLE metastore_lab . my_company . employees
В результате таблица удалена из Metastore, в S3 все данные вместе с каталогом employees также удалены.
Управляемая таблица в текстовом формате
Создайте схему.
CREATE SCHEMA IF NOT EXISTS metastore_lab . my_companyВ S3 автоматически создастся каталог warehouse и каталог со схемой my_company.db.
Сохраните данные в текстовом формате.
CREATE TABLE IF NOT EXISTS metastore_lab . my_company . employees_csv ( id_employee INT , email VARCHAR ( 255 ))WITH (format = 'TEXTFILE')Заполните таблицу.
INSERT INTO metastore_lab . my_company . employees_csv values ( 1 , 'xxx@example.com' ), ( 2 , 'yyy@example.com' ), ( 3 , 'zzz@example.com' )Проверьте результат.
SELECT * FROM metastore_lab . my_company . employees_csvВ S3 появится файл в формате .gz.
Удалите таблицу.
DROP TABLE metastore_lab . my_company . employees_csv
В результате таблица удалена из Metastore, в S3 все данные вместе с каталогом employees_csv также удалены.
Работа с внешними таблицами
Работать с внешними таблицами мы будем через CyberDuck.
Запустите CyberDuck.
Откройте бакет S3.
Создайте каталог с названием data.
Подготовьте файл с данными в формате .csv:
колонки: id, email
значения в колонке id: 1, 2, 3
значения в колонке email: xxx@example.com, yyy@example.com, zzz@example.com
Добавьте файл в каталог «data» на S3.
Запустите DBeaver.
Через DBeaver создайте схему.
CREATE SCHEMA IF NOT EXISTS metastore_lab . my_companyСоздайте таблицу.
CREATE TABLE IF NOT EXISTS metastore_lab . my_company . csv_external ( id VARCHAR , email VARCHAR )WITH (external_location = 's3a://bucket-4b8dce/data' ,format = 'CSV' ,csv_separator = ';' ,skip_header_line_count = 1)Проверьте результат.
SELECT * FROM metastore_lab . my_company . csv_externalПодготовьте новый файл с данными в формате .csv:
колонки: id, email
значения в колонке id: 4, 5, 6
значения в колонке email: aaa@example.com, bbb@example.com, ccc@example.com
Добавьте файл в каталог «data» на S3. В этом сценарии мы имитируем поступление новых данных из другой системы.
Проверьте результат.
SELECT * FROM metastore_lab . my_company . csv_externalСистема считывает данные из двух разных файлов с одинаковой структурой и с одинаковым разрешением, как если бы это был один файл.
Заполните таблицу новыми значениями.
INSERT INTO metastore_lab . my_company . csv_external values ( '7' , 'mmm@example.com' ), ( '8' , 'nnn@example.com' ), ( '9' , 'ooo@example.com' )Проверьте результат.
SELECT * FROM metastore_lab . my_company . csv_externalВ S3 появится файл в формате .gz.
Удалите таблицу.
DROP TABLE metastore_lab . my_company . csv_external
В результате таблица удалена из Metastore. В отличие от управляемых таблиц файлы в S3 остаются доступными.
- Перед началом работы
- Создайте инстанс Managed Metastore
- Создайте подключение к Managed Metastore
- Создайте инстанс Trino
- Подключите Trino к DBeaver
- Работа с управляемыми таблицами
- Работа с внешними таблицами