Evolution
Тема интерфейса

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

Эта статья полезна?

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

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

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

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

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

Внимание

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

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

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

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

  3. (Опционально) Cоздайте публичный SNAT-шлюз, если необходим доступ в интернет.

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

  5. Создайте кластер Data Platform, в котором будет размещен инстанс.

    Назовите кластер dp-labs.

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

Создайте ключи для доступа к Object Storage

  1. Откройте личный кабинет.

  2. Перейдите в раздел Пользователи на вкладку Сервисные аккаунты.

  3. Нажмите на название аккаунта, для которого необходимо сгенерировать ключ доступа. Если такого аккаунта нет, создайте его. Убедитесь, что у выбранного аккаунта есть роль с доступом к сервису Object Storage.

  4. В блоке Учетные данные доступа на вкладке Ключи доступа в правом верхнем углу нажмите Создать ключ.

  5. Введите краткое описание ключа.

  6. Задайте время жизни ключа. После указанного срока ключ перестанет быть активным. Либо выберите вариант Бессрочно. Бессрочные ключи менее безопасны, рекомендуем выбирать ограничение по периоду действия или обновлять ключи самостоятельно не менее одного раза в год.

  7. Нажмите Создать. Сервис сгенерирует Key ID (логин) и Key Secret (пароль). Скопируйте и сохраните эти значения. После того как вы закроете это окно, повторно посмотреть их будет нельзя.

  8. На верхней панели слева нажмите Кнопка с изображением девяти точек и выберите Хранение данных → Object Storage.

  9. Скопируйте ID тенанта.

  10. На верхней панели слева нажмите Кнопка с изображением девяти точек и выберите Управление → Secret Management.

  11. Создайте access key:

    1. Нажмите Добавить секрет.

    2. Укажите путь к папке, например dp-labs-access-key.

    3. В блоке Значение секрета выберите Стандартый режим и укажите значение в формате tenant_id:key_id, где:

      • tenant_id — скопированное ранее значение ID тенанта;

      • key_id — значение Key ID, скопированное и сохраненное ранее при создании ключа доступа.

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

  12. Создайте secret key:

    1. Нажмите Добавить секрет.

    2. Укажите путь к папке, например dp-labs-secret-key.

    3. В блоке Значение секрета выберите Стандартый режим и укажите значение Key Secret, скопированное и сохраненное ранее при создании ключа доступа.

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

В результате в списке появятся два новых секрета: dp-labs-access-key и dp-labs-secret-key.

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

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

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

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

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

    • Кластерdp-labs.

    • Лог-группа — группа логов.

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

    • Источник — выберите Cloud S3.

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

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

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

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

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

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

Создайте каталог Managed Trino

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

  2. Нажмите Создать + и выберите Каталог.

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

    • Названиеmetastore_lab;

    • Коннектор — выберите metastore;

    • Thrift URL — скопируйте значение Thrift URL с карточки созданного ранее инстанса Managed Metastore;

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

    • Идентификатор ключа доступа — выберите созданный ранее access key для доступа к Object Storage, например dp-labs-access-key;

    • Секретный ключ доступа — выберите созданный ранее secret key для доступа к Object Storage, например dp-labs-secret-key;

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

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

На странице Managed Trino на вкладке Каталоги появится запись с названием metastore_lab.

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

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

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

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

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

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

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

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

    • Каталоги — выберите из списка ранее созданный каталог metastore_lab.

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

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

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

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

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

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

    • Пароль — выберите пароль из списка секретов.

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

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

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

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

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

Добавьте сертификат в Java KeyStore

  1. Запустите терминал и перейдите в директорию, где хотите сохранить JKS-файл.

  2. Введите команду:

    keytool -importcert
    -alias cloudru-root
    -file <PATH>/dp-cert.crt
    -keystore <PATH>/cloudru-truststore.jks
    -storetype JKS
    -storepass <YOUR-PASSWORD>
    -noprompt
    • В строке -file вместо <PATH> укажите путь до скачанного ранее root-сертификата.

    • В строке -keystore вместо <PATH> укажите путь до места, где будет храниться JKS-файл.

      Сохраните путь. Он понадобится при добавлении JKS-файла в DBeaver.

    • В строке -storepass вместо <YOUR-PASSWORD> задайте пароль для сертификата.

      Сохраните пароль. Он понадобится при добавлении JKS-файла в DBeaver.

Подключите 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. Удалите таблицу.

    DROP TABLE metastore_lab.my_company.csv_external

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