snowflake-cloud-data-platform - 查询在浏览器中工作正常,但在 CLI 中失败
问题描述
我安装了 TPC-H 基准测试。我可以在浏览器中运行这个命令,它工作正常:
select * from h_customer;
但如果我从 Linux CLI 运行它,它就永远不会返回。
如果我将其修改为更小,它将在 CLI 中工作:
select * from h_customer limit 10;
那返回就好了。然后我可以继续:
select * from h_customer limit 100; -- This works.
select * from h_customer limit 1000; -- This hangs.
历史视图显示服务器获得了“限制 1000”的查询,并正确处理了它。它在合理的时间内运行,历史视图显示了正确的 1,000 行。
我可以用其他表和查询重现这一点。这似乎是客户端的大量数据问题。但是返回 1,000 行应该是微不足道的。我希望它会返回更多。
解决方案
Snowflake 将小型结果集直接发送到客户端。对于较大的文件,它将客户端定向到结果集缓存以下载一个或多个压缩文件。结果集缓存来自云提供商,而不是直接来自 snowflakecomputing.com。
1,000 行是在两者之间切换的一个阈值,而且我已经看到非常宽的表在行数较少的情况下也是如此。然后,客户端会根据 Snowflake 的运行位置尝试下载 S3 文件、Azure blob 或 GCS 文件。某些东西阻止了您的 Linux 客户端下载这些文件。
通常它是具有状态数据包检测功能的防火墙,例如来自 Palo Alto 或 Cisco 的防火墙。他们有时会解密 HTTPS 流量并丢弃看起来应该是“snowflakecomputing.com”但来自 AWS、Azure 或 GCP 的数据包。
它也可以是代理服务器。由于它是在浏览器中工作的,因此两者在获取大型结果集的方式上有所不同。浏览器可能配置了代理。您可以为所有 Snowflake 客户端设置代理,包括 SnowSQL https://docs.snowflake.com/en/user-guide/snowsql-start.html#using-a-proxy-server。
请咨询您的网络团队,看看是否有东西从云提供商或 snowflakecomputing.com 丢包。
推荐阅读
- c# - 无法在 RDLC 报告中添加数据源和数据集
- c++ - 关于在函数 regex_replace 之前使用 std::
- video - 如何在最后一帧停止 Divi 背景中的视频
- angular - *ngFor 中的 mat-checkbox 在材料 6 中无法正常工作
- ios - 如何从任何 ViewController 访问 CustomNavigationController 的方法?
- bash - 如何在 ssh 会话中执行 scp 命令?
- docker - 如何在 docker 卷中运行任何命令?
- c# - 按 ID 搜索 - ASP.NET MVC
- orm - 如何在 Intershop7 中注册 ORMObjectListener
- android - 我是否负责关闭传递给自定义 CursorWrapper 类构造函数的游标?