CREATE STAGE¶
创建一个名为 * 内部 * 或 * 外部 * 的新暂存区,用于将数据从文件加载到 Snowflake 表中,并将数据从表中卸载到文件中:
- 内部暂存区:
将数据文件存储在 Snowflake 内。内部暂存区可以是永久性的,也可以是临时的。有关更多详细信息,请参阅 为本地文件选择内部暂存区。
- 外部暂存区:
引用在 Snowflake 外部位置存储的数据文件。目前支持以下云存储服务:
Amazon S3 桶
Google Cloud Storage 桶
Microsoft Azure 容器
存储位置可以是私有/受保护的,也可以是公用的。
您不能访问存档云存储类别中保存的数据,这些数据需要恢复后才能检索。例如,这些存档存储类别包括 Amazon S3 Glacier Flexible Retrieval 或 Glacier Deep Archive 存储类别,或者 Microsoft Azure Archive Storage。
内部或外部暂存区均可包含 * 目录表 *。目录表 将暂存文件的目录存储在云存储中。
语法¶
-- Internal stage
CREATE [ OR REPLACE ] [ { TEMP | TEMPORARY } ] STAGE [ IF NOT EXISTS ] <internal_stage_name>
internalStageParams
directoryTableParams
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
-- External stage
CREATE [ OR REPLACE ] [ { TEMP | TEMPORARY } ] STAGE [ IF NOT EXISTS ] <external_stage_name>
externalStageParams
directoryTableParams
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
其中:
internalStageParams ::= [ ENCRYPTION = (TYPE = 'SNOWFLAKE_FULL' | TYPE = 'SNOWFLAKE_SSE') ]externalStageParams (for Amazon S3) ::= URL = { 's3://<bucket>[/<path>/]' | 's3gov://<bucket>[/<path>/]' } [ { STORAGE_INTEGRATION = <integration_name> } | { CREDENTIALS = ( { { AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' [ AWS_TOKEN = '<string>' ] } | AWS_ROLE = '<string>' } ) } ] [ ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '<string>' ] | [ TYPE = 'AWS_SSE_S3' ] | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] ] | [ TYPE = 'NONE' ] ) ]externalStageParams (for Google Cloud Storage) ::= URL = 'gcs://<bucket>[/<path>/]' [ STORAGE_INTEGRATION = <integration_name> ] [ ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = '<string>' ] | [ TYPE = 'NONE' ] ) ]externalStageParams (for Microsoft Azure) ::= URL = 'azure://<account>.blob.core.windows.net/<container>[/<path>/]' [ { STORAGE_INTEGRATION = <integration_name> } | { CREDENTIALS = ( [ AZURE_SAS_TOKEN = '<string>' ] ) } ] [ ENCRYPTION = ( [ TYPE = 'AZURE_CSE' ] [ MASTER_KEY = '<string>' ] | [ TYPE = 'NONE' ] ) ]externalStageParams (for Amazon S3-compatible Storage) ::= URL = 's3compat://{bucket}[/{path}/]' ENDPOINT = '<s3_api_compatible_endpoint>' [ { CREDENTIALS = ( AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' ) } ]directoryTableParams (for internal stages) ::= [ DIRECTORY = ( ENABLE = { TRUE | FALSE } [ REFRESH_ON_CREATE = { TRUE | FALSE } ] ) ]directoryTableParams (for Amazon S3) ::= [ DIRECTORY = ( ENABLE = { TRUE | FALSE } [ REFRESH_ON_CREATE = { TRUE | FALSE } ] [ AUTO_REFRESH = { TRUE | FALSE } ] ) ]directoryTableParams (for Google Cloud Storage) ::= [ DIRECTORY = ( ENABLE = { TRUE | FALSE } [ AUTO_REFRESH = { TRUE | FALSE } ] [ REFRESH_ON_CREATE = { TRUE | FALSE } ] [ NOTIFICATION_INTEGRATION = '<notification_integration_name>' ] ) ]directoryTableParams (for Microsoft Azure) ::= [ DIRECTORY = ( ENABLE = { TRUE | FALSE } [ REFRESH_ON_CREATE = { TRUE | FALSE } ] [ AUTO_REFRESH = { TRUE | FALSE } ] [ NOTIFICATION_INTEGRATION = '<notification_integration_name>' ] ) ]
备注
不要使用 CREATE STAGE、ALTER STAGE、CREATE TABLE 或 ALTER TABLE 命令指定文件格式选项或复制选项。建议您使用 COPY INTO <table> 命令指定文件格式选项或复制选项。
必填参数¶
internal_stage_name
或 .external_stage_name
指定暂存区的标识符;对于在其中创建暂存区的架构来说,此标识符必须唯一。
此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object"
)。放在双引号内的标识符也区分大小写。有关更多详细信息,请参阅 标识符要求。
备注
创建外部暂存区时,还需要提供 URL。有关更多详细信息,请参阅 :ref:` 外部暂存区参数 <label-create_stage_externalstageparams>` (本主题内容)。
如果未指定 URL,Snowflake 默认会创建内部暂存区。
可选参数¶
{ TEMP | TEMPORARY }
指定所创建是临时暂存区,将在创建该暂存区的会话结束时删除。注意:
在临时 * 外部 * 暂存区被删除时,删除的只有暂存区本身;数据文件不会被移除。
在临时 * 内部 * 暂存区被删除时,暂存区内的所有文件都会从 Snowflake 中被清除,无论其加载状态如何。这可以防止处于临时内部暂存区的文件占用数据存储,从而产生存储费用。但这也意味着一旦暂存区被删除,就无法通过 Snowflake 恢复暂存文件。
小技巧
如果计划创建和使用临时内部暂存区,则应在 Snowflake 之外维护数据文件的副本。
COMMENT = 'string_literal'
为暂存区指定注释。
默认:无值
内部暂存区参数 (internalStageParams
)¶
[ ENCRYPTION = (TYPE = 'SNOWFLAKE_FULL' | TYPE = 'SNOWFLAKE_SSE') ]
指定暂存区上存储的所有文件支持的加密类型。创建暂存区后,无法更改加密类型。
TYPE = ...
指定使用的加密类型。
可能的值:
SNOWFLAKE_FULL
:客户端和服务器端加密。在客户端使用 PUT 将文件上传到内部暂存区时,由客户端对这些文件进行加密。Snowflake 默认使用 128 位加密密钥。可以通过设置 CLIENT_ENCRYPTION_KEY_SIZE 参数来配置 256 位密钥。所有文件也都会使用服务器端的 AES-256 强加密机制自动加密。
SNOWFLAKE_SSE
:仅限服务器端加密。当文件到达暂存区时,您的 Snowflake 账户所在的云服务会对其进行加密。如果计划查询暂存文件的预签名 URLs,请指定服务器端加密。有关更多信息,请参阅 可用于访问文件的 URLs 类型。
默认:
SNOWFLAKE_FULL
外部暂存区参数 (externalStageParams
)¶
URL = 'cloud_specific_url'
如果省略此参数,Snowflake 将创建一个内部暂存区
重要
将 URL 放在单引号 (
''
) 内,以便 Snowflake 识别字符串。如果省略了引号,您提供的任何凭据都可能以纯文本形式显示在历史记录中。强烈建议在执行 CREATE STAGE 语句之前验证其语法。在 Snowflake Web 界面中创建暂存区时,该界面会按需自动将字段值放在引号字符之间。
追加正斜杠 (
/
) 到 URL,以筛选到指定的文件夹路径。如果省略正斜杠,则包含以指定路径的前缀开头的所有文件和文件夹。请注意,必须添加 正斜杠才能访问和检索暂存区中的非结构化数据文件。
Amazon S3
URL = { 's3://{bucket}[/{path}/]' | 's3gov://{bucket}[/{path}/]' }
指定用于存储数据文件以进行加载/卸载的外部位置(现有 S3 桶)的 URL,其中:
s3
前缀代表公共 AWS 区域中的 S3 存储。s3gov
前缀代表 政府区域 中的 S3 存储。请注意,目前只能通过在 AWS 的同一政府区域上托管的 Snowflake 账户,使用存储集成访问政府区域中的 AWS S3 存储。支持使用直接凭据从政府区域之外托管的账户访问 S3 存储。bucket
是 S3 桶的名称。path
是云存储位置中文件(即文件的名称以通用字符串开头)的可选区分大小写的路径,用于限制文件集。不同的云存储服务也可以将路径称为 前缀 或 文件夹。
Google Cloud Storage
URL = 'gcs://bucket[/path/]'
指定用于存储数据文件以进行加载/卸载的外部位置(现有 GCS 桶)的 URL,其中:
bucket
是 GCS 桶的名称。path
是云存储位置中文件(即文件的名称以通用字符串开头)的可选区分大小写的路径,用于限制文件集。不同的云存储服务也可以将路径称为 前缀 或 文件夹。
Microsoft Azure
URL = 'azure://account.blob.core.windows.net/container[/path/]'
指定用于存储数据文件以进行加载的外部位置(现有 Azure 容器)的 URL,其中:
account
是 Azure 账户的名称(例如myaccount
)。将blob.core.windows.net
端点用于所有受支持类型的 Azure Blob 存储账户,包括 Data Lake Storage Gen2。请注意,目前只能通过在 Azure 同一政府区域中托管的 Snowflake 账户,使用存储集成访问 政府区域 中的 Azure Blob 存储。支持使用直接凭据从政府区域外部托管的账户访问 Blob 存储。
container
是 Azure 容器的名称(例如mycontainer
)。path
是云存储位置中文件(即文件的名称以通用字符串开头)的可选区分大小写的路径,用于限制文件集。不同的云存储服务也可以将路径称为 前缀 或 文件夹。
默认:无值(创建内部暂存区)
STORAGE_INTEGRATION = integration_name
或 .CREDENTIALS = ( cloud_specific_credentials )
仅有私有/受保护的存储位置才需要;公共存储桶/容器不需要
Amazon S3
STORAGE_INTEGRATION = integration_name
指定将外部云存储的身份验证责任委托给 Snowflake Identity and Access Management (IAM) 实体的存储集成的名称。有关更多详细信息,请参阅 CREATE STORAGE INTEGRATION。
备注
我们强烈建议使用存储集成。此选项避免了在创建暂存或加载数据时使用 CREDENTIALS 参数提供云存储凭据的需要。
只能通过在 AWS 同一政府区域中托管的 Snowflake 账户,使用存储集成访问政府区域中的 S3 存储。支持使用直接凭据从政府区域之外托管的账户访问 S3 存储。
CREDENTIALS = ( AWS_KEY_ID = 'string' AWS_SECRET_KEY = 'string' [ AWS_TOKEN = 'string' ] )
或 .CREDENTIALS = ( AWS_ROLE = 'string' )
指定用于连接 AWS 和访问暂存要加载/卸载的文件的私有/受保护的 S3 桶的安全凭证。有关更多信息,请参阅 配置对 Amazon S3 的安全访问。
您指定的凭证取决于您是否将桶的 Snowflake 访问权限与 AWS IAM (Identity & Access Management) 用户或角色关联:
IAM ** 用户: ** IAM 凭据是必需的。临时(又名“作用域”)凭据由 AWS Security Token Service (STS) 生成,由三个组件组成:
AWS_KEY_ID
AWS_SECRET_KEY
AWS_TOKEN
访问专用/受保护的桶 需要 这三个组件。指定时间段后,临时凭证将过期,无法再使用。然后,您必须生成一组新的有效临时凭据。
重要
COPY 命令还允许使用永久(又名“长期”)凭据;但是,出于安全原因,Snowflake 不 建议使用它们。如果必须使用永久凭据,Snowflake 建议定期为外部暂存区生成新的永久凭据。
IAM 角色: 省略安全凭证和访问密钥,而是使用
AWS_ROLE
并指定 AWS 角色 ARN (Amazon Resource Name) 来标识角色。
Google Cloud Storage
STORAGE_INTEGRATION = integration_name
指定将外部云存储的身份验证责任委托给 Snowflake Identity and Access Management (IAM) 实体的存储集成的名称。有关更多详细信息,请参阅 CREATE STORAGE INTEGRATION。
Microsoft Azure
STORAGE_INTEGRATION = integration_name
指定将外部云存储的身份验证责任委托给 Snowflake Identity and Access Management (IAM) 实体的存储集成的名称。有关更多详细信息,请参阅 CREATE STORAGE INTEGRATION。
备注
我们强烈建议使用存储集成。此选项避免了在创建暂存或加载数据时使用 CREDENTIALS 参数提供云存储凭据的需要。
使用存储集成访问 政府区域 中的 Azure Blob 存储时,只能使用 Azure 在同一政府区域中托管的 Snowflake 账户。支持使用直接凭据从政府区域外部托管的账户访问 Blob 存储。
CREDENTIALS = ( AZURE_SAS_TOKEN = 'string' )
指定 SAS(共享访问签名)令牌,用于连接到 Azure 并访问暂存包含已加载数据的文件的专用/受保护容器。凭据由 Azure 生成。
默认:无值(未为外部暂存区提供凭据)
ENCRYPTION = ( cloud_specific_encryption )
仅从加密文件加载/卸载时需要;如果存储位置和文件未加密,则不需要
- 数据加载:
修改用于解密存储位置中的加密文件和提取数据的加密设置。
- 数据卸载:
修改用于加密卸载到存储位置的文件的加密设置。
Amazon S3
ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '<string>' ] | [ TYPE = 'AWS_SSE_S3' ] | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] ] | [ TYPE = 'NONE' ] )
TYPE = ...
指定使用的加密类型。可能的值:
AWS_CSE
:客户端加密(需要一个MASTER_KEY
值)。目前,您提供的客户端 ` 主密钥 <https://csrc.nist.gov/glossary/term/master_key (https://csrc.nist.gov/glossary/term/master_key)>`_ 只能是对称密钥。请注意,当提供MASTER_KEY
值时,Snowflake 假定TYPE = AWS_CSE
(即,当提供MASTER_KEY
值时,不需要TYPE
)。AWS_SSE_S3
:不需要其他加密设置的服务器端加密。AWS_SSE_KMS
:接受可选的KMS_KEY_ID
值服务端加密。
有关加密类型的详细信息,请参阅 ` 客户端加密 <http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html (http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html)>`_ 或 ` 服务器端加密 <http://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html (http://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html)>`_ 的 AWS 文档。
NONE
:无加密。
MASTER_KEY = 'string'
(仅适用于AWS_CSE
加密)指定用于加密桶中文件的客户端主密钥。主密钥必须是 Base64 编码形式的 128 位或 256 位密钥。
KMS_KEY_ID = 'string'
(仅适用于AWS_SSE_KMS
加密)(可选)指定用于加密 卸载 到桶中的文件的 AWS KMS 托管密钥的 ID。如果未提供任何值,则默认 KMS 密钥 ID 用于在卸载时加密文件。
请注意,数据加载时会忽略此值。
Google Cloud Storage
ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' | 'NONE' ] [ KMS_KEY_ID = 'string' ] )
TYPE = ...
指定使用的加密类型。可能的值:
GCS_SSE_KMS
:接受可选的KMS_KEY_ID
值服务端加密。有关更多信息,请参阅 Google Cloud Platform 文档:
https://cloud.google.com/storage/docs/encryption/customer-managed-keys (https://cloud.google.com/storage/docs/encryption/customer-managed-keys)
https://cloud.google.com/storage/docs/encryption/using-customer-managed-keys (https://cloud.google.com/storage/docs/encryption/using-customer-managed-keys)
NONE
:无加密。
KMS_KEY_ID = 'string'
(仅适用于GCS_SSE_KMS
加密)(可选)指定用于加密 卸载 到桶中的文件的 Cloud KMS 托管密钥的 ID。如果未提供任何值,则桶中默认设置的 KMS 密钥 ID 用于在卸载时加密文件。
请注意,数据加载时会忽略此值。如果服务账户有足够的权限来解密桶中的数据,则加载操作应会成功。
Microsoft Azure
ENCRYPTION = ( [ TYPE = 'AZURE_CSE' | 'NONE' ] [ MASTER_KEY = 'string' ] )
TYPE = ...
指定使用的加密类型。可能的值:
AZURE_CSE
:客户端加密(需要一个 MASTER_KEY 值)。有关信息,请参阅 Microsoft Azure 文档中的 ` 客户端加密信息 <https://docs.microsoft.com/en-us/azure/storage/common/storage-client-side-encryption (https://docs.microsoft.com/en-us/azure/storage/common/storage-client-side-encryption)>`_。NONE
:无加密。
MASTER_KEY = 'string'
(仅适用于 AZURE_CSE 加密)指定用于加密或解密文件的客户端主密钥。主密钥必须是 Base64 编码形式的 128 位或 256 位密钥。
兼容 Amazon S3 的存储的外部暂存区参数 (externalStageParams
)¶
URL = 's3compat://bucket[/path/]'
指定用于存储数据文件的外部位置(使用 S3 兼容 API 端点访问的现有桶)的 URL,其中:
bucket
是桶的名称。
path
是云存储位置中的文件的可选区分大小写的路径(在 S3 术语中称为 * 前缀 *,即文件名称以通用字符串开头)。ENDPOINT = 's3_api_compatible_endpoint'
指向 S3 兼容 API 端点的完全限定域名。
目录表参数 (directoryTableParams
)¶
ENABLE = TRUE | FALSE
指定是否向暂存区添加 目录表。当值为 TRUE 时,将创建包含暂存区的目录表。
备注
与 S3 兼容的外部暂存区 不 支持将此参数设置为 TRUE。无法自动刷新与 S3 兼容的外部暂存区的元数据。
默认:
FALSE
外部暂存区¶
Amazon S3
REFRESH_ON_CREATE = TRUE | FALSE
指定在创建暂存区后是否立即自动刷新一次目录表元数据。刷新目录表元数据会将元数据与指定暂存区路径中的当前数据文件列表同步。元数据需要执行此操作才能在
URL =
设置中指定的命名暂存区中注册任何 现有 数据文件。
TRUE
在暂存区创建后,Snowflake 会自动刷新一次目录表元数据。
备注
如果指定的云存储 URL 包含接近 100 万个或更多文件,建议您设置
REFRESH_ON_CREATE = FALSE
。创建暂存区后,通过执行 ALTER STAGE ... REFRESH 语句以增量方式刷新目录表元数据 – 这些语句指定存储位置中的子路径(即刷新时要包含的文件子集)– 直到元数据包含该位置中的所有文件。FALSE
Snowflake 不会自动刷新目录表元数据。要注册暂存区中存在的任何数据文件,必须使用 ALTER STAGE ... REFRESH 手动刷新一次目录表元数据。
默认:
TRUE
AUTO_REFRESH = TRUE | FALSE
指定当 :emph:` 新的或更新的 ` 数据文件在 URL 值中指定的命名外部暂存区中可用时,Snowflake 是否应支持触发目录表元数据自动刷新。
TRUE
Snowflake 支持触发目录表元数据自动刷新。
FALSE
Snowflake 不支持触发目录表元数据自动刷新。必须使用 ALTER STAGE ... REFRESH 定期手动刷新目录表元数据,以使元数据与暂存区路径中的当前文件列表同步。
默认:
FALSE
Google Cloud Storage
REFRESH_ON_CREATE = TRUE | FALSE
指定在创建暂存区后是否立即自动刷新一次目录表元数据。刷新目录表元数据会将元数据与指定暂存区路径中的当前数据文件列表同步。元数据需要执行此操作才能在
URL =
设置中指定的命名暂存区中注册任何 现有 数据文件。
TRUE
在暂存区创建后,Snowflake 会自动刷新一次目录表元数据。
备注
如果指定的云存储 URL 包含接近 100 万个或更多文件,建议您设置
REFRESH_ON_CREATE = FALSE
。创建暂存区后,通过执行 ALTER STAGE ... REFRESH 语句以增量方式刷新目录表元数据 – 这些语句指定存储位置中的子路径(即刷新时要包含的文件子集)– 直到元数据包含该位置中的所有文件。FALSE
Snowflake 不会自动刷新目录表元数据。要注册暂存区中存在的任何数据文件,必须使用 ALTER STAGE ... REFRESH 手动刷新一次目录表元数据。
默认:
TRUE
AUTO_REFRESH = TRUE | FALSE
指定当 :emph:` 新的或更新的 ` 数据文件在
[ WITH ] LOCATION =
设置中指定的命名外部暂存区中可用时,Snowflake 是否应启用触发目录表元数据的自动刷新。
TRUE
Snowflake 支持触发目录表元数据自动刷新。
FALSE
Snowflake 不支持触发目录表元数据自动刷新。必须使用 ALTER STAGE ... REFRESH 定期手动刷新目录表元数据,以使元数据与暂存区路径中的当前文件列表同步。
NOTIFICATION_INTEGRATION = '<notification_integration_name>'
指定用于使用 GCS Pub/Sub 通知自动刷新目录表元数据的通知集成的名称。通知集成是一个 Snowflake 对象,它在 Snowflake 和第三方云消息队列服务之间提供一个接口。
Microsoft Azure
REFRESH_ON_CREATE = TRUE | FALSE
指定在创建暂存区后是否立即自动刷新一次目录表元数据。刷新目录表元数据会将元数据与指定暂存区路径中的当前数据文件列表同步。元数据需要执行此操作才能在
URL =
设置中指定的命名暂存区中注册任何 现有 数据文件。
TRUE
在暂存区创建后,Snowflake 会自动刷新一次目录表元数据。
备注
如果指定的云存储 URL 包含接近 100 万个或更多文件,建议您设置
REFRESH_ON_CREATE = FALSE
。创建暂存区后,通过执行 ALTER STAGE ... REFRESH 语句以增量方式刷新目录表元数据 – 这些语句指定存储位置中的子路径(即刷新时要包含的文件子集)– 直到元数据包含该位置中的所有文件。FALSE
Snowflake 不会自动刷新目录表元数据。要注册暂存区中存在的任何数据文件,必须使用 ALTER STAGE ... REFRESH 手动刷新一次目录表元数据。
默认:
TRUE
AUTO_REFRESH = TRUE | FALSE
指定当 :emph:` 新的或更新的 ` 数据文件在
[ WITH ] LOCATION =
设置中指定的命名外部暂存区中可用时,Snowflake 是否应启用触发目录表元数据的自动刷新。
TRUE
Snowflake 支持触发目录表元数据自动刷新。
FALSE
Snowflake 不支持触发目录表元数据自动刷新。必须使用 ALTER STAGE ... REFRESH 定期手动刷新目录表元数据,以使元数据与暂存区路径中的当前文件列表同步。
默认:
FALSE
NOTIFICATION_INTEGRATION = '<notification_integration_name>'
指定用于使用 Azure 事件网格通知自动刷新目录表元数据的通知集成的名称。通知集成是一个 Snowflake 对象,它在 Snowflake 和第三方云消息队列服务之间提供一个接口。
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
USAGE |
存储集成 |
仅当使用 :doc:` 存储集成 </sql-reference/sql/create-storage-integration>` 访问云存储服务时才需要。 |
CREATE STAGE |
架构 |
|
OWNERSHIP |
暂存区 |
若要创建创建与架构中已存在的对象同名的临时对象,必须授予角色或使其继承对象上的 OWNERSHIP 权限。 Note that in a managed access schema, only the schema owner (i.e. the role with the OWNERSHIP privilege on the schema) or a role with the MANAGE GRANTS privilege can grant or revoke privileges on objects in the schema, including future grants. |
请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
小心
重新创建暂存区(使用 CREATE OR REPLACE STAGE)可能会产生以下不需要的额外结果:
删除暂存区的现有目录表(如有)。如果使用目录表重新创建暂存区,则默认情况下该目录为空。
暂存区与引用它的任何外部表之间的关联都会断开。
这是因为外部表使用隐藏 ID 而不是暂存区名称链接到暂存区。在后台,CREATE OR REPLACE 语法会删除对象,并使用其他隐藏 ID 重新创建对象。
如果在将暂存区链接到一个或多个外部表后必须重新创建该暂存区,则必须重新创建每个外部表(使用 CREATE OR REPLACE EXTERNAL TABLE)以重新建立关联。调用 GET_DDL 函数以检索 DDL 语句,从而重新创建每个外部表。
引用暂存区的任何管道都将停止加载数据。管道的执行状态将更改为
STOPPED_STAGE_DROPPED
。若要恢复加载数据,必须重新创建这些管道对象(使用 CREATE OR REPLACE PIPE 语法)。
CREATE STAGE 不会检查指定 URL 或凭据是否有效。如果凭据无效,在尝试使用暂存区时,系统将返回错误。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
内部暂存区¶
创建一个内部暂存区,并为该暂存区指定服务器端加密:
CREATE STAGE my_int_stage
ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
创建一个临时内部暂存区,其所有属性与上一个示例相同:
CREATE TEMPORARY STAGE my_temp_int_stage;
外部暂存区¶
Amazon S3
使用名为
files
的私有/受保护 S3 存储桶以及名为load
的文件夹路径创建外部暂存区。通过myint
存储集成提供对 S3 桶的安全访问:CREATE STAGE my_ext_stage URL='s3://load/files/' STORAGE_INTEGRATION = myint;使用名为
files
的私有/受保护 S3 存储桶以及名为load
的文件夹路径创建外部暂存区。S3 桶的 Snowflake 访问权限与 IAM 用户关联;因此需要 IAM 凭据:CREATE STAGE my_ext_stage1 URL='s3://load/files/' CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z');请注意,本示例中使用的 AWS_KEY_ID 和 AWS_SECRET_KEY 的值仅用于说明目的。
使用名为
load
的 S3 桶建外部暂存区,文件夹路径名为encrypted_files
,并使用主密钥进行客户端加密(默认加密类型),以解密/加密桶中存储的文件:CREATE STAGE my_ext_stage2 URL='s3://load/encrypted_files/' CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z') ENCRYPTION=(MASTER_KEY = 'eSx...');使用名为
load
的 S3 桶创建外部暂存区,文件夹路径名为encrypted_files
,并使用 AWS_SSE_KMS 服务器端加密,指定用于对桶中存储的文件进行加密/解密的主密钥 ID:CREATE STAGE my_ext_stage3 URL='s3://load/encrypted_files/' CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z') ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID = 'aws/key');所用示例即为上一个示例,不同之处在于 Snowflake 对 S3 桶的访问权限与 IAM 角色而非 IAM 用户相关联。请注意,凭据与其他暂存区参数(例如
ENCRYPTION
)可分开处理。无论用于访问外部 S3 桶的凭据如何,对这些其他参数的支持都是相同的:CREATE STAGE my_ext_stage3 URL='s3://load/encrypted_files/' CREDENTIALS=(AWS_ROLE='arn:aws:iam::001234567890:role/mysnowflakerole') ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID = 'aws/key');在活动架构中为用户会话创建带有目录表的暂存区。云存储 URL 包括路径
files
。该暂存区引用名为my_storage_int
的存储集成:CREATE STAGE mystage URL='s3://load/files/' STORAGE_INTEGRATION = my_storage_int DIRECTORY = ( ENABLE = true AUTO_REFRESH = true );
Google Cloud Storage
使用名为
load
的私有/受保护 GCS 存储桶以及名为files
的文件夹路径创建外部暂存区。通过myint
存储集成提供对 GCS 桶的安全访问:CREATE STAGE my_ext_stage URL='gcs://load/files/' STORAGE_INTEGRATION = myint;在活动架构中为用户会话创建带有目录表且名为
mystage
的暂存区。云存储 URL 包括路径files
。该暂存区引用名为my_storage_int
的存储集成:CREATE STAGE mystage URL='gcs://load/files/' STORAGE_INTEGRATION = my_storage_int DIRECTORY = ( ENABLE = true AUTO_REFRESH = true NOTIFICATION_INTEGRATION = 'MY_NOTIFICATION_INT' );
Microsoft Azure
使用名为
load
的私有/受保护 Azure 容器以及名为files
的文件夹路径创建外部暂存区。通过myint
存储集成提供对容器的安全访问:CREATE STAGE my_ext_stage URL='azure://myaccount.blob.core.windows.net/load/files/' STORAGE_INTEGRATION = myint;使用名为
myaccount
的 Azure 存储账户、名为mycontainer
的容器及名为files
的文件夹路径创建外部暂存区,并启用客户端加密:CREATE STAGE mystage URL='azure://myaccount.blob.core.windows.net/mycontainer/files/' CREDENTIALS=(AZURE_SAS_TOKEN='?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D') ENCRYPTION=(TYPE='AZURE_CSE' MASTER_KEY = 'kPx...');(此示例中使用的
AZURE_SAS_TOKEN
和MASTER_KEY
值并非实际值;仅用于说明目的。在活动架构中为用户会话创建带有目录表的暂存区。云存储 URL 包括路径
files
。该暂存区引用名为my_storage_int
的存储集成:CREATE STAGE mystage URL='azure://myaccount.blob.core.windows.net/load/files/' STORAGE_INTEGRATION = my_storage_int DIRECTORY = ( ENABLE = true AUTO_REFRESH = true NOTIFICATION_INTEGRATION = 'MY_NOTIFICATION_INT' );