如何跳过惰性评估/编译器优化,以防止Snowflake中的隐藏错误



在Snowflake中运行以下查询显然会产生Division by zero错误:

SELECT 1 / 0;

然而,一些派生查询并不总是产生错误。例如,此查询只返回1:

SELECT COUNT(*)
FROM (SELECT 1 / 0);

据我所知,这是由于Snowflake中的懒惰评估或其他编译器优化造成的。由于Snowflake已经知道最终输出(行数(,因此永远不会执行除法。

然而,在实际的用例中,这可以有效地隐藏错误,例如在使用DBT运行数据测试时(因为DBT执行器会自动使用SELECT COUNT(*) FROM (...).包装测试查询(

我可以强制Snowflake执行查询的每一部分,或者以某种方式跳过懒惰的评估/编译器优化吗

编辑:除以零只是一个简化的例子。还有许多其他事情可能会导致错误——有时是明确的,比如断言。

事实证明,解决方案非常简单!只需添加一个针对所需部分的条件语句,Snowflake将被迫执行该部分以评估条件。

例如,此查询将再次产生Division by zero错误:

SELECT COUNT(*)
FROM (
SELECT (1 / 0) AS n
WHERE n IS NOT NULL
);

相关内容

  • 没有找到相关文章

最新更新