split - 如何拆分 CSV 或 JSON 文件以获得最佳雪花摄取?
问题描述
Snowflake 建议在摄取之前拆分大文件:
为了优化负载的并行操作数量,我们建议生成压缩后大小约为 100-250 MB(或更大)的数据文件。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
then gzcat
,如果它是一个.zstd
thenunzstd --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
文件,因此最后的压缩步骤将帮助我们在网络中移动文件。
推荐阅读
- reactjs - 通过应用服务托管在 React 前端和 .net 5 后端 Web 应用中进行 Azure AD 身份验证
- node.js - NextAuth jwt 作为 header.Authorization Bearer Token Next Js
- javascript - 如何在 React 中获取更多数据并将其正确存储在状态中?
- aws-iot - AWS IOT 策略 - 仅限于指定的 ClientID
- javascript - 反应懒惰未捕获未定义错误发生
- awk - grep,剪切并从文件中删除 \n
- java - 线程类方法运行内部无限循环
- codeigniter - 具有特定有限数据随机的 Codeignitor 分页
- sql - SQL - 检查多项选择题的正确答案
- regex - Perl - 非法十六进制数字警告错误