csv - SnowSQL 性能极慢
问题描述
我们正在从一个表中运行一个非常简单的选择,这会产生一组大约 1.7 万行的数据。
我们希望我们可以将其导出到共享网络驱动器,但文件写入的性能(查询本身运行大约 3.5 秒)一直很糟糕,在大约 6 小时内返回了 150,000 行。此时,我们的 Okta 身份验证超时,必须更改并重新运行查询以捕获原始运行中未通过的行。
我可以在我的本地运行它,并且整个返回的数据集在大约 15 分钟内愉快地进入输出 csv。
有没有办法可以进一步挖掘这里的延误?有没有其他人遇到过这个问题并能够找到根本原因?
谢谢!
我应该添加我用来参考的命令:
snowsql -c {connection} -f .\source_q.sql -o output_file=c:\users\{username}\desktop\snowsql\output.csv -o quiet=true -o friendly=false -o header=true -o output_format=csv --authenticator externalbrowser
我正在运行的查询如下所示:
select
cnt.id,
cnt.account_id,
cnt.did_c,
cnt.okta_id_c
from
MEMBER.CONTACT cnt
为了简单起见,我删除了一些小的 where 子句。
解决方案
似乎问题是写入网络驱动器太慢了。c:\users\{username}
网络路径对吗?如果您可以毫无问题地写入本地计算机,但网络路径很慢,那么如果不加快网络速度或缩小文件大小,您很可能无法修复。
有帮助的一件事是在上传到网络驱动器之前压缩文件。一个简单的方法是这样的:
snowsql -c {connection} -f .\source_q.sql -o friendly=false -o header=true -o output_format=csv --authenticator externalbrowser | gzip > c:\users\{username}\desktop\snowsql\output.csv
我删除了将 CSV 发送到标准输出的-o output_file=...
and-o quiet=true
标志,然后在加载到网络位置之前先通过 GZIP 管道传输它。
这种方法显然会在从 Snowflake 下载文件后压缩文件,但理想情况下,您希望在下载之前对其进行压缩。你可以这样做:
最后一个选项可能是最快的方法,但是它会在内部阶段生成多个文件,因此您必须下载每个文件。无论采用哪种方式,您都应该通过压缩数据看到相当显着的改进。当我对一个有 150,000 条记录的表进行测试时,我的文件大小从 24MB 变成了 9MB。
推荐阅读
- gridview - requiredfieldvalidator 在基于单选按钮列表值的网格视图中启用/禁用行编辑
- javascript - 通过嵌套数组对象属性将数组映射到字符串数组
- pandas - 如何自定义熊猫分析分位数
- forms - 对复制谷歌表单中已经制作的部分的怀疑
- reactjs - 无法使用嵌套的 React-Router-Dom v5 访问孙子路由器组件
- python - 标题同时显示在浏览器的栏和 Django 的正文中
- mysql - 如果查询未找到行,如何返回空值
- python - ORB 演示代码错误并出现 cv2.error: Unknown C++ exception from OpenCV code
- swift - 未知进程名称 - vImageConvert_AnyToAny - 在 beginBackgroundTask 上失败
- python - For 循环遍历嵌套字典并将结果附加到列表中