Создание внешней таблицы на базе таблицы из бакета Yandex Object Storage с помощью конфигурационного файла
При создании внешней таблицы из таблицы, расположенной в бакете Yandex Object Storage, необходимо передать в запросе статический ключ доступа для сервисного аккаунта. Это можно сделать с помощью протокола S3
Чтобы создать внешнюю таблицу с помощью конфигурационного файла:
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Подготовьте инфраструктуру:
-
Создайте кластер Managed Service for Greenplum® любой подходящей конфигурации.
-
В подсети кластера настройте NAT-шлюз и создайте группу безопасности, разрешающую весь входящий и исходящий трафик со всех адресов.
-
Создайте виртуальную машину с Linux в той же облачной подсети, в которой расположен кластер Managed Service for Greenplum®.
-
Создайте бакет в Object Storage с ограниченным доступом. Загрузите в него файл
example.csv
, содержащий тестовую таблицу:10,2010
-
Создайте статический ключ доступа для сервисного аккаунта.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Создайте в рабочей директории файл
example.csv
, содержащий тестовую таблицу:10,2010
-
Скачайте в ту же рабочую директорию файл конфигурации инфраструктуры
.В этом файле описаны:
- сеть;
- подсеть;
- сервисный аккаунт со статическим ключом доступа;
- кластер Managed Service for Greenplum®;
- бакет, в который будет помещен файл
example.csv
; - виртуальная машина с Ubuntu 20.04.
-
Укажите в файле
greenplum-s3-vm.tf
:- Пароль пользователя
user
, который будет использоваться для доступа к кластеру Managed Service for Greenplum®. - Идентификатор образа виртуальной машины.
- Имя пользователя и путь к SSH-ключу для доступа к виртуальной машине.
- Идентификатор каталога для сервисного аккаунта, такой же как в настройках провайдера.
- Имя бакета, которое должно быть уникальным во всем Object Storage.
- Пароль пользователя
-
В терминале перейдите в директорию с планом инфраструктуры.
-
Для проверки правильности файлов конфигурации выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте инфраструктуру, необходимую для выполнения инструкций из этого руководства:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
-
Чтобы получить параметры статического ключа, в рабочей директории выполните команду:
terraform output -raw access_key > static-key.txt && \ echo \n >> static-key.txt && \ terraform output -raw secret_key >> static-key.txt
Команда сохраняет в файл
static-key.txt
идентификатор статического ключа и статический ключ, они потребуются далее. -
Перейдите в консоль управления
и настройте NAT-шлюз для подсети, в которой расположен кластер.
Настройте веб-сервер с файлом конфигурации
Настройте веб-сервер на виртуальной машине и создайте на нем файл конфигурации для протокола s3
:
-
Подключитесь к виртуальной машине по SSH.
-
Создайте каталог
/opt/gp_http_server
и поместите в него файлs3.config
, который содержит параметры статического ключа и другие настройки конфигурации для протоколаs3
:sudo mkdir /opt/gp_http_server
Содержимое файла
s3.config
:[default] accessid = "<идентификатор_статического_ключа>" secret = "<статический_ключ>" threadnum = 4 chunksize = 67108864 low_speed_limit = 10240 low_speed_time = 60 encryption = true version = 2 proxy = "" autocompress = true verifycert = true server_side_encryption = "" # gpcheckcloud config gpcheckcloud_newline = "\n"
-
В каталог
/etc/systemd/system/
поместите файл конфигурации веб-сервераgp_s3_config_http.service
:[Unit] Description=HTTP server config to connect Greenplum with Object Storage After=network.target [Service] KillMode=process Restart=on-failure Type=simple User=root ExecStart=python3 -m http.server 8553 --directory /opt/gp_http_server [Install] WantedBy=multi-user.target
-
Запустите веб-сервер:
sudo systemctl daemon-reload && \ sudo systemctl enable gp_s3_config_http && \ sudo systemctl start gp_s3_config_http
-
Чтобы проверить состояние веб-сервера, выполните команду:
sudo systemctl status gp_s3_config_http
Создайте внешнюю таблицу
-
Подключитесь к кластеру Managed Service for Greenplum®.
-
Выполните запрос на создание внешней таблицы, которая ссылается на таблицу
example.csv
в бакете:CREATE READABLE EXTERNAL TABLE s3_ext_table(id int, year int) LOCATION('s3://storage.yandexcloud.net/<имя_бакета>/example.csv config_server=http://<внутренний_IP-адрес_виртуальной_машины>:8553/s3.config region=ru-central1-a') FORMAT 'csv';
Успешный запрос вернет ответ:
CREATE EXTERNAL TABLE
-
Запросите данные из внешней таблицы:
SELECT * FROM s3_ext_table;
Ожидаемый результат выполнения команды:
id | year ----+------ 10 | 2010 (1 row)
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
- Удалите виртуальную машину.
- Если вы зарезервировали для виртуальной машины публичный статический IP-адрес, удалите его.
- Удалите бакет в Object Storage.
- Удалите кластер Managed Service for Greenplum®.
- Удалите сервисный аккаунт.
- Удалите подсеть.
- Удалите таблицу маршрутизации.
- Удалите NAT-шлюз.
- Удалите облачную сеть.
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-
Greenplum® и Greenplum Database® являются зарегистрированными товарными знаками или товарными знаками VMware, Inc в США и/или других странах.