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 文件大小为十进制时的频谱表清单文件的主要内容,如果未能解决你的问题,请参考以下文章