【问题标题】:AWS S3 : Is there any way to count rows of uploaded file?AWS S3:有没有办法计算上传文件的行数?
【发布时间】:2021-06-28 22:46:58
【问题描述】:

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

现在我们只是在从 SQL Server 导出后,通过 Windows AWS CLI 命令发送导出的文件,如下所示;

aws s3 cp !SEND_FILE! %S3_DIR%/ 

如果有任何方法可以检查 S3 存储桶上上传文件的数量,请告诉我们。 如果没有合适的方法来计算它们,将任何上传错误代码作为替代方式也将不胜感激。

提前感谢您的建议。

【问题讨论】:

  • 您可以使用 S3 Select 来计算行数,但如果您的目标是验证上传是否正确,那么使用 MD5 校验和是最好的方法(因为行数并不能保证文件完全匹配)。
  • 非常感谢,@John Rotenstein。检查 MD5 应该是完美的,以确保在 AWS S3 上上传文件的数据完整性。我们将尝试“aws s3api put-object”来验证 MD5(以及 AWS CLI 返回错误捕获 stdunbar,请告诉我)。非常感谢您提供的有用信息和对我目标的理解。

标签: amazon-s3 aws-cli


【解决方案1】:

如果不重新下载文件,就无法直接计算 S3 上的行数。但是,这不是必需的。来自 REST API documentation

Amazon S3 从不添加部分对象;如果你收到成功 作为响应,Amazon S3 将整个对象添加到存储桶中。

完成此操作的主要方法是验证在客户端(即运行 CLI 的位置)上计算的 MD5 哈希值是否与它存储的对象相同。来自相同的文档:

为确保通过网络的数据不会损坏,请使用 内容-MD5 标头。当您使用此标头时,Amazon S3 会检查 反对提供的 MD5 值,如果它们不匹配, 返回错误。

CLI 将自动为您计算 MD5 哈希并将其发送到 S3。因此,如果对象(文件)未正确上传,您会在 CLI 中收到错误提示。

【讨论】:

  • 非常感谢,@stdunbar。现在我明白计数行是不合适的,通过 AWS CLI 检查错误消息对我们来说应该是更好的方法。感谢您所有清晰而合乎逻辑的解释,我们一定会说服我们的客户。非常感谢。
【解决方案2】:

如果您有 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}},
    
)

如果您想计算存储桶中所有文件的记录,请查看此脚本: S3 line counter

【讨论】:

  • 哇,太棒了,亚历克斯!您的建议将改善我们的运营。到目前为止,我们确实使用“aws s3api put-object --bucket %S3_BUCKET% --key %DEST_FILENAME% --body %SRC_FILENAME% --metadata md5chksum=%SRC_HASH% --content-md5 %SRC_HASH%”对其进行了检查,感谢以前的建议在这里。现在我们也可以检查计数了。非常感谢。
猜你喜欢
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2012-11-07
  • 2020-02-18
相关资源
最近更新 更多