【发布时间】:2012-03-20 00:08:38
【问题描述】:
我正在查看 Amazon S3 示例,这些示例用于插入/删除...
但我想用新数据更新现有 blob。基本上内容是一个文本文件,并且文本已经修改,我希望S3对象存储新的文本内容。
如何在 Java 中做到这一点?
【问题讨论】:
标签: java amazon-s3 amazon-web-services
我正在查看 Amazon S3 示例,这些示例用于插入/删除...
但我想用新数据更新现有 blob。基本上内容是一个文本文件,并且文本已经修改,我希望S3对象存储新的文本内容。
如何在 Java 中做到这一点?
【问题讨论】:
标签: java amazon-s3 amazon-web-services
更新Amazon S3 中的现有对象与首先创建它没有区别,即使用相同的PUT Object 操作上传对象并将覆盖现有对象(如果它不受保护通过其他方式,例如通过Using Bucket Policies 或Object Versioning)
你可以在Upload an Object Using the AWS SDK for Java找到完整的代码示例,主要部分归结为:
AmazonS3 s3client = new AmazonS3Client(new PropertiesCredentials(
S3Sample.class.getResourceAsStream(
"AwsCredentials.properties")));
try {
System.out.println("Uploading a new object to S3 from a file\n");
File file = new File(uploadFileName);
s3client.putObject(new PutObjectRequest(
bucketName, keyName, file));
} catch (AmazonServiceException ase) {
System.out.println("Caught an AmazonServiceException, which " +
"means your request made it " +
"to Amazon S3, but was rejected with an error response" +
" for some reason.");
// ... error handling based on exception details
}
【讨论】:
您可以使用 Athena 通过 INSERT 函数更新额外的行。您需要向 Athena 提供对 S3 存储桶的访问权限,使用 Amazon Glue 抓取 S3 存储桶以获取表布局,更新 Glue 以获取架构名称和数据类型。完成此操作后,您可以使用 Athena 控制台进行更新,地址为 https://console.aws.amazon.com/athena/home
INSERT INTO destination_table [(col1,col2,...)]
VALUES (col1value,col2value,...)[,(col1value,col2value,...)][,...]
【讨论】: