Перейти к основному содержимому
Версия: 2.0.x

Создание Iceberg REST Catalog для AWS S3 Tables

Эта статья объясняет, как создать Iceberg REST Catalog в Selena для доступа к данным в AWS S3 tables через AWS Glue Iceberg REST endpoint.

AWS Glue Iceberg REST endpoint реализует спецификацию Iceberg REST Catalog Open API, которая предоставляет стандартизированный интерфейс для взаимодействия с Iceberg таблицами. Для доступа к S3 tables с использованием этого endpoint необходимо настроить credentials путём комбинирования IAM политик и авторизации AWS Lake Formation. Следующие разделы проведут вас через настройку прав доступа, включая определение необходимых политик, установку прав Lake Formation на уровне баз данных и таблиц, а также использование Selena для создания Iceberg REST catalog для доступа к S3 tables.

(Опционально) Создание table bucket

Вы можете пропустить этот шаг, если у вас уже есть table bucket для S3 tables.

  1. Войдите в Amazon S3 Console как пользователь с правами администратора.
  2. В верхнем правом углу страницы выберите ваш AWS регион.
  3. В левой навигационной панели выберите Table buckets из навигационной панели.
  4. Нажмите Create table bucket, чтобы создать table bucket.
  5. После создания table bucket выберите его и нажмите Create table with Athena.
  6. Создайте namespace.
  7. После создания namespace снова нажмите Create table with Athena, чтобы создать таблицу.

ПРИМЕЧАНИЕ

Вы можете создать Database и Table с помощью Athena, а затем выполнять запросы к ним с помощью Selena. Альтернативно, вы можете просто создать table bucket, а затем использовать Selena для создания базы данных и таблицы.

Создание IAM Policy

Для доступа к S3 tables через AWS Glue endpoint создайте IAM Policy с правами для AWS Glue и операций Lake Formation:

  1. Войдите в Amazon IAM Console как пользователь с правами администратора.
  2. В верхнем правом углу страницы выберите ваш AWS регион.
  3. В левой навигационной панели выберите Policies из навигационной панели.
  4. Выберите Create a policy, выберите JSON в редакторе политик.
  5. Добавьте следующую политику для предоставления доступа к AWS Glue и действиям Lake Formation.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"glue:GetCatalog",
"glue:GetDatabase",
"glue:GetDatabases",
"glue:GetTable",
"glue:GetTables",
"glue:CreateTable",
"glue:UpdateTable"
],
"Resource": [
"arn:aws:glue:<region>:<account-id>:catalog",
"arn:aws:glue:<region>:<account-id>:catalog/s3tablescatalog",
"arn:aws:glue:<region>:<account-id>:catalog/s3tablescatalog/<s3_table_bucket_name>",
"arn:aws:glue:<region>:<account-id>:table/s3tablescatalog/<s3_table_bucket_name>/<namespace>/*",
"arn:aws:glue:<region>:<account-id>:database/s3tablescatalog/<s3_table_bucket_name>/<namespace>"
]
},
{
"Effect": "Allow",
"Action": [
"lakeformation:GetDataAccess"
],
"Resource": "*"
}
]
}

После создания IAM политики прикрепите её к целевому IAM пользователю:

  1. Выберите Users из навигационной панели.
  2. Выберите пользователя, которому требуется доступ к S3 table.
  3. Нажмите Add permissions и выберите Attach policies directly.
  4. Прикрепите вновь созданную политику.

Управление правами через Lake Formation

Для доступа к S3 tables Selena требуется, чтобы Lake Formation сначала настроил права, позволяющие сторонним query engines получать доступ к S3 tables.

  1. Войдите в Lake Formation Console как пользователь с правами администратора.
  2. В верхнем правом углу страницы выберите ваш AWS регион.
  3. В левой навигационной панели выберите Application integration settings из навигационной панели.
  4. Выберите Allow external engines to access data in Amazon S3 locations with full table access.

Затем предоставьте вышеуказанному IAM пользователю права доступа в Lake Formation.

  1. В левой навигационной панели Lake Formation Console выберите Data permissions из навигационной панели.
  2. Нажмите Grant.
  3. В разделе Principals выберите IAM users and roles и выберите авторизованного IAM пользователя из выпадающего списка IAM users and roles.
  4. В разделе LF-Tags or catalog resources выберите Named Data Catalog resources и выберите ваш созданный table bucket в выпадающем списке Catalogs.
  5. В разделе Catalog permissions выберите Super для Catalog permissions.
  6. Нажмите Grant.

ПРИМЕЧАНИЕ

Здесь права Super предоставлены для удобства тестирования. Вам необходимо назначить соответствующие права на основе фактических требований в production окружении.

Создание Iceberg REST Catalog

Создайте Iceberg REST catalog в Selena:

CREATE EXTERNAL CATALOG selena_lakehouse_s3tables PROPERTIES(
"type"="iceberg",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.uri" = "https://glue.<region>.amazonaws.com/iceberg",
"iceberg.catalog.rest.sigv4-enabled" = "true",
"iceberg.catalog.rest.signing-name" = "glue",
"iceberg.catalog.rest.access-key-id" = "<iam_user_access_key>",
"iceberg.catalog.rest.secret-access-key" = "<iam_user_secret_key>",
"iceberg.catalog.warehouse" = "<accountid>:s3tablescatalog/<table-bucket-name>",
"aws.s3.region" = "<region>"
);

После этого вы можете создавать базы данных и таблицы и выполнять в них запросы.

Пример:

-- Переключиться на catalog
Selena> SET CATALOG selena_lakehouse_s3tables;
-- Создать базу данных
Selena> CREATE DATABASE s3table_db;
Query OK, 0 rows affected

-- Переключить базу данных
Selena> USE s3table_db;
Database changed

-- Создать таблицу
Selena> CREATE TABLE taxis (
trip_id BIGINT,
trip_distance FLOAT,
fare_amount DOUBLE,
store_and_fwd_flag STRING,
vendor_id BIGINT
) PARTITION BY (vendor_id);
Query OK, 0 rows affected

-- Вставить данные
Selena> INSERT INTO taxis
VALUES (1000371, 1.8, 15.32, 'N', 1),
(1000372, 2.5, 22.15, 'N', 2),
(1000373, 0.9, 9.01, 'N', 2),
(1000374, 8.4, 42.13, 'Y', 1);
Query OK, 4 rows affected

-- Запросить данные
Selena> SELECT * FROM taxis;
+---------+---------------+-------------+--------------------+-----------+
| trip_id | trip_distance | fare_amount | store_and_fwd_flag | vendor_id |
+---------+---------------+-------------+--------------------+-----------+
| 1000372 | 2.5 | 22.15 | N | 2 |
| 1000373 | 0.9 | 9.01 | N | 2 |
| 1000371 | 1.8 | 15.32 | N | 1 |
| 1000374 | 8.4 | 42.13 | Y | 1 |
+---------+---------------+-------------+--------------------+-----------+
4 rows in set