从内部暂存区复制数据¶
将暂存文件中的数据加载到目标表中。
本主题内容:
加载数据¶
执行 COPY INTO <table> 可将暂存数据加载到目标表中。
备注
加载数据需要 仓库。如果您使用的仓库未配置为自动恢复,请执行 ALTER WAREHOUSE 以恢复仓库。请注意,启动仓库最多可能需要 5 分钟。
ALTER WAREHOUSE mywarehouse RESUME;
用户暂存区¶
以下示例使用在 准备加载数据 中创建的命名 my_csv_format
文件格式,加载用户暂存区中所有前缀为 staged
的文件中的数据:
COPY INTO mytable from @~/staged FILE_FORMAT = (FORMAT_NAME = 'my_csv_format');
表暂存区¶
以下临时示例从 mytable
表的暂存区中的所有文件加载数据。COPY 命令指定了文件格式选项,而不是引用命名文件格式。该示例加载的是 CSV 文件,并以竖线 (|
) 作为字段分隔符。该 COPY 命令跳过了数据文件中的第一行:
COPY INTO mytable FILE_FORMAT = (TYPE = CSV FIELD_DELIMITER = '|' SKIP_HEADER = 1);
请注意,从表暂存区中的文件复制数据时,可以省略 FROM 子句,因为 Snowflake 会自动检查表暂存区中的文件。
命名暂存区¶
以下示例从 my_stage
命名暂存区中的所有文件加载数据,该暂存区是在 为本地文件选择内部暂存区 中创建的:
COPY INTO mytable from @my_stage;
请注意,不需要指定文件格式,因为它包含在暂存区定义中。
验证数据¶
在加载数据之前,您可以验证上传文件中的数据是否能正确加载。
要验证上传文件中的数据,请使用 VALIDATION_MODE 参数在验证模式下执行 COPY INTO <table>。VALIDATION_MODE 参数返回它在文件中遇到的错误。然后,您可以修改文件中的数据,以确保其加载时没有错误。
此外,COPY INTO <table> 命令的 ON_ERROR 复制选项指示在加载期间在文件中遇到错误时要执行的操作。
监控内部暂存的文件¶
Snowflake 会维护为用户、表和暂存区上传到内部暂存区的每个文件的详细元数据,包括:
文件名
文件大小(如果在上传过程中指定了压缩,则为压缩后的大小)
LAST_MODIFIED 日期,即数据文件最初暂存或上次修改时的时间戳,以较晚者为准
此外,Snowflake 会保留过去 14 天内执行的 COPY INTO 命令的历史数据。元数据可用于监控和管理加载过程,包括在上传完成后删除文件:
使用 LIST 命令可查看已暂存的数据文件的状态。
在 Classic Console 的 History 页面上监控每个 COPY INTO <table> 命令的状态。
使用 VALIDATE 函数可验证已加载的数据文件,并检索在加载过程中遇到的任何错误。
使用 LOAD_HISTORY Information Schema 视图,检索通过 COPY INTO 命令加载到表中的数据的历史记录。
管理数据文件¶
可以使用以下方法从 Snowflake 暂存区(用户暂存区、表暂存区或命名暂存区)中删除暂存文件:
通过在 COPY INTO <table> 命令中指定 PURGE 复制选项,可以在加载过程中将已成功加载的文件从暂存区中删除。
加载完成后,使用 REMOVE 命令移除暂存区中的文件。
移除文件可确保不会无意中再次加载这些文件。这还能提高加载性能,因为它减少了 COPY 命令为验证暂存区中的现有文件是否已加载而必须扫描的文件数量。
将文件从一个暂存区复制到另一个暂存区¶
使用 COPY FILES 命令,通过将文件从一个命名暂存区复制到另一个命名暂存区,来将数据组织到单个位置。
以下示例将所有文件从源暂存区 (src_stage
) 复制到目标暂存区 (trg_stage
):
COPY FILES
INTO @trg_stage
FROM @src_stage;
您还可以指定要复制的文件名列表,或使用模式匹配复制文件。有关信息,请参阅 COPY FILES 示例。