There are different tiers in S3 with different pricing, see https://aws.amazon.com/s3/storage-classes/  

By default, objects in S3 are created with the default Standard tier.

> It is possible to create a policy on the bucket to move them to Intelligent Tiering after 30 days, however we found with other projects that we can save quite a lot by creating them in the Intelligent Tier. The only way to do that is set the storage class when creating the object (a lifecycle policy only allows to change it after 30 days), which we don’t have control over.
> It’s a simple change in the PutObjectRequest that could be exposed via configuration of the S3 disk settings, and default to Standard

See [`SetStorageClass`](https://sdk.amazonaws.com/cpp/api/LATEST/class_aws_1_1_s3_1_1_model_1_1_put_object_request.html#a6cf76adbf31f1ee08ca20d7c8bb8459a)

And
https://github.com/ClickHouse/ClickHouse/blob/ce56ae61c68e23512cc8ec3bfe72f5c935f12379/src/IO/WriteBufferFromS3.cpp#L468




extern const Event S3UploadPart;
    extern const Event S3PutObject;
    extern const Event DiskS3HeadObject;
    extern const Event DiskS3CreateMultipartUpload;
    extern const Event DiskS3CompleteMultipartUpload;
    extern const Event DiskS3UploadPart;
    extern const Event DiskS3PutObject;
}
namespace DB
{
const int S3_WARN_MAX_PARTS = 10000;
namespace ErrorCodes
{
    extern const int S3_ERROR;
    extern const int INVALID_CONFIG_PARAMETER;
}
struct WriteBufferFromS3::UploadPartTask
{
    Aws::S3::Model::UploadPartRequest req;
    bool is_finished = false;
    std::string tag;
    std::exception_ptr exception;
};
struct WriteBufferFromS3::PutObjectTask
{
    Aws::S3::Model::PutObjectRequest req;
    bool is_finished = false;
    std::exception_ptr exception;
};
WriteBufferFromS3::WriteBufferFromS3(