Snowflake 上的无成本查询

Posted

技术标签:

【中文标题】Snowflake 上的无成本查询【英文标题】:Costless queries on Snowflake 【发布时间】:2020-06-01 15:32:44 【问题描述】:

我正在尝试通过雪花 query_history 表跟踪雪花的使用情况。我注意到对于一些应用程序,如果我通过 start_time 和经过时间跟踪它,使用率接近“100%”。但是,查询中充满了诸如“select /* nodejs:heartbeat */ 1;”之类的内容。我被告知实际上并不花费任何费用。这很酷。但是,我怎样才能让我的报告知道他们不花费任何费用?

我注意到这个查询:

select query_text from query_history where warehouse_size is null;

似乎让我得到所有“微不足道”的查询...“SELECT current_date”、“select /* nodejs:heartbeat */ 1;”等...

但是,有时,它也给了我看似不平凡的选择:“select * from cst_usr_info where deleted_at is null and lower(usr_email) = ?”比如……

我想我的问题是:

    “warehouse_size 为空”是否意味着查询没有成本? 如果是这样,那么“非平凡”选择是无成本的原因是因为它们可能已被缓存或其他原因吗?

【问题讨论】:

【参考方案1】:
    是的,这是获取与未使用仓库相关的所有查询的好方法(因此,无需成本)。 您的重要查询很可能是 Snowflake 的查询结果缓存中可用的查询(这意味着它之前已执行并且无需仓库即可获得结果)。还有其他类型的查询可能会使用可以从服务层返回而无需仓库的元数据信息,例如 MIN() 或 MAX() 函数。

希望对你有帮助。

【讨论】:

如果您想了解查询何时可能被缓存,这里有一个关于雪花结果缓存的很好解释:community.snowflake.com/s/article/…

以上是关于Snowflake 上的无成本查询的主要内容,如果未能解决你的问题,请参考以下文章

成本是不是与雪花中的平均查询数成正比

对大小数据进行安全(且无成本)的重新解释

数据推送到 Snowflake 阶段时触发 Snowflake 任务

为啥今天集群/分区上的查询成本远高于以前的日期?

使用 Snowflake JDBC 驱动程序支持 Snowflake EXPLAIN 查询

使用 Snowflake 进行参数化查询并从 Snowflake .NET 连接器传递值