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