雪花中的查询结果大小

Posted

技术标签:

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

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

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

谢谢!

【问题讨论】:

为什么不使用临时表?出于兴趣,您为什么想知道这些信息? 是的,transient table 可以让我们有更多时间的数据,但问题是它们不会在一段时间后自动删除,对吧?我们需要它用于特定的用例:最重要的要求是响应发送到浏览器应用程序,我们希望将响应限制在每个请求 100MB 以内 OK - 但在这种情况下,Snowflake 中的任何尺寸信息都无法帮助您。 Snowflake 中的数据被高度压缩(并且大小信息是针对该压缩数据的) - 如果您将该数据发送到 Web 应用程序,那么它显然会被解压缩 【参考方案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 字节)。如您所见,所需时间和大小结果存在一些差异。根据您的案例要求,它可能是更好的一个或另一个 其中一些结果令人惊讶!如果您愿意,很高兴通过电子邮件深入了解

以上是关于雪花中的查询结果大小的主要内容,如果未能解决你的问题,请参考以下文章

如何将查询结果从雪花直接上传到 S3?

使用错误处理将整数转换为雪花中的日期

如何检查从 aws S3 到雪花的数据加载结果

雪花中的查询超时问题

在雪花的临时表中计算大小写

雪花变种性能