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

Posted

技术标签:

【中文标题】如何拆分 CSV 或 JSON 文件以获得最佳雪花摄取?【英文标题】:How to split a CSV or JSON file for optimal Snowflake ingestion? 【发布时间】:2021-08-09 20:23:53 【问题描述】:

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

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

拆分和压缩大文件的最佳方法是什么?

【问题讨论】:

【参考方案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 文件,因此最后的压缩步骤将帮助我们在网络中移动文件。

【讨论】:

以上是关于如何拆分 CSV 或 JSON 文件以获得最佳雪花摄取?的主要内容,如果未能解决你的问题,请参考以下文章

将一个大的 json 文件拆分为多个较小的文件

将 CSV 数据加载到雪花表

如何将 CSV 或 JSON 导入到 Firebase Cloud Firestore

如何将 Thingsboard 中的时间序列数据作为 CSV 或 JSON 文件保存到外部文件系统? [关闭]

如何从 .csv 文件中拆分数据集以进行训练和测试?

如何将抓取的数据从 Scrapy 以 csv 或 json 格式上传到 Amazon S3?