S3 文件大小为十进制时的频谱表清单文件

Posted

技术标签:

【中文标题】S3 文件大小为十进制时的频谱表清单文件【英文标题】:Spectrum table Manifest file when S3 file size is in decimal 【发布时间】:2020-04-16 12:34:57 【问题描述】:

我正在通过创建 Spectrum 外部表并将其指向包含有关源 S3 文件信息的清单文件来读取 S3 文件。 问题是当我的 S3 文件大小为十进制时,例如37.5 MB 或 100.2 KB。

根据文档,我们需要以字节为单位提供文件大小。现在,当我使用 1000 的乘数转换为字节时,我在外部表中的文件末尾丢失了一些记录或一些数据。 但是当我使用 1024 的乘数转换为字节时,我转换后的文件大小将是十进制的。

假设我的文件大小为 100.2 KB,因此以字节为单位,它将是 102604.8 字节。

    当我在清单文件中提供文件大小为 102604.8 时,我得到一个 错误“文件条目没有设置内容长度” 当我为下一个整数 102605 提供一个四舍五入的值时,我收到一个错误“频谱错误” 当我为前一个整数 102604 提供一个四舍五入的值时,我再次收到相同的错误“频谱错误”

我的清单看起来像:



  "entries": [

    "url":"s3://path/filename1.csv", "meta":  "content_length": 102605  ,

    "url":"s3://path/filename2.csv", "meta":  "content_length": 102605  

  ]


这里有没有人遇到过这种情况并可以分享他们的意见。

【问题讨论】:

【参考方案1】:

文件的实际大小是多少?

假设我的文件大小为 100.2 KB,因此以字节为单位,它将是 102604.8 字节。

100.2 KB 的值不是确切的文件大小(以字节为单位)。您的文件将始终具有完整的字节数(因为数据存储在内存中的字节中)。

您可以通过将文件复制到本地计算机并调用来检查文件的大小

stat -f%z my_file.csv

您也可以直接检查 s3 对象的元数据,例如。 aws 剪辑

aws s3api head-object --bucket my_bucket --key my_objects_key --query 'ContentLength' 

在我们的系统中,我们使用后者(但使用 boto3 python 库)来组装清单文件,它可以正常工作。

对于调试,您还可以查看一些内部 Redshift 表,例如 STL_ERROR 或 SVL_S3LOG。

【讨论】:

感谢@botchniaque 因为我只查看 S3 存储桶中的大小,所以我遇到了这个问题。我尝试了 windows 文件属性和 cli 命令来获得确切的大小,现在它工作正常。

以上是关于S3 文件大小为十进制时的频谱表清单文件的主要内容,如果未能解决你的问题,请参考以下文章

APK 文件大小缩减清单

汇编语言实现DOS下的文件目录清单(DIR)

为啥 Redshift 和 S3 之间的 AWS 文件大小不同?

MySQL查询时大小写不敏感问题(无需修改配置文件)

使用清单从多个 s3 文件夹加载红移表

s3直接上传限制文件大小和类型