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

Object Storage Service:テーブルバケットの管理 (Java SDK V2)

最終更新日:Jun 09, 2026

OSS Java SDK V2 を使用して、テーブルバケット、名前空間、および Apache Iceberg テーブルを管理でき、リソースの作成、削除、クエリに加え、それらの暗号化、リソースポリシー、メンテナンス設定の構成も可能です。

注意事項

  • サンプルコードでは、リージョン ID として cn-hangzhou (中国・杭州)を使用しています。この値を実際のリージョンの ID に置き換えてください。

  • サンプルコードでは、環境変数からアクセス認証情報を取得します。設定手順については、「アクセス認証情報の設定」をご参照ください。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数を設定してください。

テーブルバケットの操作

CreateTableBucket

テーブルバケットを作成します。必要に応じて、作成時にサーバー側の暗号化 (SSE) を設定できます。

sseAlgorithm パラメーターには、次の 2 つの値を指定できます。

  • AES256 — SSE-OSS。デフォルトのオプションです。追加コストは発生しません。各オブジェクトは、AES-256 を使用して一意キーで暗号化されます。

  • KMS — SSE-KMS。Key Management Service (KMS) を使用して暗号化キーを制御できます。監査証跡、キーのローテーション、またはクロスアカウントキーアクセスが必要な場合に使用します。

    import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
    import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
    import com.aliyun.sdk.service.oss2.tables.models.*;
    
    public class CreateTableBucketSample {
    
        public static void main(String[] args) throws Exception {
            String region = "cn-hangzhou";
            String name = "my-table-bucket";
            String sseAlgorithm = "AES256";
    
            try (OSSTablesClient client = OSSTablesClient.newBuilder()
                    .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                    .region(region)
                    .build()) {
                CreateTableBucketRequest.Builder requestBuilder = CreateTableBucketRequest.newBuilder()
                        .name(name);
    
                EncryptionConfiguration encryptionConfig = EncryptionConfiguration.newBuilder()
                        .sseAlgorithm(sseAlgorithm)
                        .build();
                requestBuilder.encryptionConfiguration(encryptionConfig);
    
                CreateTableBucketResult result = client.createTableBucket(requestBuilder.build());
    
                System.out.printf("Status code:%d, request id:%s%n",
                        result.statusCode(), result.requestId());
                System.out.printf("Created table bucket with ARN: %s%n", result.arn());
            } catch (Exception e) {
                System.out.println("Error: " + e.getMessage());
            }
        }
    }

テーブルバケットの削除

テーブルバケットを削除します。

警告

テーブルバケットを削除する前に、すべての名前空間を削除する必要があります。名前空間が残っている場合、リクエストは失敗します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class DeleteTableBucketSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            DeleteTableBucketRequest request = DeleteTableBucketRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .build();

            DeleteTableBucketResult result = client.deleteTableBucket(request);

            System.out.printf("ステータスコード: %d、リクエスト ID: %s%n",
                    result.statusCode(), result.requestId());
            System.out.println("テーブルバケットを正常に削除しました。");
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

GetTableBucket

特定のテーブルバケットの詳細を取得します。レスポンスには、ARN、名前、タイプ、所有者アカウント ID、テーブルバケット ID、および作成日時が含まれます。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetTableBucketSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            GetTableBucketResult result = client.getTableBucket(GetTableBucketRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .build());

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブルバケット ARN:%s%n", result.arn());
            System.out.printf("テーブルバケット名:%s%n", result.name());
            System.out.printf("テーブルバケットタイプ:%s%n", result.type());
            System.out.printf("所有者アカウント ID:%s%n", result.ownerAccountId());
            System.out.printf("テーブルバケット ID:%s%n", result.tableBucketId());
            System.out.printf("作成日時:%s%n", result.createdAt());
        } catch (Exception e) {
            System.out.println("エラー:" + e.getMessage());
        }
    }
}

ListTableBuckets

現在のアカウントのすべてのテーブルバケットを一覧表示します。maxBuckets を使用してページサイズを制御し、返される continuationToken を使用して追加の結果をページ分割します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class ListTableBucketsSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        int maxBuckets = 10;

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            ListTableBucketsRequest request = ListTableBucketsRequest.newBuilder()
                    .maxBuckets(maxBuckets)
                    .build();

            ListTableBucketsResult result = client.listTableBuckets(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("継続トークン:%s%n", result.continuationToken());
            System.out.printf("バケット数:%d%n", result.tableBuckets().size());

            for (int i = 0; i < result.tableBuckets().size(); i++) {
                TableBucketSummary bucket = result.tableBuckets().get(i);
                System.out.printf("バケット %d:%n", i + 1);
                System.out.printf("  ARN:%s%n", bucket.arn());
                System.out.printf("  名前:%s%n", bucket.name());
                System.out.printf("  ID:%s%n", bucket.tableBucketId());
                System.out.printf("  所有者アカウント ID:%s%n", bucket.ownerAccountId());
                System.out.printf("  作成日時:%s%n", bucket.createdAt());
            }
        } catch (Exception e) {
            System.out.println("エラー:" + e.getMessage());
        }
    }
}

PutTableBucketEncryption

テーブルバケットのデフォルトのサーバー側の暗号化設定を構成または更新します。この設定は、テーブルレベルで上書きされない限り、バケットに作成されるすべてのテーブルに適用されます。

sseAlgorithm パラメーターには、次の 2 つの値を指定できます:

  • AES256 — AES-256 による SSE-OSS。デフォルト。追加費用なし。

  • KMS — Key Management Service による SSE-KMS。きめ細かいキー管理、キーのローテーション、または使用状況の監査証跡が必要な場合に使用します。kmsKeyArn パラメーターでカスタマーマネージドキーを指定できます。未設定の場合は、デフォルトの KMS キーが使用されます。

    import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
    import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
    import com.aliyun.sdk.service.oss2.tables.models.*;
    
    public class PutTableBucketEncryptionSample {
    
        public static void main(String[] args) throws Exception {
            String region = "cn-hangzhou";
            String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
            String sseAlgorithm = "AES256";
    
            try (OSSTablesClient client = OSSTablesClient.newBuilder()
                    .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                    .region(region)
                    .build()) {
                EncryptionConfiguration encryptionConfig = EncryptionConfiguration.newBuilder()
                        .sseAlgorithm(sseAlgorithm)
                        .build();
    
                PutTableBucketEncryptionRequest request = PutTableBucketEncryptionRequest.newBuilder()
                        .tableBucketARN(tableBucketARN)
                        .encryptionConfiguration(encryptionConfig)
                        .build();
    
                PutTableBucketEncryptionResult result = client.putTableBucketEncryption(request);
    
                System.out.printf("Status code:%d, request id:%s%n",
                        result.statusCode(), result.requestId());
                System.out.printf("Successfully updated table bucket encryption for ARN: %s%n", tableBucketARN);
            } catch (Exception e) {
                System.out.println("Error: " + e.getMessage());
            }
        }
    }

GetTableBucketEncryption

テーブルバケットの暗号化設定を取得します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetTableBucketEncryptionSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            GetTableBucketEncryptionRequest request = GetTableBucketEncryptionRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .build();

            GetTableBucketEncryptionResult result = client.getTableBucketEncryption(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            if (result.encryptionConfiguration() != null) {
                System.out.printf("暗号化アルゴリズム: %s%n", result.encryptionConfiguration().sseAlgorithm());
                System.out.printf("KMS キー ARN: %s%n", result.encryptionConfiguration().kmsKeyArn());
            } else {
                System.out.println("暗号化設定が見つかりませんでした。");
            }
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

DeleteTableBucketEncryption

テーブルバケットの暗号化設定を削除し、デフォルトの OSS マネージド暗号化に戻します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class DeleteTableBucketEncryptionSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            DeleteTableBucketEncryptionRequest request = DeleteTableBucketEncryptionRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .build();

            DeleteTableBucketEncryptionResult result = client.deleteTableBucketEncryption(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.println("暗号化設定を正常に削除しました。");
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

PutTableBucketPolicy

テーブルバケットにリソースポリシーを適用します。このポリシーは、バケット内のすべてのテーブルへのクロスアカウントおよびクロスサービスアクセスを制御します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class PutTableBucketPolicySample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String resourcePolicy = "{\"Version\":\"1\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":[\"oss:*\"],\"Principal\":[\"*\"],\"Resource\":[\"*\"]}]}";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            PutTableBucketPolicyRequest request = PutTableBucketPolicyRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .resourcePolicy(resourcePolicy)
                    .build();

            PutTableBucketPolicyResult result = client.putTableBucketPolicy(request);

            System.out.printf("ステータスコード: %d、リクエスト ID: %s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("ARN: %s のテーブルバケットポリシーを正常に更新しました%n", tableBucketARN);
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

GetTableBucketPolicy

テーブルバケットのリソースポリシーを取得します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetTableBucketPolicySample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            GetTableBucketPolicyRequest request = GetTableBucketPolicyRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .build();

            GetTableBucketPolicyResult result = client.getTableBucketPolicy(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブルバケットのポリシーを取得しました:%s%n", tableBucketARN);
            if (result.resourcePolicy() != null) {
                System.out.printf("ポリシー:%s%n", result.resourcePolicy());
            } else {
                System.out.println("このテーブルバケットにはポリシーが設定されていません。");
            }
        } catch (Exception e) {
            System.out.println("エラー:" + e.getMessage());
        }
    }
}

DeleteTableBucketPolicy

テーブルバケットのリソースポリシーを削除します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class DeleteTableBucketPolicySample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            DeleteTableBucketPolicyRequest request = DeleteTableBucketPolicyRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .build();

            DeleteTableBucketPolicyResult result = client.deleteTableBucketPolicy(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブルバケット ARN のポリシーを正常に削除しました:%s%n", tableBucketARN);
        } catch (Exception e) {
            System.out.println("エラー:" + e.getMessage());
        }
    }
}

PutTableBucketMaintenanceConfiguration

テーブルバケットのメンテナンス構成を設定します。これを使用して、バケットレベルで参照されていないファイルの削除を構成することで、デフォルトでバケット内のすべてのテーブルに設定が適用されるようになります。

type パラメーターの値:

  • icebergUnreferencedFileRemoval — スナップショットによって参照されなくなった Iceberg データファイルとメタデータファイルを削除します。これにより、古いファイルが蓄積してストレージコストが増加するのを防ぎます。

unreferencedDays:参照されていないファイルが削除の対象となるまでの日数 (最小値:1)。

nonCurrentDays:非現行のオブジェクト (スナップショットの有効期限切れによって削除対象としてマークされたオブジェクト) が完全に削除されるまでの日数 (最小値:1)。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class PutTableBucketMaintenanceConfigurationSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String type = "icebergUnreferencedFileRemoval";
        String status = "enabled";
        int unreferencedDays = 3;
        int nonCurrentDays = 3;

        IcebergUnreferencedFileRemovalSettings removalSettings = IcebergUnreferencedFileRemovalSettings.newBuilder()
                .unreferencedDays(unreferencedDays)
                .nonCurrentDays(nonCurrentDays)
                .build();

        TableBucketMaintenanceSettings settings = TableBucketMaintenanceSettings.newBuilder()
                .icebergUnreferencedFileRemoval(removalSettings)
                .build();

        TableBucketMaintenanceConfigurationValue value = TableBucketMaintenanceConfigurationValue.newBuilder()
                .status(status)
                .settings(settings)
                .build();

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            PutTableBucketMaintenanceConfigurationRequest request = PutTableBucketMaintenanceConfigurationRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .type(type)
                    .value(value)
                    .build();

            PutTableBucketMaintenanceConfigurationResult result = client.putTableBucketMaintenanceConfiguration(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブルバケットのメンテナンス構成に成功しました: %s%n", tableBucketARN);
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

GetTableBucketMaintenanceConfiguration

テーブルバケットのメンテナンス構成を取得します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetTableBucketMaintenanceConfigurationSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            GetTableBucketMaintenanceConfigurationRequest request = GetTableBucketMaintenanceConfigurationRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .build();

            GetTableBucketMaintenanceConfigurationResult result = client.getTableBucketMaintenanceConfiguration(request);

            System.out.printf("ステータスコード: %d、リクエスト ID: %s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブルバケット ARN: %s%n", result.tableBucketARN());

            result.configuration().forEach((key, value) -> {
                System.out.printf("構成タイプ: %s、ステータス: %s%n", key, value.status());
            });
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

名前空間の操作

名前空間の作成

テーブルバケット内に名前空間を作成します。名前空間は、関連するテーブルを論理的にグループ化し、テーブルを作成する前に必要です。

説明

名前空間を作成する前に、テーブルバケットが存在する必要があります。まず CreateTableBucket を使用してテーブルバケットを作成してください。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

import java.util.Arrays;
import java.util.List;

public class CreateNamespaceSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            List<String> namespaces = Arrays.asList("my-namespace");

            CreateNamespaceRequest request = CreateNamespaceRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespaces)
                    .build();

            CreateNamespaceResult result = client.createNamespace(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブルバケット %s に名前空間が正常に作成されました%n", tableBucketARN);
        } catch (Exception e) {
            System.out.println("エラー:" + e.getMessage());
        }
    }
}

名前空間の削除

名前空間を削除します。

警告

テーブルが含まれている名前空間は削除できません。まず、名前空間内のすべてのテーブルを削除してください。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class DeleteNamespaceSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            DeleteNamespaceRequest request = DeleteNamespaceRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .build();

            DeleteNamespaceResult result = client.deleteNamespace(request);

            System.out.printf("Status code:%d, request ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("Successfully deleted namespace: %s from table bucket: %s%n", namespace, tableBucketARN);
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

GetNamespace

名前空間の詳細を取得します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetNamespaceSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            GetNamespaceRequest request = GetNamespaceRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .build();

            GetNamespaceResult result = client.getNamespace(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブルバケット %s から名前空間 %s の取得に成功しました%n", tableBucketARN, result.namespaceId());
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

ListNamespaces

テーブルバケット内の名前空間を一覧表示します。maxNamespaces を使用してページサイズを制御し、返された continuationToken を使用して追加の結果をページングします。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class ListNamespacesSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        int maxNamespaces = 10;

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            ListNamespacesRequest request = ListNamespacesRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .maxNamespaces(maxNamespaces)
                    .build();

            ListNamespacesResult result = client.listNamespaces(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("継続トークン: %s%n", result.continuationToken());

            for (int i = 0; i < result.namespaces().size(); i++) {
                NamespaceSummary ns = result.namespaces().get(i);
                if (ns.namespace() != null && !ns.namespace().isEmpty()) {
                    System.out.printf("名前空間 %d: %s (ID: %s)%n", i+1, ns.namespace().get(0), ns.namespaceId());
                } else {
                    System.out.printf("名前空間 %d: (名前空間名なし) (ID: %s)%n", i+1, ns.namespaceId());
                }
            }
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

テーブル操作

CreateTable

スキーマ、パーティション仕様、および任意の暗号化設定を指定して Apache Iceberg テーブルを作成します。

前提条件:テーブルを作成する前に、テーブルバケットと名前空間が存在する必要があります。CreateTableBucketCreateNamespace を使用して作成してください。

format パラメーターは iceberg である必要があります。スキーマは、フィールド名、タイプ (longstringtimestamptz など)、および各フィールドが必須かどうかを定義します。パーティション仕様は、ソースフィールドをパーティション変換 (例:identityyearmonthdayhourbuckettruncate) にマッピングします。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

import java.util.ArrayList;
import java.util.List;

public class CreateTableSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String name = "my-table";
        String format = "iceberg";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            // スキーマフィールドを定義します
            List<SchemaField> fields = new ArrayList<>();
            fields.add(SchemaField.newBuilder()
                .name("id")
                .type("long")
                .required(true)
                .build());
            fields.add(SchemaField.newBuilder()
                .name("name")
                .type("string")
                .required(false)
                .build());
            fields.add(SchemaField.newBuilder()
                .name("ts")
                .type("timestamptz")
                .required(false)
                .build());

            // スキーマを構築します
            IcebergSchema icebergSchema = IcebergSchema.newBuilder()
                .fields(fields)
                .build();

            // パーティション仕様を定義します。"name" フィールド (sourceId=2) をソースとして、"region" という名前のパーティションフィールドを identity 変換で作成します。
            IcebergPartitionField partitionField = IcebergPartitionField.newBuilder()
                .sourceId(2)
                .transform("identity")
                .name("region")
                .fieldId(1001)
                .build();
            List<IcebergPartitionField> partitionFields = new ArrayList<>();
            partitionFields.add(partitionField);
            IcebergPartitionSpec partitionSpec = IcebergPartitionSpec.newBuilder()
                .specId(0)
                .fields(partitionFields)
                .build();

            // Iceberg メタデータを組み立てます
            IcebergMetadata icebergMetadata = IcebergMetadata.newBuilder()
                .schema(icebergSchema)
                .partitionSpec(partitionSpec)
                .build();

            TableMetadata metadata = TableMetadata.newBuilder()
                .iceberg(icebergMetadata)
                .build();

            // 任意:サーバー側の暗号化を設定します
            EncryptionConfiguration encryptionConfig = EncryptionConfiguration.newBuilder()
                .sseAlgorithm("AES256")
                .build();

            CreateTableRequest request = CreateTableRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(name)
                    .format(format)
                    .metadata(metadata)
                    .encryptionConfiguration(encryptionConfig)
                    .build();

            CreateTableResult result = client.createTable(request);

            System.out.printf("Status code:%d, request id:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("Created table with ARN: %s%n", result.tableARN());
            System.out.printf("Version token: %s%n", result.versionToken());
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

DeleteTable

テーブルを削除します。

警告

テーブルの削除は永続的で、元に戻すことはできません。テーブル内のすべてのデータが削除されます。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class DeleteTableSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String tableName = "my-table";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            DeleteTableRequest request = DeleteTableRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(tableName)
                    .build();

            DeleteTableResult result = client.deleteTable(request);

            System.out.printf("ステータスコード: %d、リクエスト ID: %s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("バケット %s からテーブル %s/%s を正常に削除しました%n",
                    tableBucketARN, namespace, tableName);
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

GetTable

テーブルの詳細を取得します。テーブルバケット ARN、名前空間、名前でクエリするか、テーブル ARN を直接指定してクエリします。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetTableSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String tableName = "my-table";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            // メソッド 1:テーブルバケット ARN、名前空間、名前でクエリ
            GetTableRequest request = GetTableRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(tableName)
                    .build();

            // メソッド 2:テーブル ARN でクエリ
            // GetTableRequest request = GetTableRequest.newBuilder()
            //         .tableARN("acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket/table/table-id")
            //         .build();

            GetTableResult result = client.getTable(request);

            System.out.printf("Status code:%d, request ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("Table name: %s%n", result.name());
            System.out.printf("Table ARN: %s%n", result.tableARN());
            System.out.printf("Format: %s%n", result.format());
            System.out.printf("Created by: %s%n", result.createdBy());
            System.out.printf("Created at: %s%n", result.createdAt());
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

ListTables

名前空間内のすべてのテーブルを一覧表示します。 maxTables でページサイズを制御し、返された continuationToken で追加の結果をページ分割して取得します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class ListTablesSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        int maxTables = 10;

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            ListTablesRequest request = ListTablesRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .maxTables(maxTables)
                    .build();

            ListTablesResult result = client.listTables(request);

            System.out.printf("Status code:%d, request ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("Continuation token: %s%n", result.continuationToken());

            if (result.tables() != null) {
                System.out.printf("Number of tables: %d%n", result.tables().size());
                for (int i = 0; i < result.tables().size(); i++) {
                    TableSummary table = result.tables().get(i);
                    System.out.printf("Table %d:%n", i + 1);
                    System.out.printf("  Name: %s%n", table.name());
                    System.out.printf("  Namespace: %s%n", table.namespace());
                    System.out.printf("  ARN: %s%n", table.tableARN());
                    System.out.printf("  Type: %s%n", table.type());
                    System.out.printf("  Created at: %s%n", table.createdAt());
                    System.out.printf("  Modified at: %s%n", table.modifiedAt());
                }
            } else {
                System.out.println("No tables found.");
            }
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

テーブル名の変更

テーブルの名前を変更するか、同じテーブルバケット内の別の名前空間に移動します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class RenameTableSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String name = "my-table";
        String newName = "my-table-renamed";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            RenameTableRequest request = RenameTableRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(name)
                    .newName(newName)
                    .build();

            RenameTableResult result = client.renameTable(request);

            System.out.printf("Status code:%d, request ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("Successfully renamed table from %s/%s to %s/%s%n",
                    namespace, name, namespace, newName);
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

GetTableMetadataLocation

テーブルの Iceberg メタデータファイルのロケーション、現在のバージョン トークン、およびウェアハウスロケーションを取得します。バージョン トークンは、UpdateTableMetadataLocation を呼び出す際に必要です。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetTableMetadataLocationSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String name = "my-table";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            GetTableMetadataLocationRequest request = GetTableMetadataLocationRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(name)
                    .build();

            GetTableMetadataLocationResult result = client.getTableMetadataLocation(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("メタデータロケーション:%s%n", result.metadataLocation());
            System.out.printf("バージョントークン:%s%n", result.versionToken());
            System.out.printf("ウェアハウスロケーション:%s%n", result.warehouseLocation());
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

UpdateTableMetadataLocation

テーブルの Iceberg メタデータファイルのロケーションを更新します。クエリエンジンおよび Iceberg カタログ統合は、書き込みオペレーション後に新しいメタデータをコミットするためにこれを使用します。

versionToken はオプティミスティック同時実行制御を提供します。 GetTableMetadataLocation または前回の UpdateTableMetadataLocation 呼び出しによって返されたトークンを指定します。トークンが現在の状態と一致しない場合、リクエストは失敗し、競合する同時書き込みを防ぎます。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class UpdateTableMetadataLocationSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String name = "my-table";
        String versionToken = "your-version-token";
        String metadataLocation = "oss://warehouse/metadata/v1.metadata.json";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            UpdateTableMetadataLocationRequest request = UpdateTableMetadataLocationRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(name)
                    .versionToken(versionToken)
                    .metadataLocation(metadataLocation)
                    .build();

            UpdateTableMetadataLocationResult result = client.updateTableMetadataLocation(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブル %s のテーブルメタデータロケーションを正常に更新しました%n", name);
            System.out.printf("新しいメタデータロケーション:%s%n", result.metadataLocation());
            System.out.printf("新しいバージョントークン:%s%n", result.versionToken());
        } catch (Exception e) {
            System.out.println("エラー:" + e.getMessage());
        }
    }
}

テーブル暗号化の取得

テーブルの暗号化設定を取得します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetTableEncryptionSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String name = "my-table";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            GetTableEncryptionRequest request = GetTableEncryptionRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(name)
                    .build();

            GetTableEncryptionResult result = client.getTableEncryption(request);

            System.out.printf("ステータスコード: %d, リクエスト ID: %s%n",
                    result.statusCode(), result.requestId());
            if (result.encryptionConfiguration() != null) {
                System.out.printf("SSE アルゴリズム: %s%n", result.encryptionConfiguration().sseAlgorithm());
                System.out.printf("KMS キー ARN: %s%n", result.encryptionConfiguration().kmsKeyArn());
            }
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

PutTablePolicy

テーブルのリソースポリシーを設定します。テーブルレベルのポリシーを使用して、特定のアカウントに対する特定のアクションの制限など、個々のテーブルに対するきめ細かなアクセス制御を行うことができます。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class PutTablePolicySample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String name = "my-table";
        String resourcePolicy = "{\"Version\":\"1\",\"Statement\":[{\"Effect\":\"Deny\",\"Action\":[\"oss:GetTable\"],\"Principal\":[\"1234567890\"],\"Resource\":[\"acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket/table/*\"]}]}";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            PutTablePolicyRequest request = PutTablePolicyRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(name)
                    .resourcePolicy(resourcePolicy)
                    .build();

            PutTablePolicyResult result = client.putTablePolicy(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブル %s/%s のテーブルポリシーを正常に設定しました%n", namespace, name);
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

GetTablePolicy

テーブルのリソースポリシーを取得します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetTablePolicySample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String name = "my-table";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            GetTablePolicyRequest request = GetTablePolicyRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(name)
                    .build();

            GetTablePolicyResult result = client.getTablePolicy(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("リソースポリシー: %s%n", result.resourcePolicy());
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

DeleteTablePolicy

テーブルポリシーを削除します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class DeleteTablePolicySample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String name = "my-table";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            DeleteTablePolicyRequest request = DeleteTablePolicyRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(name)
                    .build();

            DeleteTablePolicyResult result = client.deleteTablePolicy(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブル %s/%s のテーブルポリシーを正常に削除しました%n", namespace, name);
        } catch (Exception e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

PutTableMaintenanceConfiguration

テーブルのメンテナンス設定を行います。テーブルレベルの設定は、バケットレベルのデフォルトをオーバーライドします。

type パラメーターの値:

  • icebergCompaction — 小さな Iceberg データファイルをより大きなファイルにマージして、クエリパフォーマンスを向上させ、ファイル数のオーバーヘッドを削減します。

  • icebergSnapshotManagement — 古い Iceberg スナップショットを有効期限切れにして削除し、メタデータの増加を制御します。

  • icebergUnreferencedFileRemoval — どのスナップショットからも参照されなくなったデータファイルとメタデータファイルを削除します。

コンパクション戦略 (IcebergCompactionSettings.strategy で設定):

  • auto (デフォルト) — ソート順が定義されているテーブルには sort を、それ以外のすべてのテーブルには binpack を自動的に選択します。

  • binpack — 小さなファイルをより大きなファイルに結合し、保留中の行レベルの削除を適用します。

  • sort — 指定された列でデータを整理して、フィルター条件を含むクエリを高速化します。クエリが特定の列で頻繁にフィルタリングを行う場合に使用します。

  • z-order — 効率的な多次元クエリを実現します。

    import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
    import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
    import com.aliyun.sdk.service.oss2.tables.models.*;
    
    public class PutTableMaintenanceConfigurationSample {
    
        public static void main(String[] args) throws Exception {
            String region = "cn-hangzhou";
            String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
            String namespace = "my-namespace";
            String name = "my-table";
            String type = "icebergCompaction";
            String status = "enabled";
            int targetFileSizeMB = 256;
            String strategy = "auto";
    
            try (OSSTablesClient client = OSSTablesClient.newBuilder()
                    .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                    .region(region)
                    .build()) {
                IcebergCompactionSettings compactionSettings = IcebergCompactionSettings.newBuilder()
                        .targetFileSizeMB(targetFileSizeMB)
                        .strategy(strategy)
                        .build();
                TableMaintenanceSettings settings = TableMaintenanceSettings.newBuilder()
                        .icebergCompaction(compactionSettings)
                        .build();
    
                TableMaintenanceConfigurationValue value = TableMaintenanceConfigurationValue.newBuilder()
                        .status(status)
                        .settings(settings)
                        .build();
    
                PutTableMaintenanceConfigurationRequest request = PutTableMaintenanceConfigurationRequest.newBuilder()
                        .tableBucketARN(tableBucketARN)
                        .namespace(namespace)
                        .name(name)
                        .type(type)
                        .value(value)
                        .build();
    
                PutTableMaintenanceConfigurationResult result = client.putTableMaintenanceConfiguration(request);
    
                System.out.printf("Status code:%d, request id:%s%n",
                        result.statusCode(), result.requestId());
                System.out.printf("Successfully put table maintenance configuration for table: %s/%s, type: %s%n", namespace, name, type);
            } catch (Exception e) {
                System.out.println("Error: " + e.getMessage());
            }
        }
    }

GetTableMaintenanceConfiguration

テーブルのメンテナンス構成を取得します。レスポンスには、メンテナンスタイプ (icebergCompactionicebergSnapshotManagementicebergUnreferencedFileRemoval) をキーとするマップが含まれ、それぞれにステータスと設定が含まれます。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetTableMaintenanceConfigurationSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String name = "my-table";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            GetTableMaintenanceConfigurationRequest request = GetTableMaintenanceConfigurationRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(name)
                    .build();

            GetTableMaintenanceConfigurationResult result = client.getTableMaintenanceConfiguration(request);

            System.out.printf("ステータスコード:%d、リクエスト ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("テーブル ARN:%s%n", result.tableARN());

            if (result.configuration() != null && !result.configuration().isEmpty()) {
                System.out.println("メンテナンス構成:");
                result.configuration().forEach((type, config) -> {
                    System.out.printf("  タイプ:%s、ステータス:%s%n", type, config.status());
                    if (config.settings() != null) {
                        if (config.settings().icebergCompaction() != null) {
                            System.out.printf("    コンパクション - TargetFileSizeMB:%d、Strategy:%s%n",
                                    config.settings().icebergCompaction().targetFileSizeMB(),
                                    config.settings().icebergCompaction().strategy());
                        }
                        if (config.settings().icebergSnapshotManagement() != null) {
                            System.out.printf("    スナップショット管理 - MinSnapshotsToKeep:%d、MaxSnapshotAgeHours:%d%n",
                                    config.settings().icebergSnapshotManagement().minSnapshotsToKeep(),
                                    config.settings().icebergSnapshotManagement().maxSnapshotAgeHours());
                        }
                        if (config.settings().icebergUnreferencedFileRemoval() != null) {
                            System.out.println("    未参照ファイル削除が有効です。");
                        }
                    }
                });
            } else {
                System.out.println("メンテナンス構成が見つかりませんでした。");
            }
        } catch (Exception e) {
            System.out.println("エラー:" + e.getMessage());
        }
    }
}

GetTableMaintenanceJobStatus

テーブルのメンテナンスジョブのステータスを取得します。これを使用して、コンパクション、スナップショット管理、または参照されていないファイルの削除が正常に実行されたかどうかを確認し、障害を診断します。

import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.tables.OSSTablesClient;
import com.aliyun.sdk.service.oss2.tables.models.*;

public class GetTableMaintenanceJobStatusSample {

    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String tableBucketARN = "acs:osstables:cn-hangzhou:1234567890:bucket/my-table-bucket";
        String namespace = "my-namespace";
        String name = "my-table";

        try (OSSTablesClient client = OSSTablesClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region(region)
                .build()) {
            GetTableMaintenanceJobStatusRequest request = GetTableMaintenanceJobStatusRequest.newBuilder()
                    .tableBucketARN(tableBucketARN)
                    .namespace(namespace)
                    .name(name)
                    .build();

            GetTableMaintenanceJobStatusResult result = client.getTableMaintenanceJobStatus(request);

            System.out.printf("Status code:%d, request ID:%s%n",
                    result.statusCode(), result.requestId());
            System.out.printf("Table ARN: %s%n", result.tableARN());

            if (result.jobStatus() != null && !result.jobStatus().isEmpty()) {
                System.out.println("Maintenance job status:");
                result.jobStatus().forEach((type, status) -> {
                    System.out.printf("  Type: %s, Status: %s%n", type, status.status());
                    if (status.lastRunTimestamp() != null) {
                        System.out.printf("    Last run timestamp: %s%n", status.lastRunTimestamp());
                    }
                    if (status.failureMessage() != null && !status.failureMessage().isEmpty()) {
                        System.out.printf("    Failure message: %s%n", status.failureMessage());
                    }
                });
            } else {
                System.out.println("No maintenance job status found.");
            }
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}