为什么Snowflake不支持CTE范围(任何解决方法?)

时间:2019-12-02 03:49:31

标签: common-table-expression snowflake-data-warehouse

我是商业智能(BI)顾问,并且遇到了Snowflake不支持CTE范围的问题。

在BI中,重新定义SQL位非常有用。但是,如果我定义了一个称为Revenue_calculations的CTE,然后在where子句中添加了一些新内容,并在脚本中进一步声明了新的CTE(或嵌套在另一个CTE声明中),则重新声明了Revenue_calculations,Snowflake仅读取一次Revenue Calculations并使用整个脚本中的第一个CTE声明。

大多数其他数据库(例如Bigquery)和编程语言都有对象范围。有什么解决方法吗?这会改变吗?

***已更新为包含代码示例

with cte_in_question as (select 1),
cte2 as (
    with cte_in_question as (select 2)
    select * from cte_in_question
)
SELECT * FROM cte2

Snowflake将其评估为1,将BQ评估为2。2对我来说似乎更正确。有想法吗?

1 个答案:

答案 0 :(得分:0)

事实证明,在Snowflake中,默认情况下会返回来自外部CTE的数据。但是这种行为可以改变。您需要联系Snowflake支持人员,并要求他们更改此行为(在您的帐户级别),以便将内部CTE中的数据返回。