すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:Trino のネイティブ S3 ファイルシステムで OSS Tables にアクセスする

最終更新日:Jun 12, 2026

OSS Tables は、Apache Iceberg REST Catalog プロトコルと互換性があります。Trino のネイティブ S3 ファイルシステム (fs.native-s3) を使用して OSS Tables に接続し、標準 SQL を使用してテーブルバケット内のデータをクエリおよび書き込みできます。この方法では、oss:// プロトコルをサポートするために Trino のソースコードに軽微な変更を加える必要があり、ビルド環境を制御できるシナリオに適しています。

重要

Trino コミュニティは、oss:// ファイルシステムプロトコルをネイティブにサポートしていません。Trino を使用して OSS テーブルにアクセスするには、Trino のソースコードを修正し、2 つのモジュールを再コンパイルする必要があります。その後、Trino 環境の元の JAR パッケージを新しくコンパイルされたものに置き換え、サービスを再起動する必要があります。

ステップ 1: Trino のソースコードを変更する

OSS テーブルは、oss:// がプレフィックスとして付いたデータパスを返しますが、Trino のネイティブ S3 ファイルシステムは s3://s3a://、および s3n:// スキームしか認識しません。以下の 2 つのモジュールに oss スキームを登録する必要があります。

trino-filesystem-s3 の変更

S3 ロケーション検証ロジックを特定し、許可されたスキームのセットに oss を追加します。

// 変更前
checkArgument(Set.of("s3", "s3a", "s3n").contains(location.scheme().get()), "Wrong scheme for S3 location: %s", location);

// 変更後
checkArgument(Set.of("s3", "s3a", "s3n", "oss").contains(location.scheme().get()), "Wrong scheme for S3 location: %s", location);

trino-filesystem-manager の変更

ファイルシステムファクトリのバインディングに、oss スキーム用のバインディングを追加します:

factories.addBinding("s3").to(Key.get(TrinoFileSystemFactory.class, FileSystemS3.class));

factories.addBinding("s3a").to(Key.get(TrinoFileSystemFactory.class, FileSystemS3.class));

factories.addBinding("s3n").to(Key.get(TrinoFileSystemFactory.class, FileSystemS3.class));
// 既存の s3/s3a/s3n バインディングの後に、次の行を追加します。
factories.addBinding("oss").to(Key.get(TrinoFileSystemFactory.class, FileSystemS3.class));

JAR パッケージのビルドと置換

2 つのモジュールをビルドした後、Trino のデプロイメントディレクトリ内にある元の JAR パッケージを新しいパッケージに置き換え、Trino サービスを再起動します。

# trino-filesystem-s3 をビルドします
mvn -pl lib/trino-filesystem-s3 -am package -DskipTests

# trino-filesystem-manager をビルドします
mvn -pl lib/trino-filesystem-manager -am package -DskipTests

# JAR パッケージを置き換えます (Trino が /opt/trino にインストールされていると仮定)
cp lib/trino-filesystem-s3/target/trino-filesystem-s3-*.jar /opt/trino/lib/
cp lib/trino-filesystem-manager/target/trino-filesystem-manager-*.jar /opt/trino/lib/

ステップ 2: テーブルバケットの作成

データを書き込む前に、テーブルバケットと名前空間を作成する必要があります。ossutil または AWS CLI のいずれかを使用できます。

方法 1: ossutil の使用

1. ossutil のインストールまたはアップグレード

ossutil 2.3.0 以降をインストールします。古いバージョンの ossutil がインストールされている場合は、次のコマンドを実行して最新バージョンにアップグレードします。

ossutil update -f

2. 認証情報の設定

ossutil config コマンドを実行し、プロンプトに従って AccessKey ID、AccessKey Secret、およびリージョンを入力します。

3. テーブルバケットの作成

ossutil tables-api create-table-bucket --name <table_bucket_name> --endpoint http://<endpoint> --region <region>

コマンドが成功すると、出力にテーブルバケットの ARN が含まれます。この ARN は後で使用するため、記録しておいてください。

4. 名前空間の作成

ossutil tables-api create-namespace --table-bucket-arn <table_bucket_arn> --namespace <namespace_name> --endpoint http://<endpoint>
重要

名前空間名とテーブル名にハイフン (-) は使用できません。これらの名前は SQL ステートメントで識別子として使用されるため、代わりにアンダースコア (_) を使用してください。

5. テーブルの作成

Iceberg テーブルは次のいずれかの方法で作成できます。

  • Spark などの別のコンピューティングエンジンを使用して作成します。

  • ossutil を使用して作成します。テーブルスキーマを JSON ファイルに保存し、create-table を呼び出します。

    次のスキーマファイルの例は schema.json という名前で、3 つのフィールドを定義します:

    {
      "iceberg": {
        "schema": {
          "fields": [
            {"name": "event_id", "type": "string", "required": true},
            {"name": "event_time", "type": "string"},
            {"name": "event_type", "type": "string"}
          ]
        }
      }
    }

    スキーマファイルに基づいてテーブルを作成します。

    ossutil tables-api create-table --table-bucket-arn <bucket_arn> --namespace <namespace_name> --name <table_name> --format ICEBERG --metadata file://<file_path> --endpoint http://<endpoint>

方法 2: AWS CLI の使用

OSS Tables は S3 Tables API と互換性があるため、AWS CLI を使用してテーブルバケットを管理することもできます。

1. AWS CLI のインストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

2. 認証情報の設定

aws configure コマンドを実行し、プロンプトに従ってアクセスキー ID、アクセスキーシークレット、およびリージョンを入力します。

3. テーブルバケットの作成

aws s3tables --endpoint http://<endpoint> create-table-bucket --region <region> --name <table_bucket_name>

コマンドが成功すると、出力にテーブルバケットの ARN が含まれます。

4. 名前空間の作成

aws s3tables --endpoint http://<endpoint> create-namespace --table-bucket-arn <table_bucket_arn> --namespace <namespace_name>

5. テーブルの作成

  • Spark などの別のコンピューティングエンジンを使用してテーブルを作成します。

  • AWS CLI を使用して、すべてのパラメーターを create-table.json などの JSON ファイルに保存してから、create-table を呼び出します。

    {
        "tableBucketARN": "<bucket_arn>",
        "namespace": "<namespace_name>",
        "name": "<table_name>",
        "format": "ICEBERG",
        "metadata": {
            "iceberg": {
                "schema": {
                    "fields": [
                         {"name": "event_id", "type": "string","required": true},
                         {"name": "event_time", "type": "string"},
                         {"name": "event_type", "type": "string"}
                    ]
                }
            }
        }
    }
    aws s3tables --endpoint http://<endpoint> create-table --cli-input-json file://<file_path>

6. バックグラウンドメンテナンス タスクの管理

OSS Tables は、ファイルのクリーンアップやコンパクションなど、Iceberg テーブルの自動バックグラウンドメンテナンスをサポートしています。AWS CLI を使用して、これらのメンテナンスタスクをクエリおよび設定できます。

テーブルメンテナンスジョブのステータスのクエリ

aws s3tables get-table-maintenance-job-status \
   --table-bucket-arn="<table_bucket_arn>" \
   --namespace="<namespace_name>" \
   --name="<table_name>" 

バケットレベルのメンテナンスポリシー (ファイルのクリーンアップ) の設定

aws s3tables put-table-bucket-maintenance-configuration \
   --table-bucket-arn "<table_bucket_arn>" \
   --type icebergUnreferencedFileRemoval \
   --value '{"status":"enabled","settings":{"icebergUnreferencedFileRemoval":{"unreferencedDays":4,"nonCurrentDays":10}}}' 

テーブルレベルのメンテナンスポリシー (小規模ファイルのコンパクション) の設定

aws s3tables put-table-maintenance-configuration \
   --table-bucket-arn "<table_bucket_arn>" \
   --type icebergCompaction \
   --namespace "<namespace_name>" \
   --name "<table_name>" \
   --value '{"status":"enabled"}'

ステップ 3: Trino カタログの設定

OSS Tables は Iceberg REST Catalog エンドポイントを提供します。Trino は、Iceberg コネクターを REST Catalog モードで使用して接続します。エンドポイントの形式は次のとおりです。

  • 内部ネットワークhttps://{region}-internal.oss-tables.aliyuncs.com/iceberg

  • パブリックネットワークhttps://{region}.oss-tables.aliyuncs.com/iceberg

OSS Tables は、データプレーンアクセス用の S3 互換エンドポイントを提供します。Trino はこのエンドポイントを使用してテーブルデータの読み書きを行います。エンドポイントの形式は次のとおりです。

  • 内部ネットワークhttps://oss-{region}-internal.aliyuncs.com

  • パブリックネットワークhttps://oss-{region}.aliyuncs.com

カタログプロパティファイルの作成

Trino の etc/catalog/ ディレクトリに、プロパティファイル (たとえば、oss_tables.properties) を作成します:

connector.name=iceberg
iceberg.catalog.type=rest
iceberg.rest-catalog.uri=https://<region>-internal.oss-tables.aliyuncs.com/iceberg
iceberg.rest-catalog.warehouse=<Table Bucket ARN>
iceberg.rest-catalog.security=SIGV4
iceberg.rest-catalog.signing-name=osstables
iceberg.rest-catalog.view-endpoints-enabled=false
fs.hadoop.enabled=false
fs.native-s3.enabled=true
s3.endpoint=https://oss-<region>-internal.aliyuncs.com
s3.region=<region>
s3.aws-access-key=<AccessKey ID>
s3.aws-secret-key=<AccessKey Secret>
s3.path-style-access=true

パラメーター

パラメーター

必須

説明

connector.name

はい

Iceberg コネクタを使用するには、iceberg に設定します。

iceberg.catalog.type

はい

REST ベースのカタログを指定するには、rest に設定します。

iceberg.rest-catalog.uri

はい

REST カタログのエンドポイント URL。形式は次のとおりです。

  • 内部ネットワークhttps://{region}-internal.oss-tables.aliyuncs.com/iceberg

  • パブリックネットワーク: https://{region}.oss-tables.aliyuncs.com/iceberg

iceberg.rest-catalog.warehouse

はい

テーブルバケットの ARN です。形式は acs:osstables:<region>:<alibaba_cloud_account_id>:bucket/<table_bucket_name> です。

iceberg.rest-catalog.security

はい

SigV4 署名認証を有効にするには、SIGV4 に設定します。

iceberg.rest-catalog.signing-name

はい

OSS テーブルの SigV4 署名サービス名である osstables に設定します。

fs.native-s3.enabled

はい

true に設定すると、Hadoop ファイルシステムの代わりに Trino ネイティブ S3 ファイルシステムが有効になります。

fs.hadoop.enabled

はい

Hadoop ファイルシステムを無効にするには、false に設定します。これは、ネイティブ S3 ファイルシステムを使用する場合に必要です。

s3.endpoint

はい

OSS のデータプレーンエンドポイント。形式は次のとおりです。

  • 内部ネットワークhttps://oss-{region}-internal.aliyuncs.com

  • パブリックネットワーク: https://oss-{region}.aliyuncs.com

s3.path-style-access

はい

パス形式アクセスモードを使用するには、true に設定します。

ステップ 4: SQL を使用したデータ管理

Trino を設定して再起動した後、Trino CLI または JDBC クライアントを使用して接続し、標準 SQL で OSS Tables 内のデータを管理できます。

例: テーブルの作成

CREATE TABLE ${catalog}.${namespace}.orders (
    order_id    BIGINT,
    customer    VARCHAR,
    amount      DECIMAL(10,2),
    order_date  DATE,
    created_at  TIMESTAMP(6)
)
WITH (
    format = 'PARQUET',
    partitioning = ARRAY['day(order_date)'],
);

例: データのクエリ

SELECT * FROM ${catalog}.${namespace}.orders limit 10;

権限

RAM ユーザーまたは STS の一時的な認証情報を使用して OSS Tables にアクセスする場合、ID に必要な権限が付与されていることを確認する必要があります。

リソース

  • テーブルバケット ARN: acs:osstables:<region>:<alibaba_cloud_account_id>:bucket/<bucket_name>

  • テーブル ARN: acs:osstables:<region>:<alibaba_cloud_account_id>:bucket/<bucket_name>/table/<table_id>

アクション

次の表に、OSS Tables でサポートされているアクションと、クロスアカウントアクセスが許可されるかどうかを示します。

カテゴリ

アクション

クロスアカウントアクセス

テーブルバケットレベル

oss:CreateTableBucket

不可

oss:GetTableBucket

許可

oss:ListTableBuckets

不可

oss:CreateNamespace

許可

oss:GetNamespace

許可

oss:ListNamespaces

許可

oss:DeleteNamespace

許可

oss:DeleteTableBucket

許可

oss:PutTableBucketPolicy

不可

oss:GetTableBucketPolicy

不可

oss:DeleteTableBucketPolicy

不可

oss:GetTableBucketMaintenanceConfiguration

許可

oss:PutTableBucketMaintenanceConfiguration

許可

oss:PutTableBucketEncryption

不可

oss:GetTableBucketEncryption

不可

oss:DeleteTableBucketEncryption

不可

テーブルレベル

oss:GetTableMaintenanceConfiguration

許可

oss:PutTableMaintenanceConfiguration

許可

oss:PutTablePolicy

不可

oss:GetTablePolicy

不可

oss:DeleteTablePolicy

不可

oss:CreateTable

許可

oss:GetTable

許可

oss:GetTableMetadataLocation

許可

oss:ListTables

許可

oss:RenameTable

許可

oss:UpdateTableMetadataLocation

許可

oss:GetTableData

許可

oss:PutTableData

許可

oss:GetTableEncryption

不可

oss:PutTableEncryption

不可

oss:DeleteTable

許可

Iceberg REST 操作に必要な権限

次の表に、各 Iceberg REST Catalog 操作で要求される OSS アクションを示します。

Iceberg REST 操作

要求される OSS アクション

getConfig

oss:GetTableBucket

listNamespaces

oss:ListNamespaces

createNamespace

oss:CreateNamespace

loadNamespaceMetadata

oss:GetNamespace

dropNamespace

oss:DeleteNamespace

listTables

oss:ListTables

createTable

oss:CreateTableoss:PutTableData

loadTable

oss:GetTableMetadataLocationoss:GetTableData

updateTable

oss:UpdateTableMetadataLocation, oss:PutTableData, oss:GetTableData

dropTable

oss:DeleteTable

renameTable

oss:RenameTable

tableExists

oss:GetTable

namespaceExists

oss:GetNamespace