Use o OSS Java SDK V2 para gerenciar table buckets, namespaces e tabelas Apache Iceberg. Isso inclui criar, excluir e consultar recursos, além de configurar criptografia, políticas de recursos e definições de manutenção.
Observações de uso
O código de exemplo usa o ID da região
cn-hangzhou(China, Hangzhou). Substitua esse valor pelo ID da sua região real.Os exemplos obtêm credenciais de acesso de variáveis de ambiente. Para instruções de configuração, consulte Configurar credenciais de acesso. Antes de executar o código de exemplo, defina as variáveis de ambiente
OSS_ACCESS_KEY_IDeOSS_ACCESS_KEY_SECRET.
Operações de table bucket
CreateTableBucket
Crie um table bucket. Opcionalmente, configure a criptografia no lado do servidor (SSE) durante a criação.
O parâmetro sseAlgorithm aceita dois valores:
AES256— SSE-OSS. Opção padrão. Sem custo adicional; cada objeto é criptografado com uma chave exclusiva usando AES-256.-
KMS— SSE-KMS. Oferece controle sobre as chaves de criptografia por meio do Key Management Service (KMS). Recomendado quando são necessárias trilhas de auditoria, rotação de chaves ou acesso a chaves entre contas.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()); } } }
Excluir table bucket
Exclua um table bucket.
O table bucket não deve conter namespaces antes da exclusão. Exclua todos os namespaces primeiro; caso contrário, a solicitação falhará.
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
Recupera detalhes de um table bucket específico. A resposta inclui o ARN, nome, tipo, ID da conta proprietária, ID do bucket e hora de criação.
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
Lista todos os table buckets na conta atual. Use maxBuckets para controlar o tamanho da página e o continuationToken retornado para paginar resultados adicionais.
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
Defina ou atualize a configuração padrão de criptografia no lado do servidor para um table bucket. Essa configuração aplica-se a todas as tabelas criadas no bucket, a menos que seja substituída no nível da tabela.
O parâmetro sseAlgorithm aceita dois valores:
AES256— SSE-OSS usando AES-256. Padrão; sem custo adicional.-
KMS— SSE-KMS usando Key Management Service. Ideal para gerenciamento detalhado de chaves, rotação de chaves ou trilhas de auditoria de uso. DefinakmsKeyArnpara especificar uma chave gerenciada pelo cliente; deixe em branco para usar a chave KMS padrão.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
Obtém a configuração de criptografia de um table bucket.
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
Exclua a configuração de criptografia de um table bucket, revertendo para a criptografia padrão gerenciada pelo 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("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
Aplica uma política de recursos a um table bucket. A política controla o acesso entre contas e entre serviços a todas as tabelas no bucket.
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
Obtém a política de recursos de um table bucket.
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
Exclua a política de recursos de um table bucket.
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
Defina a configuração de manutenção para um table bucket. Use esta operação para configurar a remoção de arquivos não referenciados no nível do bucket, aplicando a definição a todas as tabelas contidas nele por padrão.
Valores do parâmetro type:
icebergUnreferencedFileRemoval— Remove arquivos de dados e metadados do Iceberg que nenhum snapshot referencia mais. Isso evita o acúmulo de arquivos obsoletos e o aumento dos custos de armazenamento.
unreferencedDays: Número de dias antes que um arquivo não referenciado se torne elegível para remoção (mínimo: 1).
nonCurrentDays: Número de dias antes que um objeto não atual (marcado para exclusão pela expiração do snapshot) seja removido permanentemente (mínimo: 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
Obtém a configuração de manutenção de um table bucket.
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());
}
}
}
Operações de namespace
CreateNamespace
Crie um namespace em um table bucket. Um namespace agrupa logicamente tabelas relacionadas e é obrigatório antes da criação de qualquer tabela.
Um table bucket deve existir antes da criação de um namespace. Crie o table bucket primeiro usando 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());
}
}
}
Excluir namespace
Exclua um namespace.
O namespace não deve conter tabelas antes da exclusão. Exclua todas as tabelas no namespace primeiro.
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
Recupera detalhes de um 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
Lista namespaces em um table bucket. Use maxNamespaces para controlar o tamanho da página e o continuationToken retornado para paginar resultados adicionais.
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());
}
}
}
Operações de tabela
CreateTable
Crie uma tabela Apache Iceberg com esquema, especificação de partição e configuração opcional de criptografia.
Pré-requisitos: um table bucket e um namespace devem existir antes da criação da tabela. Crie-os usando CreateTableBucket e CreateNamespace.
O parâmetro format deve ser iceberg. O esquema define nomes de campos, tipos (long, string, timestamptz, etc.) e se cada campo é obrigatório. A especificação de partição mapeia um campo de source para uma transformação de partição (por exemplo, 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
Exclua uma tabela.
A exclusão da tabela é permanente e não pode ser desfeita. Todos os dados na tabela serão excluídos.
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
Recupera detalhes de uma tabela. Consulte pelo ARN do table bucket + namespace + nome ou diretamente pelo ARN da tabela.
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
Lista todas as tabelas em um namespace. Use maxTables para controlar o tamanho da página e o continuationToken retornado para paginar resultados adicionais.
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
Renomeia uma tabela ou a move para um namespace diferente dentro do mesmo table bucket.
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
Recupera a localização do arquivo de metadados Iceberg de uma tabela, juntamente com o token de versão atual e a localização do warehouse. O token de versão é necessário ao chamar 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
Atualiza a localização do arquivo de metadados Iceberg de uma tabela. Mecanismos de consulta e integrações de catálogo Iceberg usam essa operação para confirmar novos metadados após operações de escrita.
O versionToken fornece controle de concorrência otimista: forneça o token retornado por GetTableMetadataLocation ou pela chamada anterior de UpdateTableMetadataLocation. A solicitação falhará se o token não corresponder ao estado atual, evitando gravações simultâneas conflitantes.
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
Recupera a configuração de criptografia de uma tabela.
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
Defina a política de recursos para uma tabela. Use políticas no nível da tabela para controle de acesso granular em tabelas individuais, como restringir ações específicas a uma conta específica.
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
Obtém a política de recursos de uma tabela.
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
Exclua a política de recursos de uma tabela.
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
Defina a configuração de manutenção para uma tabela. As configurações no nível da tabela substituem quaisquer padrões definidos no nível do bucket.
Valores do parâmetro type:
icebergCompaction— Mescla pequenos arquivos de dados Iceberg em arquivos maiores para melhorar o desempenho de consultas e reduzir a sobrecarga de contagem de arquivos.icebergSnapshotManagement— Expira e remove snapshots antigos do Iceberg para controlar o crescimento de metadados.icebergUnreferencedFileRemoval— Remove arquivos de dados e metadados que nenhum snapshot referencia mais.
Estratégias de compactação (definidas via IcebergCompactionSettings.strategy):
auto(padrão) — Seleciona automaticamentesortpara tabelas com ordem de classificação definida ebinpackpara todas as outras.binpack— Combina arquivos pequenos em arquivos maiores, aplicando quaisquer exclusões pendentes no nível de linha.sort— Organiza os dados pelas colunas especificadas para acelerar consultas filtradas. Indicado quando as consultas filtram frequentemente colunas específicas.-
z-order— Combina múltiplos atributos em uma chave de classificação escalar para consultas multidimensionais eficientes.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
Recupera a configuração de manutenção de uma tabela. A resposta contém um mapa indexado pelo tipo de manutenção (icebergCompaction, icebergSnapshotManagement, icebergUnreferencedFileRemoval), cada um com seu status e configuraçõ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 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
Recupera o status dos trabalhos de manutenção de uma tabela. Use esta operação para verificar se a compactação, o gerenciamento de snapshots ou a remoção de arquivos não referenciados foram executados com êxito e para diagnosticar falhas.
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());
}
}
}