雪花:卸载时复制命令不会为多个文件生成恒定大小

Posted

技术标签:

【中文标题】雪花:卸载时复制命令不会为多个文件生成恒定大小【英文标题】:Snowflake : Copy comman not generating Constant SIze for multiple files while unloading 【发布时间】:2020-08-13 11:57:04 【问题描述】:

从(选择)复制到@elasticsearch/product/s3file object_construct(*)from mytable) file_format = (type = json, 压缩=无),覆盖=真,单=假, max_file_size=5368709120;

该表有 2GB 的数据。 我想将它们拆分为 100mb 的文件以存储在 S3 中,但 s3 将它们拆分为文件大小不均匀。 预计会有多个文件有 100MB

我需要对弹性搜索中的索引进行性能改进,我正在使用 smart_open 进行多处理。所以处理文件会很方便。 谢谢

【问题讨论】:

【参考方案1】:

如果每列中的每个值的大小完全相同,您只会获得相同的文件大小。

例如,如果您的表有 firstname 和 lastname 列,并且一条记录的值为“John”“Smith”,另一条记录的值为“Michael”“Gardner”,那么,如果每条记录都写入不同的文件,生成的 JSON 文件的大小会有所不同,因为 John 与 Michael 的大小不同,而 Smith 与 Gardner 的大小不同。

您也可以只控制文件的最大大小,而不是实际的文件大小。如果您已将 10 条记录写入一个文件并且文件大小为 950Mb,如果下一条记录的大小为 100Mb,那么它将被写入一个新文件,原始文件将保持在 950Mb

【讨论】:

【参考方案2】:

它不是 S3 拆分文件,它的雪花 wharehosue 大小拆分文件,就像您在复制命令中使用 SINGLE=False 一样。随着 WH 大小的增加,文件数量会增加

示例 使用 XS 大小 wh 运行您的查询,它会在 s3 上生成 8 个文件,如果您使用 M 大小 WH,那么它将在 s3 上创建 16 个文件。并且它的拆分发生在并行模式下,因此每个文件的大小可能会有所不同。它不像它创建具有您在复制命令中给出的最大限制的文件然后启动另一个文件。

【讨论】:

以上是关于雪花:卸载时复制命令不会为多个文件生成恒定大小的主要内容,如果未能解决你的问题,请参考以下文章

ID号生成 雪花算法

雪花复制命令以将默认值替换为 null

为从雪花中卸载的文件设置文件名

将数据从雪花卸载到 s3 时,如何将日期时间戳添加到 zip 文件?

跨区域的雪花复制:增加任一端的仓库大小会影响速度吗?

通过 JDBC 与 COPY_INTO + GET 批量卸载雪花数据