为本地文件选择内部暂存区¶
暂存区指定数据文件的存储位置(即“暂存”),以便可以将文件中的数据加载到表中。
本主题内容:
内部暂存区的类型¶
Snowflake 支持以下类型的内部暂存区:
用户
表
命名
默认情况下,Snowflake 中的每个用户和表都会自动分配一个内部暂存区,用于暂存要加载的数据文件。此外,还可以创建命名的内部暂存区。
数据加载过程的两个步骤中都需要文件暂存信息:
将文件上传到 Snowflake 时,必须在 PUT 命令中指定内部暂存区。
将数据从暂存文件加载到表中时,必须在 COPY INTO <table> 命令中指定相同的暂存区。
考虑特定数据文件的最佳暂存区类型。每个选项都有优点和潜在的缺点。
用户暂存区¶
默认情况下,每个用户都分配了一个用于存储文件的 Snowflake 暂存区。如果您的文件仅由单个用户访问,但需要复制到多个表中,则此暂存区是一个方便的选项。
用户暂存区具有以下特征和局限性:
使用
@~
引用用户暂存区;例如,使用LIST @~
列出用户暂存区的文件。与命名暂存区不同,不能更改或删除用户暂存区。
用户暂存区不支持设置文件格式选项。相反,您必须在 COPY INTO <table> 命令中指定文件格式和复制选项。
如果出现以下情况,此选项不适用:
多个用户需要访问文件。
当前用户对数据将被加载到的表没有 INSERT 权限。
表暂存区¶
备注
Snowflake 中的 Apache Iceberg™ 表不支持表暂存区。
默认情况下,每个表都分配了一个用于存储文件的 Snowflake 暂存区。该暂存区被称为 表 暂存区。
如果您只需要将文件复制到单个表中,但希望多个用户可以访问这些文件,则可以使用表暂存区。
表暂存区具有以下特征和局限性:
表暂存区与表同名。例如,名为
mytable
的表有一个作为@%mytable
引用的暂存区。表暂存区是绑定到表对象的隐式暂存区。它不是一个单独的数据库对象。表暂存区本身没有可授予的权限。如果需要将文件数据复制到多个表中,则表暂存区也不适用。
要将文件暂存到表暂存区、列出文件、查询文件或删除文件,您必须是表所有者(拥有对表具有 OWNERSHIP 权限的角色)。
与命名暂存区不同,您无法更改或删除表暂存区。
表暂存区不支持在加载数据时转换数据(使用查询作为 COPY 命令的源)。
命名暂存区¶
命名暂存区是数据库对象,可为数据加载提供最大程度的灵活性:
在暂存区中具有适当权限的用户可以将数据加载到任何表中。
由于暂存区是数据库对象,因此适用于所有对象的安全/访问规则适用。可以从角色中授予或撤消使用暂存区的权限。此外,暂存区的所有权可以转让给另一个角色。
如果您计划暂存仅由您自己加载的数据文件,或者仅将数据加载到单个表中,则您可能更愿意仅使用您的用户暂存区或要加载数据的表的暂存区。
命名暂存区是可选的,但是当您计划可能涉及多个用户和/或表的常规数据加载时,建议 使用命名暂存区。有关创建命名暂存区的说明,请参见下面的 创建命名暂存区。
创建命名暂存区¶
您可以使用 SQL 或 Web 界面创建命名的内部暂存区。
备注
要创建内部暂存区,您必须使用被授予或继承必要权限的角色。有关详细信息,请参阅 CREATE STAGE 中的 访问控制要求。
使用 SQL 创建命名暂存区¶
使用 CREATE STAGE 命令通过 SQL 创建命名暂存区。
以下示例创建一个使用服务器端加密的内部暂存区:
CREATE STAGE my_int_stage ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
使用 Snowsight 创建命名暂存区¶
要使用 Snowsight 创建命名的内部暂存区,请执行以下操作:
登录 Snowsight。
在导航菜单中,选择 Create » Stage » Snowflake Managed。
在 Create Stage 对话框中,输入 Stage Name。
选择要在其中创建暂存区的数据库和架构。
(可选)取消选择 Directory table。目录表允许您在暂存区中查看文件,但需要仓库,因此会产生费用。您可以选择暂时取消选择此选项,稍后再启用目录表。
选择暂存区中所有文件支持的 Encryption 类型。有关详细信息,请参阅 内部暂存区的加密。创建暂存区后,无法更改加密类型。
备注
要启用数据访问,请使用服务器端加密。否则,暂存文件默认为客户端加密,下载后不可读。有关更多信息,请参阅 用于非结构化数据访问的服务器端加密。
填写描述暂存区的字段。有关更多信息,请参阅 CREATE STAGE。
选择 Create。
使用 Classic Console 创建命名暂存区¶
选择 Databases » <db_name> » Stages。
下一步: 从本地文件系统暂存数据文件