元数据管理Metadata(Java SDK V2)

更新时间:
复制 MD 格式

本文介绍如何通过Java SDK V2创建、查看、更新和删除存储空间(Bucket)的元数据表配置,包括日志表(Journal Table)配置和清单表(Inventory Table)配置。

功能说明

元数据管理(Metadata)为存储空间(Bucket)提供元数据表配置能力,包含以下两类配置:

  • 日志表配置(JournalTableConfiguration):通过RecordExpiration控制日志记录的开启状态(Expiration取值ENABLED或DISABLED)及记录保留天数(Days)。

  • 清单表配置(InventoryTableConfiguration):通过ConfigurationState控制清单表的启用状态(取值ENABLED或DISABLED),并可通过EncryptionConfiguration指定加密算法(SseAlgorithm)。

注意事项

  • 本文示例代码以华东1(杭州)的地域IDcn-hangzhou为例,其他地域请根据实际情况替换。

  • 本文以从环境变量读取访问凭证为例。使用前请确保已配置访问凭证(AccessKey)。

  • 请确保您拥有对目标Bucket执行元数据表配置操作的权限。Bucket所有者默认拥有此类权限,如果您无此类权限,请先向Bucket所有者申请对应操作的权限。

  • 您也可以通过OSS控制台开启、修改或关闭元数据管理功能。

示例代码

创建元数据表配置

以下代码用于为某个Bucket创建元数据表配置(同时设置日志表和清单表):

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;

public class CreateBucketMetadataConfigurationSample {
    public static void main(String[] args) {
        String region = "cn-hangzhou";
        String bucket = "examplebucket";

        CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
        OSSClientBuilder clientBuilder = OSSClient.newBuilder()
                .credentialsProvider(provider)
                .region(region);

        try (OSSClient client = clientBuilder.build()) {
            // 构建日志表和清单表的元数据配置
            MetadataConfiguration configuration = MetadataConfiguration.newBuilder()
                    .journalTableConfiguration(JournalTableConfiguration.newBuilder()
                            .recordExpiration(MetadataTableRecordExpiration.newBuilder()
                                    .expiration("ENABLED")
                                    .days(30)
                                    .build())
                            .encryptionConfiguration(MetadataTableEncryptionConfiguration.newBuilder()
                                    .sseAlgorithm("AES256")
                                    .build())
                            .build())
                    .inventoryTableConfiguration(InventoryTableConfiguration.newBuilder()
                            .configurationState("ENABLED")
                            .encryptionConfiguration(MetadataTableEncryptionConfiguration.newBuilder()
                                    .sseAlgorithm("AES256")
                                    .build())
                            .build())
                    .build();

            CreateBucketMetadataConfigurationResult result = client.createBucketMetadataConfiguration(
                    CreateBucketMetadataConfigurationRequest.newBuilder()
                            .bucket(bucket)
                            .metadataConfiguration(configuration)
                            .build());
            System.out.printf("Status code:%d, request id:%s\n",
                    result.statusCode(), result.requestId());
        } catch (Exception e) {
            System.out.printf("error:\n%s", e);
        }
    }
}

查看元数据表配置

以下代码用于查看某个Bucket的元数据表配置:

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;

public class GetBucketMetadataConfigurationSample {
    public static void main(String[] args) {
        String region = "cn-hangzhou";
        String bucket = "examplebucket";

        CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
        OSSClientBuilder clientBuilder = OSSClient.newBuilder()
                .credentialsProvider(provider)
                .region(region);

        try (OSSClient client = clientBuilder.build()) {
            GetBucketMetadataConfigurationResult result = client.getBucketMetadataConfiguration(
                    GetBucketMetadataConfigurationRequest.newBuilder()
                            .bucket(bucket)
                            .build());
            MetadataConfigurationResult configuration = result.metadataConfigurationResult();
            System.out.printf("Status code:%d, request id:%s\n",
                    result.statusCode(), result.requestId());
            System.out.printf("Table bucket ARN:%s, journal status:%s, inventory state:%s\n",
                    configuration.destinationResult().tableBucketArn(),
                    configuration.journalTableConfigurationResult().tableStatus(),
                    configuration.inventoryTableConfigurationResult().configurationState());
        } catch (Exception e) {
            System.out.printf("error:\n%s", e);
        }
    }
}

更新清单表(Inventory Table)配置

以下代码用于更新某个Bucket的清单表配置:

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;

public class UpdateBucketMetadataInventoryTableConfigurationSample {
    public static void main(String[] args) {
        String region = "cn-hangzhou";
        String bucket = "examplebucket";

        CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
        OSSClientBuilder clientBuilder = OSSClient.newBuilder()
                .credentialsProvider(provider)
                .region(region);

        try (OSSClient client = clientBuilder.build()) {
            // 开启或关闭清单表
            InventoryTableConfiguration configuration = InventoryTableConfiguration.newBuilder()
                    .configurationState("ENABLED")
                    .build();
            UpdateBucketMetadataInventoryTableConfigurationResult result =
                    client.updateBucketMetadataInventoryTableConfiguration(
                            UpdateBucketMetadataInventoryTableConfigurationRequest.newBuilder()
                                    .bucket(bucket)
                                    .inventoryTableConfiguration(configuration)
                                    .build());
            System.out.printf("Status code:%d, request id:%s\n",
                    result.statusCode(), result.requestId());
        } catch (Exception e) {
            System.out.printf("error:\n%s", e);
        }
    }
}

更新日志表(Journal Table)配置

以下代码用于更新某个Bucket的日志表配置:

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;

public class UpdateBucketMetadataJournalTableConfigurationSample {
    public static void main(String[] args) {
        String region = "cn-hangzhou";
        String bucket = "examplebucket";

        CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
        OSSClientBuilder clientBuilder = OSSClient.newBuilder()
                .credentialsProvider(provider)
                .region(region);

        try (OSSClient client = clientBuilder.build()) {
            // 更新日志表的过期配置
            JournalTableConfiguration configuration = JournalTableConfiguration.newBuilder()
                    .recordExpiration(MetadataTableRecordExpiration.newBuilder()
                            .expiration("ENABLED")
                            .days(30)
                            .build())
                    .build();
            UpdateBucketMetadataJournalTableConfigurationResult result =
                    client.updateBucketMetadataJournalTableConfiguration(
                            UpdateBucketMetadataJournalTableConfigurationRequest.newBuilder()
                                    .bucket(bucket)
                                    .journalTableConfiguration(configuration)
                                    .build());
            System.out.printf("Status code:%d, request id:%s\n",
                    result.statusCode(), result.requestId());
        } catch (Exception e) {
            System.out.printf("error:\n%s", e);
        }
    }
}

删除元数据表配置

以下代码用于删除某个Bucket的元数据表配置:

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;

public class DeleteBucketMetadataConfigurationSample {
    public static void main(String[] args) {
        String region = "cn-hangzhou";
        String bucket = "examplebucket";

        CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
        OSSClientBuilder clientBuilder = OSSClient.newBuilder()
                .credentialsProvider(provider)
                .region(region);

        try (OSSClient client = clientBuilder.build()) {
            DeleteBucketMetadataConfigurationResult result = client.deleteBucketMetadataConfiguration(
                    DeleteBucketMetadataConfigurationRequest.newBuilder()
                            .bucket(bucket)
                            .build());
            System.out.printf("Status code:%d, request id:%s\n",
                    result.statusCode(), result.requestId());
        } catch (Exception e) {
            System.out.printf("error:\n%s", e);
        }
    }
}

相关文档