为本地文件选择内部暂存区

暂存区指定数据文件的存储位置(即“暂存”),以便可以将文件中的数据加载到表中。

本主题内容:

内部暂存区的类型

Snowflake 支持以下类型的内部暂存区:

  • 用户

  • 命名

默认情况下,Snowflake 中的每个用户和表都会自动分配一个内部暂存区,用于暂存要加载的数据文件。此外,还可以创建命名的内部暂存区。

数据加载过程的两个步骤中都需要文件暂存信息:

  1. 将文件上传到 Snowflake 时,必须在 PUT 命令中指定内部暂存区。

  2. 将数据从暂存文件加载到表中时,必须在 COPY INTO <table> 命令中指定相同的暂存区。

考虑特定数据文件的最佳暂存区类型。每个选项都有优点和潜在的缺点。

用户暂存区

默认情况下,每个用户都分配了一个用于存储文件的 Snowflake 暂存区。如果您的文件仅由单个用户访问,但需要复制到多个表中,则此暂存区是一个方便的选项。

用户暂存区具有以下特征和局限性:

  • 使用 @~ 引用用户暂存区;例如,使用 LIST @~ 列出用户暂存区的文件。

  • 与命名暂存区不同,不能更改或删除用户暂存区。

  • 用户暂存区不支持设置文件格式选项。相反,您必须在 COPY INTO <table> 命令中指定文件格式和复制选项。

如果出现以下情况,此选项不适用:

  • 多个用户需要访问文件。

  • 当前用户对数据将被加载到的表没有 INSERT 权限。

表暂存区

备注

Iceberg Tables 不支持表暂存区。

默认情况下,每个表都分配了一个用于存储文件的 Snowflake 暂存区。该暂存区被称为 暂存区。

如果您只需要将文件复制到单个表中,但希望多个用户可以访问这些文件,则可以使用表暂存区。

表暂存区具有以下特征和局限性:

  • 表暂存区与表同名。例如,名为 mytable 的表有一个作为 @%mytable 引用的暂存区。

  • 表暂存区是绑定到表对象的隐式暂存区。它不是一个单独的数据库对象。表暂存区本身没有可授予的权限。如果需要将文件数据复制到多个表中,则表暂存区也不适用。

  • 要将文件暂存到表暂存区、列出文件、查询文件或删除文件,您必须是表所有者(拥有对表具有 OWNERSHIP 权限的角色)。

  • 与命名暂存区不同,您无法更改或删除表暂存区。

  • 表暂存区不支持在加载数据时转换数据(使用查询作为 COPY 命令的源)。

命名暂存区

命名暂存区是数据库对象,可为数据加载提供最大程度的灵活性:

  • 在暂存区中具有适当权限的用户可以将数据加载到任何表中。

  • 由于暂存区是数据库对象,因此适用于所有对象的安全/访问规则适用。可以从角色中授予或撤消使用暂存区的权限。此外,暂存区的所有权可以转让给另一个角色。

如果您计划暂存仅由您自己加载的数据文件,或者仅将数据加载到单个表中,则您可能更愿意仅使用您的用户暂存区或要加载数据的表的暂存区。

命名暂存区是可选的,但是当您计划可能涉及多个用户和/或表的常规数据加载时,建议 使用命名暂存区。有关创建命名暂存区的说明,请参见下面的 创建命名暂存区

创建命名暂存区

您可以使用 SQL 或 Web 界面创建命名的内部暂存区。

备注

您必须使用被授予或继承对存储暂存区的数据库和架构的 USAGE 权限以及对架构的 CREATE STAGE 权限的角色。

有关 CREATE STAGE,请参阅 访问控制要求

使用 SQL 创建命名暂存区

使用 CREATE STAGE 命令通过 SQL 创建命名暂存区。

以下示例创建一个内部暂存区,该暂存区引用在 准备加载数据 时创建的名为 my_csv_format 的命名文件格式对象:

CREATE OR REPLACE STAGE my_stage
  FILE_FORMAT = my_csv_format;
Copy

备注

通过为暂存区指定命名的文件格式对象(或单个文件格式选项),以后就不必在用于从暂存区加载数据的 COPY 命令中指定相同的文件格式选项。

下面的示例创建一个内部暂存区,该暂存区指定临时文件格式选项,而不是引用命名文件格式。此暂存区的数据文件具有 CSV 格式和管道(|)字段分隔符。引用此暂存区时,COPY 命令将跳过数据文件中的第一行:

CREATE OR REPLACE STAGE my_stage
  file_format = (type = 'CSV' FIELD_DELIMITER = '|' SKIP_HEADER = 1);
Copy

使用 Snowsight 创建命名暂存区

要使用 Snowsight 创建命名的内部暂存区,请执行以下操作:

  1. 登录 Snowsight。

  2. 在导航菜单中,选择 Create » Stage » Snowflake Managed

  3. Create Stage 对话框中,输入 Stage Name

  4. 选择要在其中创建暂存区的数据库和架构。

  5. (可选)取消选择 Directory table。目录表允许您在暂存区中查看文件,但需要仓库,因此会产生费用。您可以选择暂时取消选择此选项,稍后再启用目录表。

  6. 选择暂存区中所有文件支持的 Encryption 类型。有关详细信息,请参阅 内部暂存区的加密。创建暂存区后,无法更改加密类型。

    备注

    若要启用数据访问,建议选择服务器端加密。否则,暂存文件默认是客户端加密的,下载时不可读。有关更多信息,请参阅 用于非结构化数据访问的服务器端加密

  7. 填写描述暂存区的字段。有关更多信息,请参阅 CREATE STAGE

  8. 选择 Create

使用 Classic Console 创建命名暂存区

选择 Databases Databases 选项卡 » <db_name> » Stages

下一步: 从本地文件系统暂存数据文件

语言: 中文