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

问题描述

从以下位置复制到@ elasticsearch / product / s3文件: 来自mytable的object_construct(*))file_format =(type = json, COMPRESSION = NONE),overwrite = TRUE,single = False, max_file_size = 5368709120;

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

我需要提高性能以在弹性搜索中建立索引,我正在使用smart_open进行多处理。因此处理文件会很方便。 谢谢

解决方法

如果每列中的每个值都完全相同,则只有相同的文件大小。

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

您还只能控制文件的最大大小,而不能控制实际文件的大小。如果您已将10条记录写入一个文件,导致文件大小为950Mb,那么如果下一条记录的大小为100Mb,则会将其写入新文件,并且原始记录仍为950Mb

,

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

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