Подключение Trino к S3

В лабораторной работе мы рассмотрим:

  • сценарий взаимодействия между Managed Trino, Managed Metastore и Object Storage;

  • отправку запросов через DBeaver;

  • работу с управляемыми таблицами;

  • работу с внешними таблицами.

Внимание

Все сущности должны располагаться в одной VPC и подсетях одного типа.

Перед началом работы

  1. Зарегистрируйтесь в личном кабинете Cloud.ru.

    Если вы уже зарегистрированы, войдите под своей учетной записью.

  2. Ознакомьтесь с разделом Управляемые и внешние таблицы. В следующих блоках вам будут встречаться термины «Управляемые таблицы» и «Внешние таблицы».

  3. Создайте бакет Object Storage, в котором будут храниться таблицы и схемы.

  4. Установите JDBC-клиент DBeaver.

Создайте инстанс Managed Metastore

  1. Перейдите в раздел Evolution и выберите сервис Managed Metastore.

  2. Откройте раздел Инстансы.

  3. Нажмите Создать инстанс.

  4. В блоке Общие параметры заполните поля следующими значениями:

    • Название — metastore-lab.

    • База данных — выберите базу данных.

    • VPC — выберите VPC-сеть.

    • Зона доступности — выберите зону доступности, для которой создан SNAT-шлюз.

    • Подсеть — выберите подсеть.

  5. В блоке Настройки сервера:

    • Название — server-lab.

    • Группа безопасности — выберите группу безопасности.

    • Группа логов — выберите группу логов.

    • Файловая система — S3.

    • Источник — Object Storage.

    • Бакет — выберите созданный бакет Object Storage.

  6. Дождитесь, когда статус инстанса изменится на «Готов».

  7. Нажмите Скопировать Thrift URL.

Создайте подключение к Managed Metastore

  1. Перейдите в раздел Evolution и выберите сервис Managed Metastore.

  2. Откройте раздел Подключения.

  3. Нажмите Создать подключение.

  4. Заполните поля следующими значениями:

    • Название — metastore_lab;

    • Коннектор — Metastore;

    • Thrift URL — Thrift URL, скопированный с карточки Metastore;

    • Эндпоинтhttps://s3.cloud.ru;

    • Идентификатор ключа доступа — access key, выбирается из Secret Manager;

    • Секретный ключ доступа — secret key, выбирается из Secret Manager;

    • Регион S3ru-central-1.

  5. Нажмите Создать.

На странице Managed Trino на вкладке Подключения появится запись с названием «metastore_lab».

Создайте инстанс Trino

  1. Перейдите в раздел Evolution и выберите сервис Managed Trino.

  2. Откройте раздел Инстансы.

  3. Нажмите Создать инстанс.

  4. В блоке Общие параметры заполните поля следующими значениями:

    • Название — trino-lab-2.

    • Вычислительные ресурсы — Small (vCPU 4, RAM 16).

    • Количество нод — 3.

    • Подключения — выберите из списка подключение Metastore с названием «metastore_lab».

  5. Нажмите Продолжить.

  6. В блоке Сетевые настройки заполните поля:

    • VPC — выберите сеть VPC.

    • Зона доступности — выберите зону доступности, для которой создан SNAT-шлюз.

    • Подсеть — выберите подсеть, в которой расположен инстанс Managed Metastore.

    • Группа безопасности — выберите группу безопасности.

    • Пользователь — введите имя пользователя.

    • Пароль — выберите секретный ключ.

    • Подключить публичный хост — активируйте переключатель.

  7. Нажмите Создать.

  8. Дождитесь, когда статус инстанса изменится на «Готов».

  9. Откройте карточку инстанса Trino. Информация из него понадобится на следующих этапах.

Подключите Trino к DBeaver

  1. Откройте приложение DBeaver.

  2. В панели сверху нажмите База данных → Новое соединение.

  3. В списке соединений выберите Trino.

  4. Нажмите Далее заполните поля на вкладке Главное:

    • Хост — публичный хост, указанный в карточке инстанса.

    • Порт — порт, указанный в карточке инстанса.

    • Пользователь — пользователь, указанный в карточке инстанса.

    • Пароль — пароль, указанный в карточке инстанса.

    ../_images/dbeaver__connection-1.png
  5. На вкладке Свойства драйвера измените значение свойства SSL на true.

    ../_images/dbeaver__connection-2.png
  6. Нажмите Тест соединения.

  7. Нажмите Готово.

Слева в списке объектов появится база данных Metastore с названием «metastore_lab».

../_images/dbeaver__connection-ready-2.png

Работа с управляемыми таблицами

SQL-запросы в следующих шагах мы будем отправлять через DBeaver. Проверять результат будем в CyberDuck.

Примечание

Ознакомьтесь с разделом Управляемые и внешние таблицы перед началом.

Управляемая таблица в формате .orc

  1. Создайте схему.

    CREATE SCHEMA IF NOT EXISTS metastore_lab . my_company

    В S3 автоматически создастся каталог warehouse и каталог со схемой my_company.db.

  2. Создайте таблицу.

    CREATE TABLE IF NOT EXISTS metastore_lab . my_company . employees ( id_employee INT , email VARCHAR ( 255 ))

    В S3 создастся каталог employees.

  3. Заполните таблицу.

    INSERT INTO metastore_lab . my_company . employees values ( 1 , 'xxx@example.com' ), ( 2 , 'yyy@example.com' ), ( 3 , 'zzz@example.com' )
  4. Проверьте результат.

    SELECT * FROM metastore_lab . my_company . employees

    В S3 появится файл в формате .orc.

  5. Удалите таблицу.

    DROP TABLE metastore_lab . my_company . employees

В результате таблица удалена из Metastore, в S3 все данные вместе с каталогом employees также удалены.

Управляемая таблица в текстовом формате

  1. Создайте схему.

    CREATE SCHEMA IF NOT EXISTS metastore_lab . my_company

    В S3 автоматически создастся каталог warehouse и каталог со схемой my_company.db.

  2. Сохраните данные в текстовом формате.

    CREATE TABLE IF NOT EXISTS metastore_lab . my_company . employees_csv ( id_employee INT , email VARCHAR ( 255 ))
    WITH (
    format = 'TEXTFILE'
    )
  3. Заполните таблицу.

    INSERT INTO metastore_lab . my_company . employees_csv values ( 1 , 'xxx@example.com' ), ( 2 , 'yyy@example.com' ), ( 3 , 'zzz@example.com' )
  4. Проверьте результат.

    SELECT * FROM metastore_lab . my_company . employees_csv

    В S3 появится файл в формате .gz.

  5. Удалите таблицу.

    DROP TABLE metastore_lab . my_company . employees_csv

В результате таблица удалена из Metastore, в S3 все данные вместе с каталогом employees_csv также удалены.

Работа с внешними таблицами

Работать с внешними таблицами мы будем через CyberDuck.

  1. Запустите CyberDuck.

  2. Откройте бакет S3.

  3. Создайте каталог с названием data.

  4. Подготовьте файл с данными в формате .csv:

    • колонки: id, email

    • значения в колонке id: 1, 2, 3

    • значения в колонке email: xxx@example.com, yyy@example.com, zzz@example.com

  5. Добавьте файл в каталог «data» на S3.

  6. Запустите DBeaver.

  7. Через DBeaver создайте схему.

    CREATE SCHEMA IF NOT EXISTS metastore_lab . my_company
  8. Создайте таблицу.

    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
    )
  9. Проверьте результат.

    SELECT * FROM metastore_lab . my_company . csv_external
  10. Подготовьте новый файл с данными в формате .csv:

    • колонки: id, email

    • значения в колонке id: 4, 5, 6

    • значения в колонке email: aaa@example.com, bbb@example.com, ccc@example.com

  11. Добавьте файл в каталог «data» на S3. В этом сценарии мы имитируем поступление новых данных из другой системы.

  12. Проверьте результат.

    SELECT * FROM metastore_lab . my_company . csv_external

    Система считывает данные из двух разных файлов с одинаковой структурой и с одинаковым разрешением, как если бы это был один файл.

  13. Заполните таблицу новыми значениями.

    INSERT INTO metastore_lab . my_company . csv_external values ( '7' , 'mmm@example.com' ), ( '8' , 'nnn@example.com' ), ( '9' , 'ooo@example.com' )
  14. Проверьте результат.

    SELECT * FROM metastore_lab . my_company . csv_external

    В S3 появится файл в формате .gz.

  15. Удалите таблицу.

    DROP TABLE metastore_lab . my_company . csv_external

В результате таблица удалена из Metastore. В отличие от управляемых таблиц файлы в S3 остаются доступными.

Evolution