Snowflake Data Clean Rooms 故障排除¶
本页是使用 Clean Room 时的一般故障排除指南。如果您正在使用 API,请务必阅读您调用的任何过程的参考文档以及用例指南,以查看其中是否涵盖了您的问题。
如果您是开发者,请参阅 开发者故障排除指南 了解更多信息。
安装问题¶
Analysis and template issues¶
- 错误:
Failure during expansion of shared view <CLEAN ROOM VIEW NAME> as view owner:Insufficient permission to resolve external/iceberg table <TABLE_NAME> shared by application SAMOOHA_CLEANROOM_APP_<CLEAN ROOM ID>- 原因:
您正在尝试访问外部表或 Iceberg 表,但提供商和使用者的账户中均未启用外部表和 Iceberg 表。
- 解决方案:
确保提供商和使用者账户都 已启用外部表和 Iceberg 表。
- 错误:
SQL compilation error:Failure during expansion of shared view '<CLEAN ROOM VIEW NAME>' as view owner:Object '<some object name>' does not exist or not authorized.- 原因:
您尝试访问的数据集上不再存在 Clean Room 授权。这很可能是因为源对象已被重命名或替换。
- 解决方案:
如果表已重命名,请将名称更改回 Clean Room 中链接的名称。您可能还需要重新注册该对象。
如果重新创建了表,请在 Clean Room 中再次注册对象。
- 错误:
Query returns zero results and you think that's wrong.
- 可能的原因和解决方案:
确认双方都没有对数据采取可能阻止联接或显示的掩码策略。
确认联接列的格式相同。
Confirm that you are not falling below any fixed threshold settings. The audience overlap has a default threshold of five, meaning that fewer than five rows will be omitted from the results. Ask the provider what the threshold is, and confirm whether you have any overlaps greater than that number; temporarily modify the overlap specifications to guarantee large segment groups to see whether you get results then.
- 错误:
Uncaught exception of type 'STATEMENT_ERROR' ... SQL compilation error: invalid URL prefix found ...- 原因:
模板使用字符串值(而不是标识符)作为列名或表名。当模板未通过使用
sqlsafe过滤器或IDENTIFIER函数将字符串变量正确转换为标识符时,就会发生这种情况。例如,将
p.col1传递给模板SELECT {{ my_column }} ...中的my_column会解析为SELECT "p.col1" ...。“p.col1”是一个字符串,而不是有效的标识符(且p.被解释为 URL 前缀)。- 解决方案:
向变量应用 IDENTIFIER 函数(首选)或
sqlsafe筛选条件:SELECT IDENTIFIER({{ my_column }}) ...(首选)SELECT {{ my_column | sqlsafe }} ...
- 错误:
**FAILURE**: Unauthorized columns: column_name- 原因:
您的查询使用了协作者数据中的某一列,但该列不在 Clean Room 中协作者的使用策略范围内。例如,您正尝试对协作者数据中不在其列策略范围内的某一列执行 SELECT 操作。
- 解决方案:
使用协作者已批准在查询中投影、联接或激活的列。通过调用
consumer.view_template_definition检查模板中的策略过滤器,然后通过调用consumer.view_provider_join_policy或consumer.view_provider_column_policy查看提供商允许您投影或联接哪些列。最后,要么更新查询以传入已批准的列,要么要求协作者调整其使用策略以包含您要使用的列。
- 错误:
**FAILURE**: Invalid aliases: P.column name'或**FAILURE**: Invalid aliases: C.column name'- 原因:
您正在使用大写的
P或C表别名来限定列名。在限定列名时,必须使用小写的p或c别名。(在 声明 别名时,模板本身可以使用大写或小写。)- 解决方案:
在确定列的作用域时,始终使用小写别名。
示例:
-- Always scope the column name with a lowercase alias. -- The casing of the alias declared for the table doesn't matter. -- These will fail. SELECT P.hashed_email FROM mydb.mysch.t1 AS P; SELECT P.hashed_email FROM mydb.mysch.t1 AS p; -- These will succeed. SELECT p.hashed_email FROM mydb.mysch.t1 AS P; SELECT p.hashed_email FROM mydb.mysch.t1 AS p;
- 错误:
**FAILURE**: Invalid aliases: database name.schema name.column name- 原因:
您必须始终使用为表声明的
p或c别名来引用列。列不能通过表的完整路径来引用该表。无效:
SELECT hashed_email FROM mydb.mysch.t1;- 解决方案:
引用列时,请使用
p或 ``c``(小写!)表别名:有效:
SELECT p.hashed_email FROM mydb.mysch.t1 AS p;
跨云问题¶
- 错误:
Analysis Execution Failure: 'SnowparkSQLException' due to Database Listing Conflict存在于单账户测试 Clean Room 中- 原因:
单账户测试 Clean Room 不支持 Cross-Cloud Auto-Fulfillment。
- 解决方案:
在测试期间,通过调用
library.disable_laf_on_account禁用此 Clean Room 账户中的 Cross-Cloud Auto-Fulfillment,或者不要尝试在此 Clean Room 中进行跨云过程调用。
云数据连接器问题¶
如果您在使用 AWS、Azure 或 Google Cloud Storage 的外部数据连接器时遇到问题,请参阅 Snowflake Data Clean Rooms:外部数据连接器故障排除。
请求日志问题¶
- 错误:
**Failure**: Request logs unable to be mounted. Try again.- 原因:
内部 Clean Room 的挂载请求日志成功,但同一账户中外部 Clean Room 的挂载请求日志失败。内部 Clean Room 的要求少于外部 Clean Room。您的安装满足使用内部 Clean Room 的要求,但不满足使用外部 Clean Room 的要求。
- 解决方案:
确认您的电子邮件已通过 Clean Room 的验证,并且您满足了所有 Clean Room 账户要求。
数据访问问题¶
有关数据访问问题的一般准则¶
您可能会收到一条错误消息,报告在使用流程中的几个时间点无法访问数据源:
如果在注册过程中发生错误:
如果使用 API,则可能是您拼写错误了表名或路径。
如果是外部表或 Iceberg 表,请确认您已满足注册外部表或 Iceberg 表的 要求和过程。
请确认您当前的角色对要注册的对象拥有 OWNERSHIP 权限。
如果在链接过程中发生错误:
在 API 中,您可能使用了错误的角色。
该对象可能尚未注册。在 API 中,如果尝试链接未注册的对象,则会看到错误。在 UI 中,您应该只能看到已注册为可用于链接的对象。
确认 SAMOOHA_APP_ROLE 对您的对象有 USAGE 和 SELECT 权限。
自注册以来,该表可能已移动、重命名或更改了其权限(或任何 Snowflake 策略权限)。发生这种情况时,您可能还会看到以下错误:
SQL access control error:Insufficient privileges to operate on table...
如果在成功注册和链接数据后发生错误:
如果使用 API,确认完全限定表名拼写正确。
Data access errors¶
- 错误:
Object '<some_object_name>' does not exist or not authorized- 原因:
源表可能已移动、重命名,或更改了其权限(或对其依赖的策略或祖先对象的权限)。
- 解决方案:
尝试在账户中重新注册和重新链接对象,将对象移回旧位置,或者恢复添加的任何其他权限。
- 错误:
Insufficient permission to resolve external/iceberg table- 原因:
如果查询涉及外部表或 Iceberg 表,则表示该表未正确注册。
- 解决方案:
请参阅 启用外部表和 Apache Iceberg™ 表,以确保您满足使用这些表类型的要求和过程。有时可以通过显式授予 SAMOOHA_BY_SNOWFLAKE 对该表的 SELECT 权限来解决此问题。
- 错误:
运行分析导致
not approved:unauthorized columns used错误- 原因:
您正在根据协作者的联接或列策略联接或投影协作者的列。
- 解决方案:
通过调用
consumer.view_provider_column_policy和consumer.view_provider_join_policy查看协作者设置的联接和列策略。CALL samooha_by_snowflake_local_db.consumer.view_provider_join_policy($cleanroom_name); CALL samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);
您可能还用尽了隐私预算:
CALL samooha_by_snowflake_local_db.consumer.view_remaining_privacy_budget($cleanroom_name);
- 错误:
当使用者调用任何需要 Clean Room 名称并获取
Application 'SAMOOHA_CLEANROOM_APP<某些名称>' does not exist or not authorized.的过程时- 原因:
如果 Clean Room 名称显示为
SAMOOHA_CLEANROOM_APP<cleanroom name>而非SAMOOHA_CLEANROOM_APP_<cleanroom name>`(在 ``SAMOOHA_CLEANROOM_APP`后缺少下划线),则表明 提供商 未在其账户中正确安装 Clean Room 环境。- 解决方案:
告知提供商应按照此处的说明在账户中安装 Clean Room 环境:安装 Snowflake Data Clean Rooms 环境。之后,提供商可以重新创建和共享 Clean Room。
外部表和 Iceberg 表问题¶
- 错误:
Failure during expansion of shared view <CLEAN ROOM VIEW NAME> as view owner:Insufficient permission to resolve external/iceberg table <TABLE_NAME> shared by application SAMOOHA_CLEANROOM_APP_<CLEAN ROOM ID>- 原因:
外部表或 Iceberg 表未在提供商和使用者账户中启用。
- 解决方案:
确保提供商和使用者账户都 已启用外部表和 Iceberg 表。
- 错误:
使用者在链接外部表或 Iceberg 表时收到
Invalid restricted feature 'external_data'。- 原因:
提供商尚未启用外部表和 Iceberg 表。
- 解决方案:
提供商必须完成 为其账户启用外部表和 Iceberg 表 的过程。如果他们通过代码实现此操作,提供商必须检查安全扫描结果,如果成功,则必须更新默认发布版本。
- 错误:
运行涉及外部表或 Iceberg 表的分析时收到
Insufficient permission to resolve external/iceberg table错误。- 原因:
提供商和使用者都可能未正确注册该表。
- 解决方案:
读取外部表和 Iceberg 表注册信息 并确保遵循提供商和使用者双方的所有说明。