如果要确定上传任务正确结束,我们想检查AWS S3上已上传文件的行数。
现在,在从SQL Server导出后,我们只需按照以下Windows AWS CLI命令发送导出的文件;
aws s3 cp !SEND_FILE! %S3_DIR%/
请告知我们是否有任何方法可以检查S3存储桶中已上传文件的数量。 如果没有合适的方法来对它们进行计数,那么不妨以替代方式获得任何上传错误代码。
谢谢您的建议。
答案 0 :(得分:2)
如果不重新下载文件,则无法直接计算S3上的行数。但是,这不是必需的。从REST API documentation:
Amazon S3从未添加部分对象;如果您获得成功 作为响应,Amazon S3将整个对象添加到存储桶中。
完成此操作的主要方法是验证在客户端(即运行CLI的位置)上计算出的MD5哈希与存储的对象相同。来自同一文档:
为确保遍历网络的数据没有损坏,请使用 Content-MD5标头。使用此标头时,Amazon S3会检查 反对提供的MD5值,如果不匹配, 返回错误。
CLI将自动为您计算MD5哈希并将其发送到S3。因此,如果对象(文件)未正确上传,您将在CLI中返回一个错误,通知您。
答案 1 :(得分:1)
如果您有 CSV/JSON/Parquet 文件,您可以使用 S3 Select 命令计算行数。
使用 Python/boto3 看起来像这样:
sql_stmt = """SELECT count(*) FROM s3object S"""
req_fact =s3.select_object_content(
Bucket = 'my_bucket',
Key = 'my/path/to/file.parquet',
ExpressionType = 'SQL',
Expression = sql_stmt,
InputSerialization={'Parquet': {}},
OutputSerialization = {'CSV': {
'RecordDelimiter': os.linesep,
'FieldDelimiter': colsep}},
)
如果你想统计bucket中所有文件中的记录,请查看这个脚本: S3 line counter