雪花:无法评估不受支持的子查询类型

Posted

技术标签:

【中文标题】雪花:无法评估不受支持的子查询类型【英文标题】:Snowflake : Unsupported subquery type cannot be evaluated 【发布时间】:2020-05-04 13:10:36 【问题描述】:

我使用雪花作为数据仓库。我在 AWS S3 有一个 CSV 文件。我正在编写一个合并 sql 以将 CSV 中收到的数据合并到雪花表中。我在时间维度表中有一个数据类型为 SF 中 Number(38,0) 数据类型的列。该表包含所有日期时间,例如属于列 time_id= 232 和 time=12:00 在 CSV 中,我得到一个标签为时间和值为 12:00 的列。

在合并 sql 中,我正在获取此值并尝试为其获取 time_id。

update table_name set start_time_dim_id = (select time_id from time_dim t where t.time_name = csv_data.start_time_dim_id)  

在此语句中,我收到此错误“SQL 编译错误:无法评估不支持的子查询类型”

我正在努力解决它,在此期间我搜索它并获得了一个参考 https://github.com/snowflakedb/snowflake-connector-python/issues/251 所以想确定是否有人遇到过这个问题?如果是,将不胜感激。

【问题讨论】:

这能回答你的问题吗? Unsupported subquery type cannot be evaluated 【参考方案1】:

这似乎是一个转换问题。我建议您检查 CSV 文件中的数据。可能存在错误或缺失值。请检查您的数据,并确保它返回数值

create table simpleone ( id number );
insert into simpleone values ( True );

最后一条语句失败:

SQL compilation error: Expression type does not match column data type, expecting NUMBER(38,0) but got BOOLEAN for column ID

如果您提供示例数据,以及产生此错误的 SQL,也许我们可以提供解决方案。

【讨论】:

感谢您的回复,是的,现在已解决,我得到 Unsupported subquery type cannot beevaluate。我有一个合并 sql,在设置列的值时,我必须使用子查询从另一个表中获取它的值。 也许您可以提供完整的查询(以及确切的错误消息),以便我们可以看到哪个子查询失败了。 内部查询出现问题。使用 (SELECT $27 tim_id , $28 dt_id , $13 w_id FROM @REPORTING_MERGE_STAGE/reporting-data-ingest/Evaluation-IT.csv) 合并到evaluation_fact eval_fact csv_data ON eval_fact.w_id = csv_data.w_id WHEN match THEN UPDATE SET tim_id= (select day_id from dates_dim d where d.day_id=csv_data.tim_id) , dt_id= (select time_id from time_dim t where t.time_name=csv_data.dt_id) WHEN NOT match THEN INSERT (tim_id, dt_id) VALUES ((select day_id from dates_dim d where d .day_id=csv_data.tim_id) , (select time_id from time_dim t where t.time_name=csv_data.dt_id) );.【参考方案2】:

不幸的是,Snowflake 中的相关和嵌套子查询在这个阶段有点受限。

我会尝试运行这样的东西:

update table_name 
set start_time_dim_id= time_id 
from time_dim
where t.time_name=csv_data.start_time_dim_id

【讨论】:

以上是关于雪花:无法评估不受支持的子查询类型的主要内容,如果未能解决你的问题,请参考以下文章

雪花标量 UDF 返回 无法评估不支持的子查询类型

雪花不支持的子查询类型无法在 UDF 标量中评估

无法从函数评估不受支持的子查询类型

SQL 编译错误:无法在 Snowflake 中评估不受支持的子查询类型

SQL 编译错误:无法评估不受支持的子查询类型 - SELECT 子句中的函数调用

Snowflake 中的返回类型“Table”问题