AWS S3:有什么方法可以计数上传文件的行?

时间:2018-09-27 04:19:32

标签: amazon-s3 aws-cli

如果要确定上传任务正确结束,我们想检查AWS S3上已上传文件的行数。

现在,在从SQL Server导出后,我们只需按照以下Windows AWS CLI命令发送导出的文件;

aws s3 cp !SEND_FILE! %S3_DIR%/ 

请告知我们是否有任何方法可以检查S3存储桶中已上传文件的数量。 如果没有合适的方法来对它们进行计数,那么不妨以替代方式获得任何上传错误代码。

谢谢您的建议。

2 个答案:

答案 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