CREATE STAGE

创建一个名为 * 内部 * 或 * 外部 * 的新暂存区,用于将数据从文件加载到 Snowflake 表中,并将数据从表中卸载到文件中:

内部暂存区:

将数据文件存储在 Snowflake 内。内部暂存区可以是永久性的,也可以是临时的。有关更多详细信息,请参阅 为本地文件选择内部暂存区

外部暂存区:

引用在 Snowflake 外部位置存储的数据文件。目前支持以下云存储服务:

  • Amazon S3 桶

  • Google Cloud Storage 桶

  • Microsoft Azure 容器

存储位置可以是私有/受保护的,也可以是公用的。

您不能访问存档云存储类别中保存的数据,这些数据需要恢复后才能检索。例如,这些存档存储类别包括 Amazon S3 Glacier Flexible Retrieval 或 Glacier Deep Archive 存储类别,或者 Microsoft Azure Archive Storage。

内部或外部暂存区均可包含 * 目录表 *目录表 将暂存文件的目录存储在云存储中。

另请参阅:

DROP STAGEALTER STAGESHOW STAGESDESCRIBE STAGE

PUTCOPY INTO <table>

COPY INTO <location>GET

语法

-- 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>' , ... ] ) ]
Copy

其中:

internalStageParams ::=
  [ ENCRYPTION = (TYPE = 'SNOWFLAKE_FULL' | TYPE = 'SNOWFLAKE_SSE') ]
Copy
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' ] ) ]
Copy
externalStageParams (for Google Cloud Storage) ::=
  URL = 'gcs://<bucket>[/<path>/]'
  [ STORAGE_INTEGRATION = <integration_name> ]
  [ ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = '<string>' ] | [ TYPE = 'NONE' ] ) ]
Copy
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' ] ) ]
Copy
externalStageParams (for Amazon S3-compatible Storage) ::=
  URL = 's3compat://{bucket}[/{path}/]'
  ENDPOINT = '<s3_api_compatible_endpoint>'
  [ { CREDENTIALS = ( AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' ) } ]
Copy
directoryTableParams (for internal stages) ::=
  [ DIRECTORY = ( ENABLE = { TRUE | FALSE }
                  [ REFRESH_ON_CREATE =  { TRUE | FALSE } ] ) ]
Copy
directoryTableParams (for Amazon S3) ::=
  [ DIRECTORY = ( ENABLE = { TRUE | FALSE }
                  [ REFRESH_ON_CREATE =  { TRUE | FALSE } ]
                  [ AUTO_REFRESH = { TRUE | FALSE } ] ) ]
Copy
directoryTableParams (for Google Cloud Storage) ::=
  [ DIRECTORY = ( ENABLE = { TRUE | FALSE }
                  [ AUTO_REFRESH = { TRUE | FALSE } ]
                  [ REFRESH_ON_CREATE =  { TRUE | FALSE } ]
                  [ NOTIFICATION_INTEGRATION = '<notification_integration_name>' ] ) ]
Copy
directoryTableParams (for Microsoft Azure) ::=
  [ DIRECTORY = ( ENABLE = { TRUE | FALSE }
                  [ REFRESH_ON_CREATE =  { TRUE | FALSE } ]
                  [ AUTO_REFRESH = { TRUE | FALSE } ]
                  [ NOTIFICATION_INTEGRATION = '<notification_integration_name>' ] ) ]
Copy

备注

不要使用 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'

为暂存区指定注释。

默认:无值

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

指定 标签 名称和标签字符串值。

标签值始终为字符串,标签值的最大字符数为 256。

有关在语句中指定标签的信息,请参阅 对象和列的标签配额

内部暂存区参数 (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 和第三方云消息队列服务之间提供一个接口。

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 权限

权限

对象

备注

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 权限。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

小心

重新创建暂存区(使用 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');
Copy

创建一个临时内部暂存区,其所有属性与上一个示例相同:

CREATE TEMPORARY STAGE my_temp_int_stage;
Copy

外部暂存区

Amazon S3

使用名为 files 的私有/受保护 S3 存储桶以及名为 load 的文件夹路径创建外部暂存区。通过 myint 存储集成提供对 S3 桶的安全访问:

CREATE STAGE my_ext_stage
  URL='s3://load/files/'
  STORAGE_INTEGRATION = myint;
Copy

使用名为 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');
Copy

请注意,本示例中使用的 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...');
Copy

使用名为 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');
Copy

所用示例即为上一个示例,不同之处在于 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');
Copy

在活动架构中为用户会话创建带有目录表的暂存区。云存储 URL 包括路径 files。该暂存区引用名为 my_storage_int 的存储集成:

CREATE STAGE mystage
  URL='s3://load/files/'
  STORAGE_INTEGRATION = my_storage_int
  DIRECTORY = (
    ENABLE = true
    AUTO_REFRESH = true
  );
Copy

Google Cloud Storage

使用名为 load 的私有/受保护 GCS 存储桶以及名为 files 的文件夹路径创建外部暂存区。通过 myint 存储集成提供对 GCS 桶的安全访问:

CREATE STAGE my_ext_stage
  URL='gcs://load/files/'
  STORAGE_INTEGRATION = myint;
Copy

在活动架构中为用户会话创建带有目录表且名为 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'
  );
Copy

Microsoft Azure

使用名为 load 的私有/受保护 Azure 容器以及名为 files 的文件夹路径创建外部暂存区。通过 myint 存储集成提供对容器的安全访问:

CREATE STAGE my_ext_stage
  URL='azure://myaccount.blob.core.windows.net/load/files/'
  STORAGE_INTEGRATION = myint;
Copy

使用名为 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...');
Copy

(此示例中使用的 AZURE_SAS_TOKENMASTER_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'
  );
Copy
语言: 中文