Snowflake中含WHERE...CONNECT BY的EXISTS子查询不支持问题咨询
Snowflake 报错“Unsupported subquery type cannot be evaluated”的原因解析
运行以下代码时,我遇到错误 "Unsupported subquery type cannot be evaluated":
SELECT '"' || TABLE_CATALOG || '"."' || TABLE_SCHEMA || '"."' || NAME || '"' FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES TBL_LIST WHERE DELETED_ON IS NULL AND GRANTED_ON = 'TABLE' AND PRIVILEGE IN ('SELECT','DELETE') AND EXISTS (SELECT 1 FROM (SELECT DISTINCT NAME AS CHILD, GRANTEE_NAME AS PARENT FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES WHERE GRANTED_ON = 'ROLE' AND DELETED_ON IS NULL) WHERE GRANTEE_NAME IN (CHILD, CURRENT_ROLE()) START WITH PARENT = CURRENT_ROLE() CONNECT BY PARENT = PRIOR CHILD) GROUP BY '"' || TABLE_CATALOG || '"."' || TABLE_SCHEMA || '"."' || NAME || '"' HAVING COUNT(DISTINCT PRIVILEGE) = 2;
这段代码的目标是获取当前角色同时拥有SELECT和DELETE权限的所有表列表。我在Snowflake中创建了最小复现示例:
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES TBL_LIST WHERE EXISTS (SELECT 1 FROM (SELECT DISTINCT NAME AS CHILD, GRANTEE_NAME AS PARENT FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES) WHERE GRANTEE_NAME = CHILD START WITH PARENT = CURRENT_ROLE() CONNECT BY PARENT = PRIOR CHILD);
我已经确认:移除嵌套的WHERE子句,或者去掉START WITH...CONNECT BY递归查询序列后,查询就能正常执行。我想了解这类子查询不被支持的原因。
更新(6个月后):我遇到了未使用CONNECT BY的类似问题。
内容的提问来源于stack exchange,提问作者DisasterArea
相关产品推荐
相关产品推荐

