【问题标题】:How to split a CSV or JSON file for optimal Snowflake ingestion?如何拆分 CSV 或 JSON 文件以获得最佳雪花摄取?
【发布时间】:2021-08-09 20:23:53
【问题描述】:
【问题讨论】:
标签:
split
command-line-interface
gzip
snowflake-cloud-data-platform
【解决方案1】:
这是我能想到的最好的命令行序列:
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 文件,因此最后的压缩步骤将帮助我们在网络中移动文件。