amazon-s3 - S3 文件大小为十进制时的频谱表清单文件
问题描述
我正在通过创建 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 } }
]
}
这里有没有人遇到过这种情况并且可以分享他们的意见。
解决方案
文件的实际大小是多少?
考虑我的文件大小为 100.2 KB,因此以字节为单位,它将是 102604.8 字节。
的值100.2 KB
不是以字节为单位的确切文件大小。您的文件将始终具有完整的字节数(因为数据存储在内存中的字节中)。
您可以通过将文件复制到本地计算机并调用来检查文件的大小
stat -f%z my_file.csv
您也可以直接检查 s3 对象的元数据,例如。aws cli
aws s3api head-object --bucket my_bucket --key my_objects_key --query 'ContentLength'
在我们的系统中,我们使用后者(但使用 boto3 python 库)来组装清单文件,它可以正常工作。
推荐阅读
- jsf - p:galleria 在底部没有褪色,就像 PrimeFaces 展示页面上的情况一样
- bash - 运行 .command bash 脚本时出现“未指定的异常”
- asp.net - 使用 .NET Core 对象持久性模型查询 DynamoDB GSI 组合键时出现问题
- java - “在 SpringMVC 中找不到类型的返回值的转换器:类 java.lang.Integer”
- python - 为什么只有在使用 input() 方法时才会收到 TypeError?
- python - 如何从默认的 Django 模型重命名模型字段?
- javascript - 使用函数检查项目是否在数组中,然后从数组中删除该项目
- ios - 在 iOS 13 测试版中,应用程序在应用程序启动时崩溃
- git - 从 Github 中删除一个特定的提交
- reactjs - 在反应路由器中单击链接时回调不起作用