批量数据加载故障排除¶
本主题介绍排查批量数据加载问题的方法。
本主题内容:
数据加载失败¶
第 1 步:查看表的 COPY 历史记录¶
查询表的加载活动历史记录。有关信息,请参阅 COPY_HISTORY。STATUS
列指明一组特定文件是已加载、部分加载还是加载失败。FIRST_ERROR_MESSAGE
列提供尝试部分加载或加载失败的原因。
请注意,如果一组文件存在多个问题,则 FIRST_ERROR_MESSAGE
列仅指明遇到的第一个错误。要查看文件中的所有错误,请参阅 第 2 步:验证数据加载 以获取说明。
第 2 步:验证数据加载¶
VALIDATION_MODE 复制选项指示 COPY 语句验证要加载的数据并根据指定的验证选项返回结果。指定此复制选项时,不会加载任何数据。有关复制选项的更多信息,请参阅 COPY INTO <table>。
执行 VALIDATION_MODE 复制选项设置为 RETURN_ALL_ERRORS
的 COPY 语句。在语句中,引用您尝试加载的一组文件。
下面的示例验证一组包含错误的文件。为了便于分析错误, COPY INTO <location> 语句随后会将有问题的记录卸载到文本文件中,以便可以在原始数据文件中对其分析和修复。该语句查询 RESULT_SCAN 表函数以检索记录。请注意,本节中的语句必须连续运行,以便使用 LAST_QUERY_ID 函数检索适用的记录。
COPY INTO mytable
FROM @mystage/myfile.csv.gz
VALIDATION_MODE=RETURN_ALL_ERRORS;
SET qid=last_query_id();
COPY INTO @mystage/errors/load_errors.txt FROM (SELECT rejected_record FROM TABLE(result_scan($qid)));
其他问题¶
错误:找不到与暂存区 {1}
关联的集成 {0}
¶
003139=SQL compilation error:\nIntegration ''{0}'' associated with the stage ''{1}'' cannot be found.
当外部暂存区与链接到该暂存区的存储集成之间的关联中断时,可能会发生此错误。当(使用 CREATE OR REPLACE STORAGE INTEGRATION)重新创建存储集成对象时,会发生这种情况。暂存区使用隐藏 ID(而不是存储集成的名称)链接到存储集成。在后台,CREATE OR REPLACE 语法会删除对象,并使用其他隐藏 ID 重新创建对象。
如果将存储集成链接到一个或多个暂存区后,必须重新创建该存储集成,则必须通过执行 ALTER STAGE stage_name
SET STORAGE_INTEGRATION = storage_integration_name
来重新建立每个暂存区与存储集成之间的关联,其中:
stage_name
是暂存区的名称。storage_integration_name
是存储集成的名称。
使用 CURRENT_TIMESTAMP 插入的加载时间早于 COPY_HISTORY 视图中的 LOAD_TIME 值¶
表设计者可以添加一个时间戳列,该列在记录加载到表中时插入当前时间戳作为默认值。目的是获取将每条记录加载到表中的时间;但是,时间戳早于 COPY_HISTORY 函数 (Information Schema) 或 COPY_HISTORY 视图 (Account Usage) 返回的 LOAD_TIME 列值。原因是,CURRENT_TIMESTAMP 在云服务中编译加载操作时,而不是在将记录插入表中时(即提交加载操作的事务时)进行评估。
建议改为包括和查询 METADATA$START_SCAN_TIME,这样会更准确地表示记录加载。