Copy data from a Google Cloud Storage stage

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

Load your data

执行 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 console 中创建目录时列出的,不使用 Google 提供的任何其他工具。

COPY statements that reference a stage can fail when the object list includes directory blobs. To avoid errors, we recommend using file pattern matching to identify the files for inclusion (i.e. the PATTERN clause) when the file list for a stage includes directory blobs. For an example, see Load data using pattern matching (in this topic). Alternatively, set ON_ERROR = SKIP_FILE in the COPY statement.

Load data using pattern matching

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

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

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

Load data using a path / prefix

以下示例使用在 准备加载数据 中创建的名为 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

Load data using ad hoc file format options

以下临时示例从 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

Validate your data

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

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

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

Monitor data loads

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

  • Monitor the status of each COPY INTO <table> command on the Query History page of Snowsight.

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

Copy files from one stage to another

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

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

COPY FILES
  INTO @trg_stage
  FROM @src_stage;
Copy

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