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>GETCREATE OR ALTER <对象>

语法

-- Internal stage
CREATE [ OR REPLACE ] [ { TEMP | TEMPORARY } ] STAGE [ IF NOT EXISTS ] <internal_stage_name>
    internalStageParams
    directoryTableParams
  [ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM } [ formatTypeOptions ] } ) ]
  [ 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
  [ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM } [ formatTypeOptions ] } ) ]
  [ 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 = '<protocol>://<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' ) ]
  [ USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE } ]
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
formatTypeOptions ::=
-- If TYPE = CSV
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     RECORD_DELIMITER = '<string>' | NONE
     FIELD_DELIMITER = '<string>' | NONE
     FILE_EXTENSION = '<string>'
     PARSE_HEADER = TRUE | FALSE
     SKIP_HEADER = <integer>
     SKIP_BLANK_LINES = TRUE | FALSE
     DATE_FORMAT = '<string>' | AUTO
     TIME_FORMAT = '<string>' | AUTO
     TIMESTAMP_FORMAT = '<string>' | AUTO
     BINARY_FORMAT = HEX | BASE64 | UTF8
     ESCAPE = '<character>' | NONE
     ESCAPE_UNENCLOSED_FIELD = '<character>' | NONE
     TRIM_SPACE = TRUE | FALSE
     FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | NONE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
     ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     EMPTY_FIELD_AS_NULL = TRUE | FALSE
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
     ENCODING = '<string>' | UTF8
-- If TYPE = JSON
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     DATE_FORMAT = '<string>' | AUTO
     TIME_FORMAT = '<string>' | AUTO
     TIMESTAMP_FORMAT = '<string>' | AUTO
     BINARY_FORMAT = HEX | BASE64 | UTF8
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
     FILE_EXTENSION = '<string>'
     ENABLE_OCTAL = TRUE | FALSE
     ALLOW_DUPLICATE = TRUE | FALSE
     STRIP_OUTER_ARRAY = TRUE | FALSE
     STRIP_NULL_VALUES = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     IGNORE_UTF8_ERRORS = TRUE | FALSE
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
-- If TYPE = AVRO
     COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     TRIM_SPACE = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = ORC
     TRIM_SPACE = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = PARQUET
     COMPRESSION = AUTO | LZO | SNAPPY | NONE
     SNAPPY_COMPRESSION = TRUE | FALSE
     BINARY_AS_TEXT = TRUE | FALSE
     USE_LOGICAL_TYPE = TRUE | FALSE
     TRIM_SPACE = TRUE | FALSE
     USE_VECTORIZED_SCANNER = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = XML
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     IGNORE_UTF8_ERRORS = TRUE | FALSE
     PRESERVE_SPACE = TRUE | FALSE
     STRIP_OUTER_ELEMENT = TRUE | FALSE
     DISABLE_SNOWFLAKE_DATA = TRUE | FALSE
     DISABLE_AUTO_CONVERT = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
Copy

备注

请勿使用 CREATE STAGE、ALTER STAGE、CREATE TABLE 或 ALTER TABLE 命令指定复制选项。建议您使用 COPY INTO <table> 命令指定复制选项。

变体语法

CREATE OR ALTER STAGE

创建新暂存区(如果尚不存在),或者将现有暂存区转换为语句中定义的暂存区。CREATE OR ALTER STAGE 语句遵循 CREATE STAGE 语句的语法规则,并具有与 ALTER STAGE 语句相同的限制。

有关更多信息,请参阅 CREATE OR ALTER STAGE 使用说明

-- Internal stage
CREATE OR ALTER [ { TEMP | TEMPORARY } ] STAGE <internal_stage_name>
    internalStageParams
    directoryTableParams
  [ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM } [ formatTypeOptions ] } ) ]
  [ COMMENT = '<string_literal>' ]

-- External stage
CREATE OR ALTER [ { TEMP | TEMPORARY } ] STAGE <external_stage_name>
    externalStageParams
    directoryTableParams
  [ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM } [ formatTypeOptions ] } ) ]
  [ COMMENT = '<string_literal>' ]
Copy

CREATE STAGE ... CLONE

创建具有相同参数值的新暂存区:

CREATE [ OR REPLACE ] STAGE [ IF NOT EXISTS ] <name> CLONE <source_stage>
  [ ... ]
Copy

有关更多详细信息,请参阅 CREATE <object> ...CLONE

必填参数

internal_stage_name . external_stage_name

指定暂存区的标识符;对于在其中创建暂存区的架构来说,此标识符必须唯一。

此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,"My object")。放在双引号内的标识符也区分大小写。

有关更多详细信息,请参阅 标识符要求

备注

创建外部暂存区时,还需要提供 URL。有关更多详细信息,请参阅 :ref:` 外部暂存区参数 <label-create_stage_externalstageparams>`(本主题内容)。

如果未指定 URL,Snowflake 默认会创建内部暂存区。

可选参数

{ TEMP | TEMPORARY }

指定所创建是临时暂存区,将在创建该暂存区的会话结束时删除。注意:

  • 在临时 * 外部 * 暂存区被删除时,删除的只有暂存区本身;数据文件不会被移除。

  • 在临时 * 内部 * 暂存区被删除时,暂存区内的所有文件都会从 Snowflake 中被清除,无论其加载状态如何。这可以防止处于临时内部暂存区的文件占用数据存储,从而产生存储费用。但这也意味着一旦暂存区被删除,就无法通过 Snowflake 恢复暂存文件。

    小技巧

    如果计划创建和使用临时内部暂存区,则应在 Snowflake 之外维护数据文件的副本。

FILE_FORMAT = ( FORMAT_NAME = 'file_format_name' ) . FILE_FORMAT = ( TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM [ ... ] )

指定暂存区的文件格式,文件格式可以是以下之一:

FORMAT_NAME = 'file_format_name'

指定要用于暂存区的现有命名文件格式。命名文件格式决定使用此暂存区加载的数据文件的格式类型(CSV、 JSON 等)以及任何其他格式选项。有关更多详细信息,请参阅 CREATE FILE FORMAT

TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM [ ... ]

指定暂存区的文件类型:

  • 从暂存区加载数据(使用 COPY INTO <table>)适应所有支持的格式类型。

  • 将数据卸载到暂存区(使用 COPY INTO <location>)适应 CSVJSONPARQUET

如果指定了文件格式类型,则可以指定其他特定于格式的选项。有关更多详细信息,请参阅 :ref:`label-create_stage_formattypeoptions`(本主题内容)。

CUSTOM 格式类型指定基础暂存区持有非结构化数据,并且只能与 FILE_PROCESSOR 复制选项一起使用。

默认:TYPE = CSV

备注

FORMAT_NAMETYPE 是互斥的;您只能为一个暂存区指定一个或另一个。

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 = 'protocol://bucket[/path/]'

指定用于存储数据文件以进行加载/卸载的外部位置(现有 S3 桶)的 URL,其中:

  • protocol 是以下其中一项:

    • s3 是指中国境外公共 AWS 区域的 S3 存储。

    • s3china 代表中国境内公共 AWS 区域中的 S3 存储。

    • s3gov 代表 政府区域 中的 S3 存储。

    只能通过在同一政府区域中托管的 Snowflake 账户,使用存储集成访问 政府区域 中的云存储。

    同样,如果您需要访问中国某个区域的云存储,则只能从中国同一区域托管的 Snowflake 账户访问存储集成。

    在这些情况下,请在 CREATE STAGE 命令中使用 CREDENTIALS 参数(而不是使用存储集成)来提供身份验证凭据。

  • 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`(当提供 :code:`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/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 用于在卸载时加密文件。

请注意,数据加载时会忽略此值。

默认:NONE

Google Cloud Storage

ENCRYPTION = ( TYPE = 'GCS_SSE_KMS' [ KMS_KEY_ID = 'string' ] | TYPE = 'NONE' )

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 用于在卸载时加密文件。

请注意,数据加载时会忽略此值。如果服务账户有足够的权限来解密桶中的数据,则加载操作应会成功。

默认:NONE

Microsoft Azure

ENCRYPTION = ( TYPE = 'AZURE_CSE' MASTER_KEY = 'string' | TYPE = 'NONE' )

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 位密钥。

默认:NONE

USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

指定是否为 Azure 外部暂存区使用专用连接。有关使用此参数的信息,请参阅 用于外部暂存区和 Snowpipe 自动化的 Azure 专用连接

如果外部暂存区使用存储集成,并且该集成配置为专用连接,请将此参数设置为 FALSE。

兼容 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 和第三方云消息队列服务之间提供一个接口。

格式类型选项 (formatTypeOptions)

根据指定的文件格式类型 (FILE_FORMAT = ( TYPE = ... )),可以包含以下一个或多个特定于格式的选项(用空格、逗号或换行符分隔):

TYPE = CSV

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
使用:

数据加载、数据卸载和外部表

定义:
  • 加载数据时,指定数据文件的当前压缩算法。Snowflake 使用此选项来检测 已压缩 的数据文件是如何压缩的,以便提取文件中的压缩数据进行加载。

  • 卸载数据时,使用指定的压缩算法压缩数据文件。

:

支持的值

备注

AUTO

加载数据时,压缩算法会自动检测,但使用 Brotli 的压缩文件除外,目前无法自动检测。卸载数据时,文件会使用默认格式 gzip 自动压缩。

GZIP

BZ2

BROTLI

加载/卸载 Brotli 压缩文件时必须进行指定。

ZSTD

支持 Zstandard v0.8(及更高版本)。

DEFLATE

使用 Deflate 压缩的文件(带有 zlib 标头、RFC1950)。

RAW_DEFLATE

使用 Raw Deflate 压缩的文件(无标头、RFC1951)。

NONE

在加载数据时,表示文件尚未压缩。在卸载数据时,指定卸载的未压缩文件。

默认值:

AUTO

RECORD_DELIMITER = 'string' | NONE
使用:

数据加载、数据卸载和外部表

定义:

一个或多个单字节或多字节字符,用于分隔输入文件(数据加载)或卸载文件(数据卸载)中的记录。接受常见的转义序列或以下单字节或多字节字符:

单字节字符:

八进制值(以 \\ 为前缀)或十六进制值(以 0x\x 为前缀)。例如,对于由重音符号 (^) 字符分隔的记录,请指定八进制 (\\136) 或十六进制 (0x5e) 值。

多字节字符:

十六进制值(前缀为 \x)。例如,对于由分 (¢) 字符分隔的记录,请指定十六进制 (\xC2\xA2) 值。

RECORD_DELIMITER 或 FIELD_DELIMITER 分隔符不能是其他文件格式选项(例如 FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb')的分隔符的子字符串。

指定的分隔符必须是有效的 UTF-8 字符,而不是随机的字节序列。另请注意,分隔符限制为最多 20 个字符。

也接受 NONE 的值。

默认值:
数据加载:

换行符。请注意,“换行符”是合乎逻辑的,因而 \r\n 可以理解为 Windows 平台上文件的换行符。

数据卸载:

换行符 (\n)。

FIELD_DELIMITER = 'string' | NONE
使用:

数据加载、数据卸载和外部表

定义:

一个或多个单字节或多字节字符,用于分隔输入文件(数据加载)或卸载文件(数据卸载)中的字段。接受常见的转义序列或以下单字节或多字节字符:

单字节字符:

八进制值(以 \\ 为前缀)或十六进制值(以 0x\x 为前缀)。例如,对于由重音符号 (^) 字符分隔的记录,请指定八进制 (\\136) 或十六进制 (0x5e) 值。

多字节字符:

十六进制值(前缀为 \x)。例如,对于由分 (¢) 字符分隔的记录,请指定十六进制 (\xC2\xA2) 值。

RECORD_DELIMITER 或 FIELD_DELIMITER 分隔符不能是其他文件格式选项(例如 FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb')的分隔符的子字符串。

备注

对于非 ASCII 字符,必须使用十六进制字节序列值来获取确定性行为。

指定的分隔符必须是有效的 UTF-8 字符,而不是随机的字节序列。另请注意,分隔符限制为最多 20 个字符。

也接受 NONE 的值。

默认值:

逗号 (,)

FILE_EXTENSION = 'string' | NONE
使用:

仅数据卸载

定义:

指定卸载到暂存区的文件的扩展名。接受任何扩展名。用户负责指定可由任何所需软件或服务读取的文件扩展名。

默认值:

null 表示文件扩展名由格式类型 .csv[compression] 确定,其中 compression 是由压缩方法添加的扩展名(如果已设置 COMPRESSION)。

备注

如果 SINGLE 复制选项为 TRUE,则默认情况下,COPY 命令会卸载没有文件扩展名的文件。要指定文件扩展名,请在 internal_locationexternal_location 路径中提供文件名和扩展名(例如 copy into @stage/data.csv)。

PARSE_HEADER = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定是否使用数据文件中的第一行标题来确定列名称。

此文件格式选项仅适用于以下操作:

  • 使用 INFER_SCHEMA 函数自动检测列定义。

  • 使用 INFER_SCHEMA 函数和 MATCH_BY_COLUMN_NAME 复制选项将 CSV 数据加载到单独的列中。

如果该选项设置为 TRUE,则第一行标题将用于确定列名称。默认值 FALSE 将返回 c* 形式的列名称,其中 * 是列的位置。

备注

  • 此选项不支持外部表。

  • 如果设置了 PARSE_HEADER = TRUE,则不支持 SKIP_HEADER 选项。

默认:FALSE

SKIP_HEADER = integer
使用:

数据加载和外部表

定义:

要跳过的文件开头的行数。

注意,SKIP_HEADER 不使用 RECORD_DELIMITER 或 FIELD_DELIMITER 值来决定标头行;相反,它会直接跳过文件中指定数量的以 CRLF(回车符、换行)分隔的行。然后,使用 RECORD_DELIMITER 和 FIELD_DELIMITER 确定要加载的数据行。

默认值:

0

SKIP_BLANK_LINES = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定是否跳过数据文件中遇到的任何空行;否则,空行将产生记录结束错误(默认行为)。

默认:FALSE

DATE_FORMAT = 'string' | AUTO
使用:

数据加载和卸载

定义:

定义数据文件(数据加载)或表(数据卸载)中日期值的格式。如果未指定值或为 AUTO,则使用 :ref:`label-DATE_INPUT_FORMAT`(数据加载)或 :ref:`label-DATE_OUTPUT_FORMAT`(数据卸载)参数的值。

默认值:

AUTO

TIME_FORMAT = 'string' | AUTO
使用:

数据加载和卸载

定义:

定义数据文件(数据加载)或表(数据卸载)中时间值的格式。如果未指定值或为 AUTO,则使用 :ref:`label-TIME_INPUT_FORMAT`(数据加载)或 :ref:`label-TIME_OUTPUT_FORMAT`(数据卸载)参数的值。

默认值:

AUTO

TIMESTAMP_FORMAT = string' | AUTO
使用:

数据加载和卸载

定义:

定义数据文件(数据加载)或表(数据卸载)中时间戳值的格式。如果未指定值或为 AUTO,则使用 :ref:`label-TIMESTAMP_INPUT_FORMAT`(数据加载)或 :ref:`label-TIMESTAMP_OUTPUT_FORMAT`(数据卸载)参数的值。

默认值:

AUTO

BINARY_FORMAT = HEX | BASE64 | UTF8
使用:

数据加载和卸载

定义:

定义二进制输入或输出的编码格式。在表中的二进制列中加载数据或从二进制列中卸载数据时,可以使用该选项。

默认值:

HEX

ESCAPE = 'character' | NONE
使用:

数据加载和卸载

定义:

用作封闭或未封闭字段值的转义字符的单字节字符串。转义字符对字符序列中的后续字符调用替代解释。您可以使用 ESCAPE 字符将数据中 FIELD_OPTIONALLY_ENCLOSED_BY 字符的实例解释为字面量。

接受常见的转义序列、八进制值或十六进制值。

加载数据:

仅指定封闭字段的转义字符。通过设置 FIELD_OPTIONALLY_ENCLOSED_BY 指定用于包围字段的字符。

备注

此文件格式选项仅支持单字节字符。请注意,UTF-8 字符编码将高阶 ASCII 字符表示为多字节字符。如果数据文件使用 UTF-8 字符集进行编码,则不能将高阶 ASCII 字符指定为选项值。

此外,如果指定高阶 ASCII 字符,建议将文件格式选项设置为 ENCODING = 'string' 数据文件的字符编码,以确保正确解释该字符。

卸载数据:

如果设置此选项,它将替换 ESCAPE_UNENCLOSED_FIELD 的转义字符集。

默认值:

NONE

ESCAPE_UNENCLOSED_FIELD = 'character' | NONE
使用:

数据加载、数据卸载和外部表

定义:

仅用作未封闭字段值的转义字符的单字节字符串。转义字符对字符序列中的后续字符调用替代解释。您可以使用 ESCAPE 字符将数据中 FIELD_DELIMITERRECORD_DELIMITER 字符的实例解释为字面量。转义字符还可用于对数据中自身的实例进行转义。

接受常见的转义序列、八进制值或十六进制值。

加载数据:

仅指定未封闭字段的转义字符。

备注

  • 默认值为 \\。如果数据文件中的行以反斜杠 (\) 字符结尾,则此字符将转义为 RECORD_DELIMITER 文件格式选项指定的换行符或回车符。因此,加载操作会将此行和下一行视为单行数据。若要避免此问题,请将值设置为 NONE

  • 此文件格式选项仅支持单字节字符。请注意,UTF-8 字符编码将高阶 ASCII 字符表示为多字节字符。如果数据文件使用 UTF-8 字符集进行编码,则不能将高阶 ASCII 字符指定为选项值。

    此外,如果指定高阶 ASCII 字符,建议将文件格式选项设置为 ENCODING = 'string' 数据文件的字符编码,以确保正确解释该字符。

卸载数据:

如果设置了 ESCAPE,该文件格式选项的转义字符集将替换此选项。

默认值:

反斜杠 (\\)

TRIM_SPACE = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定是否从字段中移除空格。

例如,如果您的外部数据库软件将字段放在引号中,但插入了前导空格,则 Snowflake 会读取前导空格而不是左引号字符作为字段的开头(即引号被解释为字段数据字符串的一部分)。可将选项设置为 TRUE,在数据加载期间移除不需要的空格。

再举一个例子,如果字符串两边的引号两边有前导空格或尾随空格,则可以使用此选项移除周围的空格,并使用 FIELD_OPTIONALLY_ENCLOSED_BY 选项移除引号字符。请注意,引号 的任何空格都将保留。例如,假设 FIELD_DELIMITER = '|'FIELD_OPTIONALLY_ENCLOSED_BY = '"'

|"Hello world"|    /* loads as */  >Hello world<
|" Hello world "|  /* loads as */  > Hello world <
| "Hello world" |  /* loads as */  >Hello world<
Copy

(此示例中的括号未加载;它们用于分隔加载字符串的开头和结尾)

默认值:

FALSE

FIELD_OPTIONALLY_ENCLOSED_BY = 'character' | NONE
使用:

数据加载、数据卸载和外部表

定义:

用于包围字符串的字符。值可以是 NONE、单引号字符 (') 或双引号字符 (")。要使用单引号字符,请使用八进制或十六进制表示形式 (0x27) 或双单引号转义 ('')。

仅数据卸载:

源表中的字段包含此字符时,Snowflake 使用相同的字符对其进行转义以进行卸载。例如,如果值是双引号字符,且字段包含字符串 A "B" C,则 Snowflake 会按如下方式对双引号进行转义以进行卸载:

A ""B"" C

默认值:

NONE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )
使用:

数据加载、数据卸载和外部表

定义:

用于与 SQL NULL 相互转换的字符串:

  • 加载数据时,Snowflake 会将数据加载源中的这些值替换为 SQL NULL。若要指定多个字符串,请将字符串列表放在括号中,并使用逗号分隔每个值。

    请注意,无论数据类型如何,Snowflake 都会将该值的所有实例转换为 NULL。例如,如果 2 指定为值,则转换为字符串或数字的所有 2 实例。

    例如:

    NULL_IF = ('\N', 'NULL', 'NUL', '')

    请注意,此选项可以包含空字符串。

  • 卸载数据时:Snowflake 会将 SQL NULL 值转换为列表中的第一个值。

默认值:

\\N``(即 NULL,假设 :code:`ESCAPE_UNENCLOSED_FIELD` 值为 ``\\

ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定在输入文件中的分隔列数(即字段)与相应表中的列数不匹配时是否生成解析错误。

如果设置为 FALSE,则不会生成错误,并且加载将继续。如果文件已成功加载:

  • 如果输入文件包含的记录字段数多于表中的列数,则匹配的字段将按文件中的出现顺序加载,其余字段将不加载。

  • 如果输入文件包含的记录字段数少于表中的列数,则表中不匹配的列将加载 NULL 值。

此选项假定输入文件中的所有记录都具有相同的长度(即无论为此参数指定的值如何,包含不同长度记录的文件都会返回错误)。

默认值:

TRUE

备注

:doc:`在加载期间转换数据时 </user-guide/data-load-transform>`(即使用查询作为 COPY 命令的源),此选项将被忽略。您的数据文件不需要与目标表具有相同的列数和顺序。

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定是否将无效的 UTF-8 字符替换为 Unicode 替换字符 ()。

如果设置为 TRUE,Snowflake 会将无效的 UTF-8 字符替换为 Unicode 替换字符。

如果设置为 FALSE,则加载操作在检测到无效的 UTF-8 字符编码时产生错误。

默认值:

FALSE

EMPTY_FIELD_AS_NULL = TRUE | FALSE
使用:

数据加载、数据卸载和外部表

定义:
  • 加载数据时,指定是否为输入文件中的空字段插入 SQL NULL,空字段由两个连续的分隔符(例如 ,,)表示。

    如果设置为 FALSE,Snowflake 会尝试将空字段转换为相应列类型。空字符串会插入到类型为 STRING 的列中。对于其他列类型,COPY 命令将引发错误。

  • 卸载数据时,此选项与 FIELD_OPTIONALLY_ENCLOSED_BY 结合使用。FIELD_OPTIONALLY_ENCLOSED_BY = NONE 时,设置 EMPTY_FIELD_AS_NULL = FALSE 指定将表中的空字符串卸载为空字符串值,而不用将字段值放在引号内。

    如果设置为 TRUEFIELD_OPTIONALLY_ENCLOSED_BY 必须指定一个字符来包围字符串。

默认值:

TRUE

SKIP_BYTE_ORDER_MARK = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定如果数据文件中存在 BOM(字节顺序标记),是否跳过。BOM 是数据文件开头的字符代码,用于定义字节顺序和编码形式。

如果设置为 FALSE,Snowflake 会识别数据文件中的任何 BOM,这可能会导致 BOM 错误或合并到表中的第一列中。

默认值:

TRUE

ENCODING = 'string'
使用:

数据加载和外部表

定义:

字符串(常量),指定将数据加载到表中时源数据的字符集。

字符 集

ENCODING 值

支持的语言

备注

Big5

BIG5

繁体中文

EUC-JP

EUCJP

日语

EUC-KR

EUCKR

韩语

GB18030

GB18030

中文

IBM420

IBM420

阿拉伯语

IBM424

IBM424

希伯来语

IBM949

IBM949

韩语

ISO-2022-CN

ISO2022CN

简体中文

ISO-2022-JP

ISO2022JP

日语

ISO-2022-KR

ISO2022KR

韩语

ISO-8859-1

ISO88591

丹麦语、荷兰语、英语、法语、德语、意大利语、挪威语、葡萄牙语、瑞典语

ISO-8859-2

ISO88592

捷克语、匈牙利语、波兰语、罗马尼亚语

ISO-8859-5

ISO88595

俄语

ISO-8859-6

ISO88596

阿拉伯语

ISO-8859-7

ISO88597

希腊语

ISO-8859-8

ISO88598

希伯来语

ISO-8859-9

ISO88599

土耳其语

ISO-8859-15

ISO885915

丹麦语、荷兰语、英语、法语、德语、意大利语、挪威语、葡萄牙语、瑞典语

与 ISO-8859-1 相同,但 8 个字符除外,包括欧元货币符号。

KOI8-R

KOI8R

俄语

Shift_JIS

SHIFTJIS

日语

UTF-8

UTF8

所有语言

要从分隔文件(CSV、TSV 等)加载数据,默认为 UTF-8。. . 要从所有其他支持的文件格式(JSON、Avro 等)加载数据以及卸载数据,UTF-8 是唯一支持的字符集。

UTF-16

UTF16

所有语言

UTF-16BE

UTF16BE

所有语言

UTF-16LE

UTF16LE

所有语言

UTF-32

UTF32

所有语言

UTF-32BE

UTF32BE

所有语言

UTF-32LE

UTF32LE

所有语言

windows-874

WINDOWS874

泰语

windows-949

WINDOWS949

韩语

windows-1250

WINDOWS1250

捷克语、匈牙利语、波兰语、罗马尼亚语

windows-1251

WINDOWS1251

俄语

windows-1252

WINDOWS1252

丹麦语、荷兰语、英语、法语、德语、意大利语、挪威语、葡萄牙语、瑞典语

windows-1253

WINDOWS1253

希腊语

windows-1254

WINDOWS1254

土耳其语

windows-1255

WINDOWS1255

希伯来语

windows-1256

WINDOWS1256

阿拉伯语

默认值:

UTF8

备注

Snowflake 将所有数据存储在 UTF-8 字符集中。数据在加载到 Snowflake 之前将转换为 UTF-8。

TYPE = JSON

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
使用:

数据加载和外部表

定义:
  • 加载数据时,指定数据文件的当前压缩算法。Snowflake 使用此选项来检测 已压缩 的数据文件是如何压缩的,以便提取文件中的压缩数据进行加载。

  • 卸载数据时,使用指定的压缩算法压缩数据文件。

:

支持的值

备注

AUTO

加载数据时,压缩算法会自动检测,但使用 Brotli 的压缩文件除外,目前无法自动检测。卸载数据时,文件会使用默认格式 gzip 自动压缩。

GZIP

BZ2

BROTLI

如果加载/卸载 Brotli 压缩文件,则必须进行指定。

ZSTD

支持 Zstandard v0.8(及更高版本)。

DEFLATE

使用 Deflate 压缩的文件(带有 zlib 标头、RFC1950)。

RAW_DEFLATE

使用 Raw Deflate 压缩的文件(无标头、RFC1951)。

NONE

在加载数据时,表示文件尚未压缩。在卸载数据时,指定卸载的未压缩文件。

默认值:

AUTO

DATE_FORMAT = 'string' | AUTO
使用:

仅加载数据

定义:

定义数据文件中日期字符串值的格式。如果未指定值或值为 AUTO,则使用 DATE_INPUT_FORMAT 参数的值。

此文件格式选项仅适用于以下操作:

  • 使用 MATCH_BY_COLUMN_NAME 复制选项将 JSON 数据加载到单独的列中。

  • 通过在 COPY 语句中指定查询(即 COPY 转换),将 JSON 数据加载到单独的列中。

默认值:

AUTO

TIME_FORMAT = 'string' | AUTO
使用:

仅加载数据

定义:

定义数据文件中时间字符串值的格式。如果未指定值或值为 AUTO,则使用 TIME_INPUT_FORMAT 参数的值。

此文件格式选项仅适用于以下操作:

  • 使用 MATCH_BY_COLUMN_NAME 复制选项将 JSON 数据加载到单独的列中。

  • 通过在 COPY 语句中指定查询(即 COPY 转换),将 JSON 数据加载到单独的列中。

默认值:

AUTO

TIMESTAMP_FORMAT = string' | AUTO
使用:

仅加载数据

定义:

定义数据文件中时间戳字符串值的格式。如果未指定值或值为 AUTO,则使用 TIMESTAMP_INPUT_FORMAT 参数的值。

此文件格式选项仅适用于以下操作:

  • 使用 MATCH_BY_COLUMN_NAME 复制选项将 JSON 数据加载到单独的列中。

  • 通过在 COPY 语句中指定查询(即 COPY 转换),将 JSON 数据加载到单独的列中。

默认值:

AUTO

BINARY_FORMAT = HEX | BASE64 | UTF8
使用:

仅加载数据

定义:

定义数据文件中二进制字符串值的编码格式。将数据加载到表中的二进制列时可以使用该选项。

此文件格式选项仅适用于以下操作:

  • 使用 MATCH_BY_COLUMN_NAME 复制选项将 JSON 数据加载到单独的列中。

  • 通过在 COPY 语句中指定查询(即 COPY 转换),将 JSON 数据加载到单独的列中。

默认值:

HEX

TRIM_SPACE = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定是否从字符串中移除前导和尾随空格。

例如,如果您的外部数据库软件将字段放在引号中,但插入了前导空格,则 Snowflake 会读取前导空格而不是左引号字符作为字段的开头(即引号被解释为字段数据字符串的一部分)。可将选项设置为 TRUE,在数据加载期间移除不需要的空格。

仅当使用 MATCH_BY_COLUMN_NAME 复制选项将 JSON 数据加载到单独的列中时,此文件格式选项才应用于以下操作。

默认值:

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )
使用:

仅加载数据

定义:

用于与 SQL NULL 相互转换的字符串。Snowflake 会将数据加载源中的这些字符串替换为 SQL NULL。若要指定多个字符串,请将字符串列表放在括号中,并使用逗号分隔每个值。

仅当使用 MATCH_BY_COLUMN_NAME 复制选项将 JSON 数据加载到单独的列中时,此文件格式选项才应用于以下操作。

请注意,无论数据类型如何,Snowflake 都会将该值的所有实例转换为 NULL。例如,如果 2 指定为值,则转换为字符串或数字的所有 2 实例。

例如:

NULL_IF = ('\N', 'NULL', 'NUL', '')

请注意,此选项可以包含空字符串。

默认值:

\\N``(即 NULL,假设 :code:`ESCAPE_UNENCLOSED_FIELD` 值为 ``\\

FILE_EXTENSION = 'string' | NONE
使用:

仅数据卸载

定义:

指定卸载到暂存区的文件的扩展名。接受任何扩展名。用户负责指定可由任何所需软件或服务读取的文件扩展名。

默认值:

null 表示文件扩展名由格式类型 .json[compression] 确定,其中 compression 是由压缩方法添加的扩展名(如果已设置 COMPRESSION)。

ENABLE_OCTAL = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,支持解析八进制数。

默认值:

FALSE

ALLOW_DUPLICATE = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定允许重复对象字段名称(仅保留最后一个)。

默认值:

FALSE

STRIP_OUTER_ARRAY = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指示 JSON 解析器移除外括号(即 [ ])。

默认值:

FALSE

STRIP_NULL_VALUES = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指示 JSON 解析器移除包含 null 值的对象字段或数组元素。例如,当设置为 TRUE 时,会发生以下变化:

之前

之后

[null]

[]

[null,null,3]

[,,3]

{"a":null,"b":null,"c":123}

{"c":123}

{"a":[1,null,2],"b":{"x":null,"y":88}}

{"a":[1,,2],"b":{"y":88}}

默认值:

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定是否将无效的 UTF-8 字符替换为 Unicode 替换字符 ()。此选项执行一对一的字符替换。

:

如果设置为 TRUE,Snowflake 会将无效的 UTF-8 字符替换为 Unicode 替换字符。

如果设置为 FALSE,则加载操作在检测到无效的 UTF-8 字符编码时产生错误。

默认值:

FALSE

IGNORE_UTF8_ERRORS = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定 UTF-8 编码错误是否产生错误条件。它是 REPLACE_INVALID_CHARACTERS 的替代语法。

:

如果设置为 TRUE,则任何无效 UTF-8 的序列都将以静默方式替换为 Unicode 字符 U+FFFD (即“替换字符”)。

如果设置为 FALSE,则加载操作在检测到无效的 UTF-8 字符编码时产生错误。

默认值:

FALSE

SKIP_BYTE_ORDER_MARK = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定如果数据文件中存在 BOM(字节顺序标记),是否跳过。BOM 是数据文件开头的字符代码,用于定义字节顺序和编码形式。

如果设置为 FALSE,Snowflake 会识别数据文件中的任何 BOM,这可能会导致 BOM 错误或合并到表中的第一列中。

默认值:

TRUE

TYPE = AVRO

COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
使用:

仅加载数据

定义:
  • 加载数据时,指定数据文件的当前压缩算法。Snowflake 使用此选项来检测 已压缩 的数据文件是如何压缩的,以便提取文件中的压缩数据进行加载。

  • 卸载数据时,使用指定的压缩算法压缩数据文件。

:

支持的值

备注

AUTO

加载数据时,压缩算法会自动检测,但使用 Brotli 的压缩文件除外,目前无法自动检测。卸载数据时,文件会使用默认格式 gzip 自动压缩。

GZIP

BROTLI

如果加载/卸载 Brotli 压缩文件,则必须进行指定。

ZSTD

支持 Zstandard v0.8(及更高版本)。

DEFLATE

使用 Deflate 压缩的文件(带有 zlib 标头、RFC1950)。

RAW_DEFLATE

使用 Raw Deflate 压缩的文件(无标头、RFC1951)。

NONE

在加载数据时,表示文件尚未压缩。在卸载数据时,指定卸载的未压缩文件。

默认值:

AUTO

备注

我们建议您使用默认 AUTO 选项,因为它将确定文件和编解码器压缩。指定压缩选项是指对文件进行压缩,而不是对块(编解码器)进行压缩。

TRIM_SPACE = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定是否从字符串中移除前导和尾随空格。

例如,如果您的外部数据库软件将字段放在引号中,但插入了前导空格,则 Snowflake 会读取前导空格而不是左引号字符作为字段的开头(即引号被解释为字段数据字符串的一部分)。可将选项设置为 TRUE,在数据加载期间移除不需要的空格。

仅当使用 MATCH_BY_COLUMN_NAME 复制选项将 Avro 数据加载到单独的列中时,此文件格式选项才应用于以下操作。

默认值:

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定是否将无效的 UTF-8 字符替换为 Unicode 替换字符 ()。此选项执行一对一的字符替换。

:

如果设置为 TRUE,Snowflake 会将无效的 UTF-8 字符替换为 Unicode 替换字符。

如果设置为 FALSE,则加载操作在检测到无效的 UTF-8 字符编码时产生错误。

默认值:

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )
使用:

仅加载数据

定义:

用于与 SQL NULL 相互转换的字符串。Snowflake 会将数据加载源中的这些字符串替换为 SQL NULL。若要指定多个字符串,请将字符串列表放在括号中,并使用逗号分隔每个值。

仅当使用 MATCH_BY_COLUMN_NAME 复制选项将 Avro 数据加载到单独的列中时,此文件格式选项才应用于以下操作。

请注意,无论数据类型如何,Snowflake 都会将该值的所有实例转换为 NULL。例如,如果 2 指定为值,则转换为字符串或数字的所有 2 实例。

例如:

NULL_IF = ('\N', 'NULL', 'NUL', '')

请注意,此选项可以包含空字符串。

默认值:

\\N``(即 NULL,假设 :code:`ESCAPE_UNENCLOSED_FIELD` 值为 ``\\

TYPE = ORC

TRIM_SPACE = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定是否从字符串中移除前导和尾随空格。

例如,如果您的外部数据库软件将字段放在引号中,但插入了前导空格,则 Snowflake 会读取前导空格而不是左引号字符作为字段的开头(即引号被解释为字段数据字符串的一部分)。可将选项设置为 TRUE,在数据加载期间移除不需要的空格。

仅当使用 MATCH_BY_COLUMN_NAME 复制选项将 Orc 数据加载到单独的列中时,此文件格式选项才应用于以下操作。

默认值:

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定是否将无效的 UTF-8 字符替换为 Unicode 替换字符 ()。此选项执行一对一的字符替换。

:

如果设置为 TRUE,Snowflake 会将无效的 UTF-8 字符替换为 Unicode 替换字符。

如果设置为 FALSE,则加载操作在检测到无效的 UTF-8 字符编码时产生错误。

默认值:

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )
使用:

数据加载和外部表

定义:

用于与 SQL NULL 相互转换的字符串。Snowflake 会将数据加载源中的这些字符串替换为 SQL NULL。若要指定多个字符串,请将字符串列表放在括号中,并使用逗号分隔每个值。

仅当使用 MATCH_BY_COLUMN_NAME 复制选项将 Orc 数据加载到单独的列中时,此文件格式选项才应用于以下操作。

请注意,无论数据类型如何,Snowflake 都会将该值的所有实例转换为 NULL。例如,如果 2 指定为值,则转换为字符串或数字的所有 2 实例。

例如:

NULL_IF = ('\N', 'NULL', 'NUL', '')

请注意,此选项可以包含空字符串。

默认值:

\\N``(即 NULL,假设 :code:`ESCAPE_UNENCLOSED_FIELD` 值为 ``\\

TYPE = PARQUET

COMPRESSION = AUTO | LZO | SNAPPY | NONE
使用:

数据加载、数据卸载和外部表

定义:

  • 加载数据时,指定 Parquet 文件中列的当前压缩算法。

  • 卸载数据时,使用指定的压缩算法压缩数据文件。

:

支持的值

备注

AUTO

加载数据时,会自动检测压缩算法。支持以下压缩算法:Brotli、gzip、Lempel-Ziv-Oberhumer (LZO)、LZ4、Snappy 或 Zstandard v0.8(及更高版本)。. 卸载数据时,默认情况下使用 ` Snappy <https://google.github.io/snappy/ (https://google.github.io/snappy/)>`_ 压缩算法压缩卸载的文件。

LZO

卸载数据时,默认情况下使用 Snappy 算法压缩文件。如果将数据卸载到 LZO 压缩文件,请指定此值。

SNAPPY

卸载数据时,默认情况下使用 Snappy 算法压缩文件。您可以选择指定此值。

NONE

在加载数据时,表示文件尚未压缩。在卸载数据时,指定卸载的未压缩文件。

默认值:

AUTO

SNAPPY_COMPRESSION = TRUE | FALSE
使用:

仅数据卸载

支持的值

备注

AUTO

对于卸载的文件,默认情况下使用 ` Snappy <https://google.github.io/snappy/ (https://google.github.io/snappy/)>`_ 压缩算法进行压缩。

SNAPPY

如果卸载 Snappy 压缩文件,则可以指定。

NONE

在加载数据时,表示文件尚未压缩。在卸载数据时,指定卸载的未压缩文件。

定义:

布尔,指定是否使用 SNAPPY 算法压缩卸载文件。

备注

已弃用。`请改用 :samp:`COMPRESSION = SNAPPY

限制:

仅支持数据卸载操作。

默认值:

TRUE

BINARY_AS_TEXT = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定是否将未定义逻辑数据类型的列解释为 UTF-8 文本。当设置为 FALSE 时,Snowflake 会将这些列解释为二进制数据。

默认值:

TRUE

备注

Snowflake 建议您将 BINARY_AS_TEXT 设置为 FALSE 以避免任何潜在的转换问题。

TRIM_SPACE = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定是否从字符串中移除前导和尾随空格。

例如,如果您的外部数据库软件将字段放在引号中,但插入了前导空格,则 Snowflake 会读取前导空格而不是左引号字符作为字段的开头(即引号被解释为字段数据字符串的一部分)。可将选项设置为 TRUE,在数据加载期间移除不需要的空格。

仅当使用 MATCH_BY_COLUMN_NAME 复制选项将 Parquet 数据加载到单独的列中时,此文件格式选项才应用于以下操作。

默认值:

FALSE

USE_LOGICAL_TYPE = TRUE | FALSE
使用:

数据加载、暂存文件中的数据查询和架构检测。

定义:

布尔,指定是否使用 Parquet 逻辑类型。使用此文件格式选项,Snowflake 可以在数据加载期间解释 Parquet 逻辑类型。有关更多信息,请参阅 ` Parquet 逻辑类型定义 <https://github.com/apache/parquet-format/blob/master/LogicalTypes.md (https://github.com/apache/parquet-format/blob/master/LogicalTypes.md)>`_。创建新文件格式选项时,若要启用 Parquet 逻辑类型,请将 USE_LOGICAL_TYPE 设置为 TRUE。

限制:

不支持数据卸载。

USE_VECTORIZED_SCANNER = TRUE | FALSE
使用:

暂存文件中的数据加载和数据查询

定义:

指定是否使用矢量化扫描程序加载 Parquet 文件的布尔值。

默认值:

FALSE。在未来的 BCR 中,默认值将为 TRUE

使用矢量化扫描程序可以显著减少加载 Parquet 文件的延迟,因为该扫描器非常适合 Parquet (https://parquet.apache.org/docs/file-format/) 文件的列式格式。该扫描程序只会将 Parquet 文件的相关部分下载到内存中,如选定列的子集。

只有在满足以下条件时,您才能启用矢量化扫描程序:

  • ON_ERROR 选项必须设置为 ABORT_STATEMENTSKIP_FILE

    其他值,CONTINUESKIP_FILE_num'SKIP_FILE_num%' 不受支持。

如果 USE_VECTORIZED_SCANNER 设置为 TRUE,则矢量化扫描程序具有以下行为:

  • BINARY_AS_TEXT 选项始终被视为 FALSEUSE_LOGICAL_TYPE 选项始终被视为 TRUE,无论实际设置的值是什么。

  • 矢量化扫描程序支持 Parquet 映射类型。扫描映射类型的输出如下:

    "my_map":
      {
       "k1": "v1",
       "k2": "v2"
      }
    
    Copy
  • 矢量化扫描程序在输出中显示 NULL 值,如以下示例所示:

    "person":
     {
      "name": "Adam",
      "nickname": null,
      "age": 34,
      "phone_numbers":
      [
        "1234567890",
        "0987654321",
        null,
        "6781234590"
      ]
      }
    
    Copy
  • 矢量化扫描程序按以下方式处理 Time 和 Timestamp:

    Parquet

    Snowflake 矢量化扫描程序

    TimeType(isAdjustedToUtc=True/False, unit=MILLIS/MICROS/NANOS)

    TIME

    TimestampType(isAdjustedToUtc=True, unit=MILLIS/MICROS/NANOS)

    TIMESTAMP_LTZ

    TimestampType(isAdjustedToUtc=False, unit=MILLIS/MICROS/NANOS)

    TIMESTAMP_NTZ

    INT96

    TIMESTAMP_LTZ

如果 USE_VECTORIZED_SCANNER 设置为 FALSE,扫描程序具有以下行为:

  • 此选项不支持 Parquet 映射。 扫描映射类型的输出如下:

    "my_map":
     {
      "key_value":
      [
       {
              "key": "k1",
              "value": "v1"
          },
          {
              "key": "k2",
              "value": "v2"
          }
        ]
      }
    
    Copy
  • 此选项不会在扫描输出中明确显示 NULL 值,如以下示例所示:

    "person":
     {
      "name": "Adam",
      "age": 34
      "phone_numbers":
      [
       "1234567890",
       "0987654321",
       "6781234590"
      ]
     }
    
    Copy
  • 此选项按以下方式处理 Time 和 Timestamp:

    Parquet

    当 USE_LOGICAL_TYPE = TRUE 时

    当 USE_LOGICAL_TYPE = FALSE 时

    TimeType(isAdjustedToUtc=True/False, unit=MILLIS/MICROS)

    TIME

    • TIME(如果 ConvertedType 存在)

    • INTEGER(如果 ConvertedType 不存在)

    TimeType(isAdjustedToUtc=True/False, unit=NANOS)

    TIME

    INTEGER

    TimestampType(isAdjustedToUtc=True,unit=MILLIS/MICROS)

    TIMESTAMP_LTZ

    TIMESTAMP_NTZ

    TimestampType(isAdjustedToUtc=True,unit=NANOS)

    TIMESTAMP_LTZ

    INTEGER

    TimestampType(isAdjustedToUtc=False, unit=MILLIS/MICROS)

    TIMESTAMP_NTZ

    • TIMESTAMP_LTZ(如果 ConvertedType 存在)

    • INTEGER(如果 ConvertedType 不存在)

    TimestampType(isAdjustedToUtc=False, unit=NANOS)

    TIMESTAMP_NTZ

    INTEGER

    INT96

    TIMESTAMP_NTZ

    TIMESTAMP_NTZ

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定是否将无效的 UTF-8 字符替换为 Unicode 替换字符 ()。此选项执行一对一的字符替换。

:

如果设置为 TRUE,Snowflake 会将无效的 UTF-8 字符替换为 Unicode 替换字符。

如果设置为 FALSE,则加载操作在检测到无效的 UTF-8 字符编码时产生错误。

默认值:

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )
使用:

仅加载数据

定义:

用于与 SQL NULL 相互转换的字符串。Snowflake 会将数据加载源中的这些字符串替换为 SQL NULL。若要指定多个字符串,请将字符串列表放在括号中,并使用逗号分隔每个值。

仅当使用 MATCH_BY_COLUMN_NAME 复制选项将 Parquet 数据加载到单独的列中时,此文件格式选项才应用于以下操作。

请注意,无论数据类型如何,Snowflake 都会将该值的所有实例转换为 NULL。例如,如果 2 指定为值,则转换为字符串或数字的所有 2 实例。

例如:

NULL_IF = ('\N', 'NULL', 'NUL', '')

请注意,此选项可以包含空字符串。

默认值:

\\N``(即 NULL,假设 :code:`ESCAPE_UNENCLOSED_FIELD` 值为 ``\\

TYPE = XML

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
使用:

仅加载数据

定义:
  • 加载数据时,指定数据文件的当前压缩算法。Snowflake 使用此选项来检测 已压缩 的数据文件是如何压缩的,以便提取文件中的压缩数据进行加载。

  • 卸载数据时,使用指定的压缩算法压缩数据文件。

:

支持的值

备注

AUTO

加载数据时,压缩算法会自动检测,但使用 Brotli 的压缩文件除外,目前无法自动检测。卸载数据时,文件会使用默认格式 gzip 自动压缩。

GZIP

BZ2

BROTLI

如果加载/卸载 Brotli 压缩文件,则必须进行指定。

ZSTD

支持 Zstandard v0.8(及更高版本)。

DEFLATE

使用 Deflate 压缩的文件(带有 zlib 标头、RFC1950)。

RAW_DEFLATE

使用 Raw Deflate 压缩的文件(无标头、RFC1951)。

NONE

在加载数据时,表示文件尚未压缩。在卸载数据时,指定卸载的未压缩文件。

默认值:

AUTO

IGNORE_UTF8_ERRORS = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定 UTF-8 编码错误是否产生错误条件。它是 REPLACE_INVALID_CHARACTERS 的替代语法。

:

如果设置为 TRUE,则任何无效 UTF-8 的序列都将以静默方式替换为 Unicode 字符 U+FFFD (即“替换字符”)。

如果设置为 FALSE,则加载操作在检测到无效的 UTF-8 字符编码时产生错误。

默认值:

FALSE

PRESERVE_SPACE = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定 XML 分析器是否在元素内容中保留前导空格和尾随空格。

默认值:

FALSE

STRIP_OUTER_ELEMENT = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定 XML 解析器是否剥离外部 XML 元素,将第 2 级元素公开为单独的文档。

默认值:

FALSE

DISABLE_SNOWFLAKE_DATA = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定 XML 分析器是否禁用对 Snowflake 半结构化数据标记的识别。

默认值:

FALSE

DISABLE_AUTO_CONVERT = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定 XML 分析器是否禁用数值和布尔值从文本到原生表示形式的自动转换。

默认值:

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
使用:

数据加载和外部表

定义:

布尔,指定是否将无效的 UTF-8 字符替换为 Unicode 替换字符 ()。此选项执行一对一的字符替换。

:

如果设置为 TRUE,Snowflake 会将无效的 UTF-8 字符替换为 Unicode 替换字符。

如果设置为 FALSE,则加载操作在检测到无效的 UTF-8 字符编码时产生错误。

默认值:

FALSE

SKIP_BYTE_ORDER_MARK = TRUE | FALSE
使用:

仅加载数据

定义:

布尔,指定是否跳过输入文件中存在的任何 BOM(字节顺序标记)。BOM 是数据文件开头的字符代码,用于定义字节顺序和编码形式。

如果设置为 FALSE,Snowflake 会识别数据文件中的任何 BOM,这可能会导致 BOM 错误或合并到表中的第一列中。

默认值:

TRUE

访问控制要求

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

权限

对象

备注

USAGE

存储集成

仅当使用 :doc:` 存储集成 </sql-reference/sql/create-storage-integration>` 访问云存储服务时才需要。

CREATE STAGE

架构

仅在创建永久暂存区时需要。

OWNERSHIP

暂存区

  • 若要创建创建与架构中已存在的对象同名的临时对象,必须授予角色或使其继承对象上的 OWNERSHIP 权限。

  • 需要为 现有 暂存区执行 CREATE OR ALTER STAGE 语句。

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

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 OR ALTER STAGE 使用说明

限制

  • ALTER STAGE 命令的所有限制均适用。

  • CREATE OR ALTER STAGE 命令仅接受和处理与当前类型的暂存区(内部或外部)兼容的属性。与内部暂存区不兼容的属性不能在内部暂存区的 CREATE OR ALTER STAGE 命令中使用。

  • CREATE OR ALTER STAGE 命令无法更改外部暂存区的存储提供商类型。

  • 不支持设置或取消设置标签;然而,现有标签不会被 CREATE OR ALTER STAGE 语句所更改,而是保持不变。

属性

  • 在暂存区定义中缺少先前设置的属性会导致将其重置为默认值。

目录表选项

  • CREATE OR ALTER STAGE 命令不支持 REFRESH_ON_CREATE 选项。

  • CREATE OR ALTER STAGE 命令不支持刷新目录表。

    • 新创建的目录表将不会刷新。

    • 要刷新目录表,请使用 ALTER REFRESH

示例

基本示例

内部暂存区

创建一个内部暂存区,并为该暂存区指定服务器端加密:

CREATE STAGE my_int_stage
  ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
Copy

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

CREATE TEMPORARY STAGE my_temp_int_stage;
Copy

创建一个临时内部暂存区,该暂存区引用名为 my_csv_format 的文件格式(使用 CREATE FILE FORMAT 创建):

CREATE TEMPORARY STAGE my_int_stage
  FILE_FORMAT = my_csv_format;
Copy

COPY INTO <table> 语句中引用暂存区时,将自动设置文件格式选项。

创建包含 目录表 </user-guide/data-load-dirtables>`的内部暂存区。该暂存区引用名为 :code:`myformat 的文件格式:

CREATE STAGE mystage
   DIRECTORY = (ENABLE = TRUE)
   FILE_FORMAT = myformat;
Copy

外部暂存区

Amazon S3

在以下示例中,如果 S3 桶 在中国的某个区域中,请为 URL 参数使用 s3china:// 协议。

使用名为 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

CREATE OR ALTER STAGE 示例

内部暂存区

创建带注释的内部暂存区:

CREATE OR ALTER STAGE my_int_stage
  COMMENT='my_comment'
  ;
Copy

更改内部暂存区以创建目录表并移除注释:

CREATE OR ALTER STAGE my_int_stage
  DIRECTORY=(ENABLE=true);
Copy

外部暂存区

使用带有凭据的 s3 桶创建外部暂存区:

CREATE OR ALTER STAGE my_ext_stage
  URL='s3://load/files/'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z');
Copy

更改外部暂存区以创建目录表:

CREATE OR ALTER STAGE my_ext_stage
  URL='s3://load/files/'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
  DIRECTORY=(ENABLE=true);
Copy
语言: 中文