ADF调用Snowflake INFER_SCHEMA创建表时出现无当前架构错误求助
解决ADF脚本活动中Snowflake INFER_SCHEMA的无当前schema错误
强制使用全限定对象名
不要依赖会话的当前schema,直接在INFER_SCHEMA和建表语句中指定完整的对象路径。示例语句:CREATE OR REPLACE TABLE YOUR_DB.YOUR_SCHEMA.YOUR_TABLE USING TEMPLATE ( SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*)) FROM TABLE(INFER_SCHEMA(LOCATION => '@YOUR_DB.YOUR_SCHEMA.YOUR_STAGE')) );这种方式直接绕过会话上下文的问题,确保Snowflake能明确识别对象所在的schema。
配置ADF Snowflake链接的默认上下文
在ADF的Snowflake链接属性中,直接设置默认数据库和默认模式,无需在脚本中添加USE语句。ADF建立会话时会自动绑定到指定的schema,INFER_SCHEMA就能正常识别上下文。拆分脚本活动为多步骤
将USE语句(USE ROLE/WAREHOUSE/DATABASE/SCHEMA)单独放在一个前置的脚本活动中执行,再运行包含INFER_SCHEMA的建表脚本。单个脚本活动中多语句的会话上下文可能存在生效延迟,拆分后能确保上下文正确初始化。修正存储过程的内部上下文
如果用存储过程实现,必须在存储过程内部显式指定schema,示例:CREATE OR REPLACE PROCEDURE YOUR_DB.YOUR_SCHEMA.CREATE_TABLE_FROM_STAGE() RETURNS VARCHAR LANGUAGE SQL AS $$ BEGIN USE SCHEMA YOUR_DB.YOUR_SCHEMA; CREATE OR REPLACE TABLE YOUR_TABLE USING TEMPLATE ( SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*)) FROM TABLE(INFER_SCHEMA(LOCATION => '@YOUR_STAGE')) ); RETURN 'SUCCESS'; END; $$;调用时也要用全限定名:
CALL YOUR_DB.YOUR_SCHEMA.CREATE_TABLE_FROM_STAGE();
内容的提问来源于stack exchange,提问作者Fernando Basaez
相关产品推荐
相关产品推荐

