如何拆分 CSV 或 JSON 文件以获得最佳 Snowflake 摄取?
How to split a CSV or JSON file for optimal Snowflake ingestion?
Snowflake 建议在摄取前拆分大文件:
To optimize the number of parallel operations for a load, we recommend aiming to produce data files roughly 100-250 MB (or larger) in size compressed. https://docs.snowflake.com/en/user-guide/data-load-considerations-prepare.html
拆分和压缩大文件的最佳方法是什么?
这是我能想到的最好的命令行序列:
cat bigfile.json | split -C 1000000000 -d -a4 - output_prefix --filter='gzip > $FILE.gz'
将第一步替换为任何将 JSON 或 CSV 输出到标准输出的内容,具体取决于源文件。如果它是普通文件 cat
就可以,如果它是 .gz
那么 gzcat
,如果它是 .zstd
那么 unzstd --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
文件,因此最后的压缩步骤将帮助我们在网络中移动文件。
Snowflake 建议在摄取前拆分大文件:
To optimize the number of parallel operations for a load, we recommend aiming to produce data files roughly 100-250 MB (or larger) in size compressed. https://docs.snowflake.com/en/user-guide/data-load-considerations-prepare.html
拆分和压缩大文件的最佳方法是什么?
这是我能想到的最好的命令行序列:
cat bigfile.json | split -C 1000000000 -d -a4 - output_prefix --filter='gzip > $FILE.gz'
将第一步替换为任何将 JSON 或 CSV 输出到标准输出的内容,具体取决于源文件。如果它是普通文件 cat
就可以,如果它是 .gz
那么 gzcat
,如果它是 .zstd
那么 unzstd --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
文件,因此最后的压缩步骤将帮助我们在网络中移动文件。