如何拆分 CSV 或 JSON 文件以获得最佳 Snowflake 摄取?

Fel*_*ffa 5 gzip split command-line-interface snowflake-cloud-data-platform

Snowflake 建议在摄取之前分割大文件:

为了优化负载的并行操作数量,我们建议目标是生成压缩后大小约为 100-250 MB(或更大)的数据文件。https://docs.snowflake.com/en/user-guide/data-load-considerations-prepare.html

分割大文件并压缩它们的最佳方法是什么?

Fel*_*ffa 11

这是我能想到的最好的命令行序列:

cat bigfile.json  | split -C 1000000000 -d -a4 - output_prefix --filter='gzip > $FILE.gz'
Run Code Online (Sandbox Code Playgroud)

将第一步替换为将 JSON 或 CSV 输出到 stdout 的任何内容,具体取决于源文件。如果它是一个普通文件cat就可以,如果它是.gzthen gzcat,如果它是.zstdthenunzstd --long=31 -c file.zst等等。

然后split

  • -C 1000000000创建 1GB 文件,但尊重行完整性的结束行。
  • -d为每个文件提供一个数字后缀(我更喜欢这个而不是默认字母_
  • -a4使数字后缀长度为 4(而不是只有 2)
  • -cat将读取管道中前一个的输出
  • output_prefix是所有输出文件的基本名称
  • --filter='gzip > $FILE.gz'使用 gzip 动态压缩 1GB 文件,因此每个最终文件的大小最终约为 100MB。

Snowflake 可以摄取.gz文件,因此最后的压缩步骤将帮助我们在网络上移动文件。