Перейти к содержимому
Последнее обновление

Интеграция с Alibaba Cloud OSS Tables

Alibaba Cloud OSS Tables — это сервис управляемого хранения таблиц Apache Iceberg. OSS Tables использует Table Buckets в качестве единиц хранения, предоставляет интерфейс метаданных, совместимый с Apache Iceberg REST Catalog, и обеспечивает доступ к данным таблиц через S3-совместимый интерфейс OSS.

По сравнению с самостоятельным управлением таблицами Iceberg в обычном OSS Bucket, OSS Tables предоставляет следующие возможности:

  • Встроенный Iceberg REST Catalog, который избавляет от необходимости развёртывать внешнюю службу метаданных, например Hive Metastore.
  • Автоматическая компакция мелких файлов, удаление устаревших снимков и очистка файлов, на которые нет ссылок.
  • Стандартные интерфейсы Iceberg, позволяющие нескольким вычислительным движкам обращаться к одним и тем же данным таблиц.

Apache Doris подключается к OSS Tables через Iceberg REST Catalog: REST Catalog управляет пространствами имён и метаданными таблиц, а S3FileIO читает и записывает файлы данных. В этом руководстве описано, как создать OSS Tables Catalog в Doris, выполнять запросы к таблицам Iceberg и записывать в них данные.

предупреждение

Эта функция является экспериментальной и поддерживается начиная с Doris 4.1.4.

Руководство по использованию​

01 Создание OSS Table Bucket​

Создайте Table Bucket в консоли Alibaba Cloud OSS. После создания сохраните ARN, регион и имя Table Bucket. ARN имеет следующий формат:

acs:osstables:<region>:<account_id>:bucket/<table_bucket_name>

Создайте AccessKey для пользователя RAM с доступом к целевому Table Bucket или получите временные учётные данные STS. Убедитесь, что узлы FE могут обращаться к конечной точке OSS Tables REST Catalog, а узлы FE и BE могут обращаться к конечной точке доступа к данным OSS.

Сведения о разрешениях, необходимых для каждой операции OSS Tables, см. в разделе Разрешения и управление доступом в Alibaba Cloud OSS Tables.

02 Создание Iceberg Catalog​

Замените регион, идентификатор учётной записи, имя Table Bucket и учётные данные для доступа фактическими значениями:

CREATE CATALOG oss_tables PROPERTIES (
'type' = 'iceberg',
'iceberg.catalog.type' = 'rest',
'iceberg.rest.uri' = 'https://<region>.oss-tables.aliyuncs.com/iceberg',
'warehouse' = 'acs:osstables:<region>:<account_id>:bucket/<table_bucket_name>',

'iceberg.rest.sigv4-enabled' = 'true',
'iceberg.rest.signing-name' = 'osstables',
'iceberg.rest.signing-region' = '<region>',
'iceberg.rest.view-enabled' = 'false',

'io-impl' = 'org.apache.iceberg.aws.s3.S3FileIO',
'oss.endpoint' = 'https://oss-<region>.aliyuncs.com',
'oss.region' = '<region>',
'oss.access_key' = '<access_key_id>',
'oss.secret_key' = '<access_key_secret>',
'oss.use_path_style' = 'false',

'test_connection' = 'true'
);

Для доступа к Alibaba Cloud через внутреннюю сеть замените iceberg.rest.uri и oss.endpoint на https://<region>-internal.oss-tables.aliyuncs.com/iceberg и https://oss-<region>-internal.aliyuncs.com соответственно.

При использовании временных учётных данных STS добавьте oss.session_token после oss.secret_key:

'oss.session_token' = '<sts_token>',

Doris использует oss.access_key, oss.secret_key и необязательный oss.session_token как для подписи запросов к REST Catalog по протоколу SigV4, так и для доступа к данным через S3FileIO. Отдельно настраивать iceberg.rest.access-key-id и iceberg.rest.secret-access-key не требуется.

Параметры​

ПараметрОбязательныйОписание
typeДаДолжен иметь значение iceberg.
iceberg.catalog.typeДаДолжен иметь значение rest для доступа к OSS Tables через Iceberg REST Catalog.
iceberg.rest.uriДаКонечная точка OSS Tables REST Catalog.
warehouseДаARN для Table Bucket.
iceberg.rest.sigv4-enabledДаДолжен иметь значение true.
iceberg.rest.signing-nameДаДолжен иметь значение osstables в нижнем регистре. Это значение чувствительно к регистру.
iceberg.rest.signing-regionДаРегион для подписи SigV4. Должен совпадать с регионом Table Bucket.
iceberg.rest.view-enabledДаУстановите значение false. OSS Tables в настоящее время не поддерживает интерфейс Iceberg View.
io-implДаДолжен иметь значение org.apache.iceberg.aws.s3.S3FileIO. Не используйте HadoopFileIO.
oss.endpointДаКонечная точка, которую S3FileIO использует для доступа к файлам данных OSS.
oss.regionДаРегион доступа к данным OSS. Должен совпадать с регионом Table Bucket.
oss.access_keyДаAccessKey ID для Alibaba Cloud.
oss.secret_keyДаAccessKey Secret для Alibaba Cloud.
oss.session_tokenНетУкажите этот параметр при использовании временных учётных данных STS.
oss.use_path_styleНетОпределяет, используется ли доступ в стиле path-style. Значение по умолчанию: false.
test_connectionНетЕсли установлено значение true, Doris проверяет подключение к REST Catalog и аутентификацию при создании Catalog.

test_connection=true не заменяет проверку доступа к данным. После создания Catalog выполните реальный запрос или операцию записи, чтобы проверить сетевую доступность конечной точки доступа к данным OSS с узлов FE и BE и необходимые разрешения.

03 Доступ к OSS Tables​

SWITCH oss_tables;

SHOW DATABASES;

USE <namespace_name>;

SHOW TABLES;

SELECT * FROM <table_name> LIMIT 10;

04 Создание таблицы OSS Tables и запись данных​

SWITCH oss_tables;

CREATE DATABASE IF NOT EXISTS doris_demo;
USE doris_demo;

CREATE TABLE orders (
order_id BIGINT,
customer STRING,
amount DECIMAL(10, 2),
created_at DATETIME
)
PROPERTIES (
'format-version' = '2',
'write-format' = 'parquet',
'write.format.default' = 'parquet',
'write.parquet.compression-codec' = 'zstd'
);

INSERT INTO orders VALUES
(1, 'Alice', 99.50, '2026-08-11 10:00:00'),
(2, 'Bob', 120.00, '2026-08-11 10:01:00');

SELECT order_id, customer, amount, created_at
FROM orders
ORDER BY order_id;
order_id  customer  amount  created_at
1 Alice 99.50 2026-08-11 10:00:00
2 Bob 120.00 2026-08-11 10:01:00

Чтобы убедиться, что файлы данных записаны в OSS Tables, можно выполнить запрос к таблице метаданных Iceberg $files:

SELECT file_path, file_format, record_count
FROM `orders$files`
ORDER BY file_path;

Примечания по использованию​

  • OSS Tables поддерживает только формат таблиц Iceberg.
  • Для iceberg.rest.signing-name необходимо установить значение osstables в нижнем регистре. Также необходимо указать правильный iceberg.rest.signing-region и установить для iceberg.rest.sigv4-enabled значение true.
  • При использовании временных учётных данных STS обновите AK, SK и токен в Catalog до истечения срока их действия.

Часто задаваемые вопросы​

При создании Catalog возвращается ошибка 403 Forbidden​

Проверьте следующие настройки:

  • Убедитесь, что oss.access_key и oss.secret_key действительны. При использовании временных учётных данных STS также убедитесь, что oss.session_token указан правильно и срок его действия не истёк.
  • Убедитесь, что пользователь RAM или субъект STS имеет разрешения oss:GetTableBucket и oss:ListNamespaces для целевого Table Bucket.
  • Убедитесь, что идентификатор учётной записи, регион и имя Table Bucket в warehouse указаны правильно.
  • Убедитесь, что iceberg.rest.signing-name имеет значение osstables, а iceberg.rest.signing-region соответствует региону Table Bucket.

Пространства имён и таблицы видны, но запросы к данным завершаются ошибкой​

Убедитесь, что FE и все узлы BE могут обращаться к oss.endpoint, а пользователь RAM или субъект STS имеет разрешения oss:GetTableMetadataLocation и oss:GetTableData.

Полный список разрешений, необходимых для операций OSS Tables, см. в разделе Разрешения и управление доступом в Alibaba Cloud OSS Tables.