我是商业智能(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对我来说似乎更正确。有想法吗?
答案 0 :(得分:0)
事实证明,在Snowflake中,默认情况下会返回来自外部CTE的数据。但是这种行为可以改变。您需要联系Snowflake支持人员,并要求他们更改此行为(在您的帐户级别),以便将内部CTE中的数据返回。