Utilisez le SDK Java OSS V2 pour gérer les compartiments de table, les namespaces et les tables Apache Iceberg. Cela inclut la création, la suppression et l'interrogation des ressources, ainsi que la configuration de leur chiffrement, de leurs politiques de ressource et de leurs paramètres de maintenance.
Notes d'utilisation
L'exemple de code utilise l'ID de région
cn-hangzhou(Chine, Hangzhou) à titre d'exemple. Remplacez cette valeur par l'ID de votre région réelle.Les exemples récupèrent les identifiants d'accès à partir des variables d'environnement. Pour obtenir des instructions de configuration, consultez la rubrique Configurer les identifiants d'accès. Avant d'exécuter l'exemple de code, définissez les variables d'environnement
OSS_ACCESS_KEY_IDetOSS_ACCESS_KEY_SECRET.
Opérations sur les compartiments de table
CreateTableBucket
Crée un compartiment de table. Vous pouvez éventuellement configurer le chiffrement côté serveur (SSE) lors de la création.
Le paramètre sseAlgorithm accepte deux valeurs :
AES256— SSE-OSS. Il s'agit de l'option par défaut. Aucun coût supplémentaire n'est appliqué ; chaque objet est chiffré avec une clé unique à l'aide d'AES-256.-
KMS— SSE-KMS. Vous permet de contrôler les clés de chiffrement via Key Management Service (KMS). Utilisez cette option si vous avez besoin de pistes d'audit, de rotation des clés ou d'un accès aux clés entre comptes.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()); } } }
Supprimer un compartiment de table
Supprime un compartiment de table.
Le compartiment de table ne doit contenir aucun namespace avant sa suppression. Supprimez tous les namespaces au préalable, sinon la requête échouera.
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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.println("Successfully deleted table bucket.");
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
GetTableBucket
Récupère les détails d'un compartiment de table spécifique. La réponse inclut l'ARN, le nom, le type, l'ID du compte propriétaire, l'ID du compartiment et l'heure de création.
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("Status code:%d, request ID:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Table bucket ARN: %s%n", result.arn());
System.out.printf("Table bucket name: %s%n", result.name());
System.out.printf("Table bucket type: %s%n", result.type());
System.out.printf("Owner account ID: %s%n", result.ownerAccountId());
System.out.printf("Table bucket ID: %s%n", result.tableBucketId());
System.out.printf("Creation time: %s%n", result.createdAt());
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
ListTableBuckets
Répertorie tous les compartiments de table du compte actuel. Utilisez maxBuckets pour contrôler la taille de la page et le continuationToken renvoyé pour paginer les résultats supplémentaires.
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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Continuation token: %s%n", result.continuationToken());
System.out.printf("Number of buckets: %d%n", result.tableBuckets().size());
for (int i = 0; i < result.tableBuckets().size(); i++) {
TableBucketSummary bucket = result.tableBuckets().get(i);
System.out.printf("Bucket %d:%n", i + 1);
System.out.printf(" ARN: %s%n", bucket.arn());
System.out.printf(" Name: %s%n", bucket.name());
System.out.printf(" ID: %s%n", bucket.tableBucketId());
System.out.printf(" Owner account ID: %s%n", bucket.ownerAccountId());
System.out.printf(" Created at: %s%n", bucket.createdAt());
}
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
PutTableBucketEncryption
Définit ou met à jour la configuration de chiffrement côté serveur par défaut pour un compartiment de table. Cette configuration s'applique à toutes les tables créées dans le compartiment, sauf si elle est remplacée au niveau de la table.
Le paramètre sseAlgorithm accepte deux valeurs :
AES256— SSE-OSS utilisant AES-256. Il s'agit de l'option par défaut ; aucun coût supplémentaire n'est appliqué.-
KMS— SSE-KMS utilisant Key Management Service. Utilisez cette option lorsque vous avez besoin d'une gestion fine des clés, d'une rotation des clés ou de pistes d'audit d'utilisation. DéfinissezkmsKeyArnpour spécifier une clé gérée par le client ; laissez ce paramètre non défini pour utiliser la clé KMS par défaut.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
Récupère la configuration de chiffrement d'un compartiment de table.
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("Status code:%d, request ID:%s%n",
result.statusCode(), result.requestId());
if (result.encryptionConfiguration() != null) {
System.out.printf("Encryption algorithm: %s%n", result.encryptionConfiguration().sseAlgorithm());
System.out.printf("KMS key ARN: %s%n", result.encryptionConfiguration().kmsKeyArn());
} else {
System.out.println("No encryption configuration found.");
}
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
DeleteTableBucketEncryption
Supprime la configuration de chiffrement d'un compartiment de table, revenant ainsi au chiffrement géré par OSS par défaut.
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("Status code:%d, request ID:%s%n",
result.statusCode(), result.requestId());
System.out.println("Encryption configuration deleted successfully.");
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
PutTableBucketPolicy
Applique une politique de ressource à un compartiment de table. La politique contrôle l'accès intercomptes et interservices à toutes les tables du compartiment.
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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Successfully updated table bucket policy for ARN: %s%n", tableBucketARN);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
GetTableBucketPolicy
Récupère la politique de ressource d'un compartiment de table.
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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Retrieved policy for table bucket: %s%n", tableBucketARN);
if (result.resourcePolicy() != null) {
System.out.printf("Policy: %s%n", result.resourcePolicy());
} else {
System.out.println("No policy set for this table bucket.");
}
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
DeleteTableBucketPolicy
Supprime la politique de ressource d'un compartiment de table.
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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Successfully deleted policy for table bucket ARN: %s%n", tableBucketARN);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
PutTableBucketMaintenanceConfiguration
Définit la configuration de maintenance d'un compartiment de table. Utilisez cette fonction pour configurer la suppression des fichiers non référencés au niveau du compartiment, afin que le paramètre s'applique par défaut à toutes les tables du compartiment.
Valeurs du paramètre type :
icebergUnreferencedFileRemoval— Supprime les fichiers de données et les fichiers de métadonnées Iceberg qui ne sont plus référencés par aucun snapshot. Cela empêche l'accumulation de fichiers obsolètes et l'augmentation des coûts de stockage.
unreferencedDays : Nombre de jours avant qu'un fichier non référencé ne soit éligible à la suppression (minimum : 1).
nonCurrentDays : Nombre de jours avant qu'un objet non actuel (marqué pour suppression par expiration du snapshot) ne soit définitivement supprimé (minimum : 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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Successfully configured maintenance for table bucket: %s%n", tableBucketARN);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
GetTableBucketMaintenanceConfiguration
Récupère la configuration de maintenance d'un compartiment de table.
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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Table bucket ARN: %s%n", result.tableBucketARN());
result.configuration().forEach((key, value) -> {
System.out.printf("Configuration type: %s, Status: %s%n", key, value.status());
});
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Opérations sur les namespaces
CreateNamespace
Crée un namespace dans un compartiment de table. Un namespace regroupe logiquement des tables connexes et est requis avant la création de toute table.
Un compartiment de table doit exister avant de créer un namespace. Créez d'abord le compartiment de table à l'aide de 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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Successfully created namespace(s) in table bucket: %s%n", tableBucketARN);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Supprimer un namespace
Supprime un namespace.
Le namespace ne doit contenir aucune table avant sa suppression. Supprimez d'abord toutes les tables du namespace.
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
Récupère les détails d'un namespace.
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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Successfully retrieved namespace: %s from table bucket: %s%n", result.namespaceId(), tableBucketARN);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
ListNamespaces
Répertorie les namespaces d'un compartiment de table. Utilisez maxNamespaces pour contrôler la taille de la page et le continuationToken renvoyé pour paginer les résultats supplémentaires.
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("Status code:%d, request ID:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Continuation token: %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("Namespace %d: %s (ID: %s)%n", i+1, ns.namespace().get(0), ns.namespaceId());
} else {
System.out.printf("Namespace %d: (no namespace name) (ID: %s)%n", i+1, ns.namespaceId());
}
}
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Opérations sur les tables
CreateTable
Crée une table Apache Iceberg avec un schéma, une spécification de partition et une configuration de chiffrement facultative.
Prérequis : un compartiment de table (table bucket) et un namespace doivent exister avant la création d'une table. Créez-les à l'aide des méthodes CreateTableBucket et CreateNamespace.
Le paramètre format doit être défini sur iceberg. Le schéma définit les noms des champs, leurs types (long, string, timestamptz, etc.) et indique si chaque champ est obligatoire. La spécification de partition associe un champ source à une transformation de partition (par exemple, identity, year, month, day, hour, bucket, truncate).
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()) {
// Define schema fields
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());
// Build schema
IcebergSchema icebergSchema = IcebergSchema.newBuilder()
.fields(fields)
.build();
// Define partition spec (partition by the "name" field, sourceId=2, using identity transform)
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();
// Assemble Iceberg metadata
IcebergMetadata icebergMetadata = IcebergMetadata.newBuilder()
.schema(icebergSchema)
.partitionSpec(partitionSpec)
.build();
TableMetadata metadata = TableMetadata.newBuilder()
.iceberg(icebergMetadata)
.build();
// Optional: configure server-side encryption
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
Supprime une table.
La suppression d'une table est définitive et irréversible. Toutes les données contenues dans la table sont supprimées.
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("Status code:%d, request ID:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Successfully deleted table: %s/%s from bucket: %s%n",
namespace, tableName, tableBucketARN);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
GetTable
Récupère les détails d'une table. Effectuez la requête en utilisant l'ARN du compartiment de table, le namespace et le nom, ou directement via l'ARN de la table.
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()) {
// Method 1: query by table bucket ARN, namespace, and name
GetTableRequest request = GetTableRequest.newBuilder()
.tableBucketARN(tableBucketARN)
.namespace(namespace)
.name(tableName)
.build();
// Method 2: query by table 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
Répertorie toutes les tables d'un namespace. Utilisez le paramètre maxTables pour contrôler la taille des pages et le jeton continuationToken renvoyé pour paginer les résultats supplémentaires.
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());
}
}
}
RenameTable
Renomme une table ou la déplace vers un autre namespace au sein du même compartiment de table.
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
Récupère l'emplacement du fichier de métadonnées Iceberg d'une table, ainsi que le jeton de version actuel et l'emplacement du warehouse. Le jeton de version est requis lors de l'appel à la méthode 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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Metadata location: %s%n", result.metadataLocation());
System.out.printf("Version token: %s%n", result.versionToken());
System.out.printf("Warehouse location: %s%n", result.warehouseLocation());
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
UpdateTableMetadataLocation
Met à jour l'emplacement du fichier de métadonnées Iceberg d'une table. Les moteurs de requête et les intégrations de catalogue Iceberg utilisent cette fonction pour valider les nouvelles métadonnées après les opérations d'écriture.
Le paramètre versionToken assure un contrôle de concurrence optimiste : fournissez le jeton renvoyé par la méthode GetTableMetadataLocation ou par l'appel précédent à UpdateTableMetadataLocation. La requête échoue si le jeton ne correspond pas à l'état actuel, ce qui empêche les écritures concurrentes conflictuelles.
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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Successfully updated table metadata location for table: %s%n", name);
System.out.printf("New metadata location: %s%n", result.metadataLocation());
System.out.printf("New version token: %s%n", result.versionToken());
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
GetTableEncryption
Récupère la configuration de chiffrement d'une table.
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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
if (result.encryptionConfiguration() != null) {
System.out.printf("SSE algorithm: %s%n", result.encryptionConfiguration().sseAlgorithm());
System.out.printf("KMS key ARN: %s%n", result.encryptionConfiguration().kmsKeyArn());
}
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
PutTablePolicy
Définit la politique de ressource pour une table. Utilisez les politiques au niveau de la table pour un contrôle d'accès granulaire sur des tables individuelles, par exemple pour restreindre certaines actions à un compte spécifique.
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:osstable:cn-hangzhou:1234567890:bucket/demo-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("Status code:%d, request ID:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Successfully put table policy for table: %s/%s%n", namespace, name);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
GetTablePolicy
Récupère la politique de ressource d'une table.
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("Status code:%d, request ID:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Resource policy: %s%n", result.resourcePolicy());
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
DeleteTablePolicy
Supprime la politique de ressource d'une table.
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("Status code:%d, request ID:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Successfully deleted table policy for table: %s/%s%n", namespace, name);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
PutTableMaintenanceConfiguration
Définit la configuration de maintenance d'une table. Les paramètres au niveau de la table remplacent les valeurs par défaut définies au niveau du compartiment.
Valeurs possibles pour le paramètre type :
icebergCompaction— Fusionne les petits fichiers de données Iceberg en fichiers plus volumineux afin d'améliorer les performances des requêtes et de réduire la surcharge liée au nombre de fichiers.icebergSnapshotManagement— Expire et supprime les anciens snapshots Iceberg pour contrôler la croissance des métadonnées.icebergUnreferencedFileRemoval— Supprime les fichiers de données et de métadonnées qui ne sont plus référencés par aucun snapshot.
Stratégies de compaction (définies via IcebergCompactionSettings.strategy) :
auto(par défaut) — Sélectionne automatiquementsortpour les tables disposant d'un ordre de tri défini, etbinpackpour toutes les autres.binpack— Combine les petits fichiers en fichiers plus grands, en appliquant les suppressions au niveau des lignes en attente.sort— Organise les données selon les colonnes spécifiées pour accélérer les requêtes filtrées. À utiliser lorsque les requêtes filtrent fréquemment sur des colonnes spécifiques.-
z-order— Combine plusieurs attributs en une clé de tri scalaire pour des requêtes multidimensionnelles efficaces.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
Récupère la configuration de maintenance d'une table. La réponse contient une map dont les clés correspondent aux types de maintenance (icebergCompaction, icebergSnapshotManagement, icebergUnreferencedFileRemoval), chacune associée à son statut et à ses paramètres.
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("Status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("Table ARN: %s%n", result.tableARN());
if (result.configuration() != null && !result.configuration().isEmpty()) {
System.out.println("Maintenance configurations:");
result.configuration().forEach((type, config) -> {
System.out.printf(" Type: %s, Status: %s%n", type, config.status());
if (config.settings() != null) {
if (config.settings().icebergCompaction() != null) {
System.out.printf(" Compaction - TargetFileSizeMB: %d, Strategy: %s%n",
config.settings().icebergCompaction().targetFileSizeMB(),
config.settings().icebergCompaction().strategy());
}
if (config.settings().icebergSnapshotManagement() != null) {
System.out.printf(" Snapshot management - MinSnapshotsToKeep: %d, MaxSnapshotAgeHours: %d%n",
config.settings().icebergSnapshotManagement().minSnapshotsToKeep(),
config.settings().icebergSnapshotManagement().maxSnapshotAgeHours());
}
}
});
} else {
System.out.println("No maintenance configuration found.");
}
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
GetTableMaintenanceJobStatus
Récupère le statut des tâches de maintenance d'une table. Utilisez cette méthode pour vérifier si la compaction, la gestion des snapshots ou la suppression des fichiers non référencés s'est déroulée avec succès, et pour diagnostiquer les échecs.
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());
}
}
}