从 Google Cloud Storage 暂存区复制数据

将暂存文件中的数据加载到目标表中。

本主题内容:

加载数据

执行 COPY INTO <table> 可将数据加载到目标表中。

备注

加载数据需要 仓库。如果您使用的仓库未配置为自动恢复,请执行 ALTER WAREHOUSE 以恢复仓库。请注意,启动仓库最多可能需要 5 分钟。

ALTER WAREHOUSE mywarehouse RESUME;
Copy

重要

为外部暂存区返回的对象列表可包括一个或多个“目录 blob”;实际上,是以正斜杠字符 (/) 结尾的路径,例如:

LIST @my_gcs_stage;

+---------------------------------------+------+----------------------------------+-------------------------------+
| name                                  | size | md5                              | last_modified                 |
|---------------------------------------+------+----------------------------------+-------------------------------|
| my_gcs_stage/load/                    |  12  | 12348f18bcb35e7b6b628ca12345678c | Mon, 11 Sep 2019 16:57:43 GMT |
| my_gcs_stage/load/data_0_0_0.csv.gz   |  147 | 9765daba007a643bdff4eae10d43218y | Mon, 11 Sep 2019 18:13:07 GMT |
+---------------------------------------+------+----------------------------------+-------------------------------+
Copy

这些 blob 是在 Google Cloud Platform 控制台中创建目录时列出的,不使用 Google 提供的任何其他工具。

当对象列表包含目录 blob 时,引用暂存区的 COPY 语句可能会失败。为了避免错误,当暂存区的文件列表包含目录 blob 时,我们建议使用文件模式匹配来识别要包含的文件(即 PATTERN 子句)。有关示例,请参阅 使用模式匹配加载数据 (本主题内容)。或者,在 COPY 语句中设置 ON_ERROR = SKIP_FILE。

使用模式匹配加载数据

以下示例从在 配置 Google Cloud Storage 集成 中创建的命名 my_gcs_stage 暂存区中的文件加载数据。使用模式匹配后,该语句仅加载名称以字符串 sales 开头的文件:

COPY INTO mytable
  FROM @my_gcs_stage
  PATTERN='.*sales.*.csv';
Copy

请注意,文件格式选项并未指定,因为暂存区定义中包含具名的文件格式。

使用路径/前缀加载数据

以下示例使用在 准备加载数据 中创建的名为 my_csv_format 的文件格式加载 Cloud Storage 桶中具有 data/files 路径(即前缀)的所有文件。请注意,路径可以与模式匹配相结合:

COPY INTO mytable
  FROM @my_gcs_stage/mybucket/data/files
  FILE_FORMAT = (FORMAT_NAME = my_csv_format);
Copy

使用临时文件格式选项加载数据

以下临时示例从 Cloud Storage 桶中的所有文件加载数据。COPY 命令指定了文件格式选项,而不是引用命名文件格式。该示例加载的是 CSV 文件,并以竖线 (|) 作为字段分隔符。COPY 命令跳过数据文件中的第一行。

请注意,临时数据加载需要存储集成参考;也就是说,当 COPY 语句不引用暂存区时:

COPY INTO mytable
  FROM 'gcs://mybucket/data/files'
  STORAGE_INTEGRATION = myint
  FILE_FORMAT = (TYPE = CSV FIELD_DELIMITER = '|' SKIP_HEADER = 1);
Copy

验证数据

在加载数据之前,您可以验证上传文件中的数据是否能正确加载。

要验证上传文件中的数据,请使用 VALIDATION_MODE 参数在验证模式下执行 COPY INTO <table>。VALIDATION_MODE 参数可返回它在文件中遇到的错误。然后,您可以修改文件中的数据,以确保其加载时没有错误。

此外,COPY INTO <table> 还提供了 ON_ERROR 复制选项,用于指定在文件加载过程中遇到错误时要执行的操作。

监控数据负载

Snowflake 可保留过去 14 天内执行的 COPY INTO 命令的历史数据。元数据可用于监控和管理加载过程,包括在上传完成后删除文件:

  • 在 Classic Console 的 History History 选项卡 页面上监控每个 COPY INTO <table> 命令的状态。

  • 使用 LOAD_HISTORY Information Schema 视图,检索通过 COPY INTO 命令加载到表中的数据的历史记录。

将文件从一个暂存区复制到另一个暂存区

使用 COPY FILES 命令,通过将文件从一个命名暂存区复制到另一个命名暂存区,来将数据组织到单个位置。

以下示例将所有文件从源暂存区 (src_stage) 复制到目标暂存区 (trg_stage):

COPY FILES
  INTO @trg_stage
  FROM @src_stage;
Copy

您还可以指定要复制的文件名列表,或使用模式匹配复制文件。有关信息,请参阅 COPY FILES 示例

语言: 中文