首页 > 解决方案 > 查询在浏览器中工作正常,但在 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-cloud-data-platformtpc

解决方案


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 丢包。


推荐阅读