【问题标题】:Query works fine in browser but fails in CLI查询在浏览器中工作正常,但在 CLI 中失败
【发布时间】:2020-04-18 11:42:23
【问题描述】:

我安装了 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 行应该是微不足道的。我希望它会返回更多。

【问题讨论】:

  • 我要做的第一个建议是在 webUI 中检查您的查询历史记录,以确保 Snowflake 确实按照您的想法接收查询。 sql 文件中可能存在特殊/隐藏/非 unicode 类型的字符,这会导致您出现问题。页面详情在此链接:docs.snowflake.com/en/user-guide/ui-history.html
  • 非常有帮助!它表明正在接收和处理查询。似乎表明客户端问题。我根据上面的新文本简化了查询。但历史确实显示 1,000 行限制查询到达服务器,在合理的毫秒数内处理,否则看起来很正常。也许在客户端的东西?对观看历史的深刻见解。会经常使用。

标签: snowflake-cloud-data-platform tpc


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多