如何在雪花任务语句中使用复制存储集成?
Posted
技术标签:
【中文标题】如何在雪花任务语句中使用复制存储集成?【英文标题】:How to use copy Storage Integration in a Snowflake task statement? 【发布时间】:2020-09-10 15:28:36 【问题描述】:我正在测试 SnowFlake。为此,我在 GCP 上创建了一个 SnowFlake 实例。
其中一项测试是尝试每天从 STORAGE INTEGRATION 加载数据。
为此,我生成了 STORAGE INTEGRATION 和 stage。
我测试了副本
copy into DEMO_DB.PUBLIC.DATA_BY_REGION from @sg_gcs_covid pattern='.*data_by_region.*'
一切顺利。
现在是时候使用 task 语句测试每日调度了。 我创建了这个任务:
CREATE TASK schedule_regioni
WAREHOUSE = COMPUTE_WH
SCHEDULE = 'USING CRON 42 18 9 9 * Europe/Rome'
COMMENT = 'Test Schedule'
AS
copy into DEMO_DB.PUBLIC.DATA_BY_REGION from @sg_gcs_covid pattern='.*data_by_region.*';
我启用了它:
alter task schedule_regioni resume;
我没有收到任何错误,但任务没有加载数据。 为了解决这个问题,我必须将 copy 放在存储过程中,并插入存储过程的调用而不是副本:
DROP TASK schedule_regioni;
CREATE TASK schedule_regioni
WAREHOUSE = COMPUTE_WH
SCHEDULE = 'USING CRON 42 18 9 9 * Europe/Rome'
COMMENT = 'Test Schedule'
AS
call sp_upload_c19_regioni();
问题是:这是一种期望的行为还是一个问题(如我所料)?
谁能给我一些这方面的信息?
【问题讨论】:
您不需要 SP。我认为您在某处有权限问题。直接用COPY INTO而不是SP执行任务时,你有输出吗? 【参考方案1】:我刚刚尝试过(但在 AWS S3 上使用了存储集成和阶段),并且在任务的 sql 部分中使用复制命令也可以正常工作,而无需调用存储过程。 为了开始调查这个问题,我会检查以下信息(也许为了调试,我会创建每隔几分钟安排一次的任务):
检查task_history并验证执行情况
select *
from table(information_schema.task_history(
scheduled_time_range_start=>dateadd('hour',-1,current_timestamp()),
result_limit => 100,
task_name=>'YOUR_TASK_NAME'));
如果上一步成功,检查copy_history并验证输入文件名、目标表和记录/错误数是否符合预期
SELECT *
FROM TABLE (information_schema.copy_history(TABLE_NAME => 'YOUR_TABLE_NAME',
start_time=> dateadd(hours, -1, current_timestamp())))
ORDER BY 3 DESC;
检查执行sp调用任务时得到的结果是否相同。
还请确认您正在使用 COPY 命令加载尚未加载到表中的新文件(否则您需要在复制命令中指定 FORCE = TRUE 参数或删除截断目标表的元数据信息以重新加载相同的文件)。
【讨论】:
嗨,我理解我的错,我改变了任务但我没有恢复它!感谢您的支持。以上是关于如何在雪花任务语句中使用复制存储集成?的主要内容,如果未能解决你的问题,请参考以下文章