【问题标题】:Query result size in snowflake雪花中的查询结果大小
【发布时间】:2021-01-22 13:48:08
【问题描述】:

有没有办法知道 Snowflake 中的查询响应大小?

例如,在 BigQuery 中,我们从 BigQuery 在查询作业中创建的时态表中获取大小。

谢谢!

【问题讨论】:

  • 为什么不使用临时表?出于兴趣,您为什么想知道这些信息?
  • 是的,transient table 可以让我们有更多时间的数据,但问题是它们不会在一段时间后自动删除,对吧?我们需要它用于特定的用例:最重要的要求是响应发送到浏览器应用程序,我们希望将响应限制在每个请求 100MB 以内
  • OK - 但在这种情况下,Snowflake 中的任何尺寸信息都无法帮助您。 Snowflake 中的数据被高度压缩(并且大小信息是针对该压缩数据的) - 如果您将该数据发送到 Web 应用程序,那么它显然会被解压缩

标签: snowflake-cloud-data-platform


【解决方案1】:

运行查询后,您始终可以参考其缓存结果。您只需要知道查询 id 并扫描其结果即可。然后,您可以通过选择测量大小的任何方法来确定这些结果的大小 - 例如,对所有列进行编码的 json 长度。

在代码中:

-- run a query then get its id

set last_query_id = (select last_query_id());

select sum(length(to_json(object_construct(a.*)))) table_encoded_size
from table(result_scan($last_query_id)) a;

【讨论】:

  • 我很高兴它有效@oleurud。请将此答案标记为已接受,作为对您有用的令牌:)
  • 嗨 Felipe,我必须在链中添加一个 object_construct 函数才能使其工作:它将是:select sum(length(to_json(object_construct(a.*)))) table_encoded_size from table(result_scan($last_query_id)) a;
  • 感谢@juanra 分享这个技巧!该查询与我拥有的数据一起工作,我很高兴你找到了一个很好的解决方案,但它没有
  • 我想分享我们的最终结果。当我们使用 1.5GB 表时,使用 result_scan 解决方案,我们得到以下结果:SELECT * FROM BIG_TABLE: 19s(第一次)或命中缓存。 result_scan query:34 段(返回 1.599.524.104 字节)使用临时表:CREATE TEMPORARY TABLE XX AS (SELECT * FROM BIG_TABLE):29 段和SELECT BYTES FROM WHERE table_name = 'XX':600 毫秒(2.353.437.184 字节)。如您所见,所需时间和大小结果存在一些差异。根据您的案例要求,它可能是更好的一个或另一个
  • 其中一些结果令人惊讶!如果您愿意,很高兴通过电子邮件深入了解
猜你喜欢
  • 2021-08-21
  • 2022-01-04
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
相关资源
最近更新 更多