CREATE STAGE¶
创建一个名为 * 内部 * 或 * 外部 * 的新暂存区,用于将数据从文件加载到 Snowflake 表中,并将数据从表中卸载到文件中:
- 内部暂存区:
将数据文件存储在 Snowflake 内。有关更多详细信息,请参阅 为本地文件选择内部暂存区。
- 外部暂存区:
引用在 Snowflake 外部位置存储的数据文件。目前支持以下云存储服务:
Amazon S3 桶
Google Cloud Storage 桶
Microsoft Azure 容器
存储位置可以是私有/受保护的,也可以是公用的。
您不能访问存档云存储类别中保存的数据,这些数据需要恢复后才能检索。例如,这些存档存储类别包括 Amazon S3 Glacier Flexible Retrieval 或 Glacier Deep Archive 存储类别,或者 Microsoft Azure Archive Storage。
内部或外部暂存区均可包含 * 目录表 *。目录表 将暂存文件的目录存储在云存储中。
此外,该命令还支持以下变体:
CREATE OR ALTER STAGE:创建新暂存区(如果不存在)或更改现有暂存区。
CREATE STAGE ... CLONE:创建现有暂存区的克隆。有关更多信息,请参阅 克隆注意事项。
语法¶
-- 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>' , ... ] ) ]
其中:
internalStageParams ::=
[ ENCRYPTION = ( TYPE = 'SNOWFLAKE_FULL'
| TYPE = 'SNOWFLAKE_SSE' ) ]
externalStageParams (for Amazon S3) ::=
URL = '<protocol>://<bucket>[/<path>/]'
[ AWS_ACCESS_POINT_ARN = '<string>' ]
[ { 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' ) ]
[ USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE } ]
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' ) ]
[ USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE } ]
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 }
[ AUTO_REFRESH = { 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>' ] ) ]
formatTypeOptions ::=
-- If TYPE = CSV
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
RECORD_DELIMITER = '<string>' | NONE
FIELD_DELIMITER = '<string>' | NONE
MULTI_LINE = TRUE | FALSE
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
MULTI_LINE = 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_AUTO_CONVERT = TRUE | FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
备注
请勿使用 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>' ]
CREATE STAGE ... CLONE¶
创建具有相同参数值的新暂存区:
CREATE [ OR REPLACE ] STAGE [ IF NOT EXISTS ] <name> CLONE <source_stage>
[ ... ]
有关更多详细信息,请参阅 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>)适应
CSV
、JSON
或PARQUET
。
如果指定了文件格式类型,则可以指定其他特定于格式的选项。有关更多详细信息,请参阅 :ref:`label-create_stage_formattypeoptions`(本主题内容)。
CUSTOM
格式类型指定基础暂存区持有非结构化数据,并且只能与FILE_PROCESSOR
复制选项一起使用。
默认:
TYPE = CSV
备注
FORMAT_NAME
和 TYPE
是互斥的;您只能为一个暂存区指定一个或另一个。
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 = 'protocol://bucket[/path/]'
指定用于存储数据文件以进行加载/卸载的外部位置(现有 S3 桶)的 URL,其中:
protocol
是以下其中一项:s3
是指中国境外公共 AWS 区域的 S3 存储。s3china
代表中国境内公共 AWS 区域中的 S3 存储。s3gov
代表 政府区域 中的 S3 存储。
只能通过在同一政府区域中托管的 Snowflake 账户,使用存储集成访问 政府区域 中的云存储。
同样,如果您需要访问中国某个区域的云存储,则只能从中国同一区域托管的 Snowflake 账户访问存储集成。
在这些情况下,请在 CREATE STAGE 命令中使用 CREDENTIALS 参数(而不是使用存储集成)来提供身份验证凭据。
bucket
是 S3 桶的名称或 S3 桶接入点的 桶样式别名 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html)。对于 S3 接入点,您还必须为AWS_ACCESS_POINT_ARN
参数指定一个值。path
是云存储位置中文件(文件的名称以通用字符串开头)的可选路径(区分大小写),用于限制文件集。不同的云存储服务也可以将路径称为 前缀 或 文件夹。
AWS_ACCESS_POINT_ARN = 'string'
指定 S3 接入点的 Amazon 资源名称 (ARN)。仅在为存储
URL
指定 S3 接入点别名时才需要。
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 文档:
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 }
指定是否对外部暂存区使用 专用连接,以加强您的安全态势。
如果外部暂存区使用存储集成,并且该集成配置为专用连接,请将此参数设置为 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 }
指定是否在内部命名暂存区上启用 目录表。
默认:
FALSE
AUTO_REFRESH = { TRUE | FALSE }
指定当 内部命名暂存区 有 新的或更新的 数据文件可用时,Snowflake 是否应自动刷新目录表元数据。
TRUE
Snowflake 会自动刷新目录表元数据。
FALSE
Snowflake 不会自动刷新目录表元数据。必须使用 ALTER STAGE ... REFRESH 定期手动刷新目录表元数据,以使元数据与暂存区路径中的当前文件列表同步。
默认:
FALSE
外部暂存区¶
Amazon S3
ENABLE = { TRUE | FALSE }
指定是否向暂存区添加 目录表。当值为 TRUE 时,将创建包含暂存区的目录表。
默认:
FALSE
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 }
指定当 新的或更新的 数据文件在 URL 值中指定的命名外部暂存区中可用时,Snowflake 是否应支持触发目录表元数据自动刷新。
TRUE
Snowflake 支持触发目录表元数据自动刷新。
FALSE
Snowflake 不支持触发目录表元数据自动刷新。您必须定期手动刷新目录表元数据,方法是使用 ALTER STAGE ...REFRESH,以便将元数据与暂存区路径中的当前文件列表同步。
默认:
FALSE
Google Cloud Storage
ENABLE = { TRUE | FALSE }
指定是否向暂存区添加 目录表。当值为 TRUE 时,将创建包含暂存区的目录表。
默认:
FALSE
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
ENABLE = { TRUE | FALSE }
指定是否向暂存区添加 目录表。当值为 TRUE 时,将创建包含暂存区的目录表。
默认:
FALSE
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
的值。- 默认值:
逗号 (
,
)
MULTI_LINE = TRUE | FALSE
- 使用:
数据加载和外部表
- 定义:
布尔值,指定是否允许多行。如果将 MULTI_LINE 设置为
FALSE
,并且指定记录分隔符存在于 CSV 字段中,则包含该字段的记录将被解析为错误。- 默认值:
TRUE
备注
如果您正在加载符合 RFC4180 规范的大型未压缩的 CSV 文件(大于 128MB),则当 MULTI_LINE 设置为
FALSE
、COMPRESSION 设置为NONE
,并且 ON_ERROR 设置为ABORT_STATEMENT
或CONTINUE
时,Snowflake 支持对这些 CSV 文件进行并行扫描。FILE_EXTENSION = 'string' | NONE
- 使用:
仅数据卸载
- 定义:
指定卸载到暂存区的文件的扩展名。接受任何扩展名。用户负责指定可由任何所需软件或服务读取的文件扩展名。
- 默认值:
null 表示文件扩展名由格式类型
.csv[compression]
确定,其中compression
是由压缩方法添加的扩展名(如果已设置COMPRESSION
)。
备注
如果
SINGLE
复制选项为TRUE
,则默认情况下,COPY 命令会卸载没有文件扩展名的文件。要指定文件扩展名,请在internal_location
或external_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
TIME_FORMAT = 'string' | AUTO
TIMESTAMP_FORMAT = string' | 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_DELIMITER
或RECORD_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<
(此示例中的括号未加载;它们用于分隔加载字符串的开头和结尾)
- 默认值:
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
指定将表中的空字符串卸载为空字符串值,而不用将字段值放在引号内。如果设置为
TRUE
,FIELD_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
MULTI_LINE = TRUE | FALSE
使用:数据加载和外部表
- 定义:
布尔值,指定是否允许多行。如果将 MULTI_LINE 设置为
FALSE
,并且 JSON 记录中存在新行,则包含新行的记录将被解析为错误。- 默认值:
TRUE
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)
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)
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)
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 文件的相关部分下载到内存中,如选定列的子集。
如果
USE_VECTORIZED_SCANNER
设置为TRUE
,则矢量化扫描程序具有以下行为:BINARY_AS_TEXT
选项始终被视为FALSE
,USE_LOGICAL_TYPE
选项始终被视为TRUE
,无论实际设置的值是什么。矢量化扫描程序支持 Parquet 映射类型。扫描映射类型的输出如下:
"my_map": { "k1": "v1", "k2": "v2" }
矢量化扫描程序在输出中显示
NULL
值,如以下示例所示:"person": { "name": "Adam", "nickname": null, "age": 34, "phone_numbers": [ "1234567890", "0987654321", null, "6781234590" ] }
矢量化扫描程序按以下方式处理 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" } ] }
此选项不会在扫描输出中明确显示
NULL
值,如以下示例所示:"person": { "name": "Adam", "age": 34 "phone_numbers": [ "1234567890", "0987654321", "6781234590" ] }
此选项按以下方式处理 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)
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_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
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
USAGE |
存储集成 |
仅当使用 :doc:` 存储集成 </sql-reference/sql/create-storage-integration>` 访问云存储服务时才需要。 |
CREATE STAGE |
架构 |
仅在创建永久暂存区时需要。 |
OWNERSHIP |
暂存区 |
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 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
一般使用说明¶
小心
重新创建暂存区(使用 CREATE OR REPLACE STAGE)可能会产生以下不需要的额外结果:
删除暂存区的现有目录表(如有)。如果使用目录表重新创建暂存区,则默认情况下该目录为空。
暂存区与引用它的任何外部表之间的关联都会断开。
这是因为外部表使用隐藏 ID 而不是暂存区名称链接到暂存区。在后台,CREATE OR REPLACE 语法会删除对象,并使用其他隐藏 ID 重新创建对象。
如果在将暂存区链接到一个或多个外部表后必须重新创建该暂存区,则必须重新创建每个外部表(使用 CREATE OR REPLACE EXTERNAL TABLE)以重新建立关联。调用 GET_DDL 函数以检索 DDL 语句,从而重新创建每个外部表。
引用暂存区的任何管道都将停止加载数据。管道的执行状态将更改为
STOPPED_STAGE_DROPPED
。若要恢复加载数据,必须重新创建这些管道对象(使用 CREATE OR REPLACE PIPE 语法)。
OR REPLACE
和IF NOT EXISTS
子句互斥。它们不能同时用于同一条语句中。CREATE STAGE doesn't check whether the specified URL or credentials are valid. If the credentials aren't valid, when you attempt to use the stage, the system returns an error.
在上传到 Amazon S3 和 Google Cloud Storage 时,Snowflake 使用分段上传。此过程可能会在外部暂存区的存储位置留下不完整的上传内容。
为防止未完成上传的内容累积,我们建议您设置生命周期规则。有关说明,请参阅 Amazon S3 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html) 或 Google Cloud Storage (https://cloud.google.com/storage/docs/lifecycle#abort-mpu) 文档。
对于使用 S3 接入点的外部暂存区:
如果您使用的是存储集成,则必须为集成配置 IAM 策略,以向 S3 接入点授予权限。有关更多信息,请参阅 选项 1:配置 Snowflake 存储集成以访问 Amazon S3。
不支持多区域接入点。
关于元数据:
注意
客户应确保在使用 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');
创建一个临时内部暂存区,其所有属性与上一个示例相同:
CREATE TEMPORARY STAGE my_temp_int_stage;
创建一个临时内部暂存区,该暂存区引用名为 my_csv_format
的文件格式(使用 CREATE FILE FORMAT 创建):
CREATE TEMPORARY STAGE my_int_stage
FILE_FORMAT = my_csv_format;
在 COPY INTO <table> 语句中引用暂存区时,将自动设置文件格式选项。
创建包含 目录表 </user-guide/data-load-dirtables>`的内部暂存区。该暂存区引用名为 :code:`myformat 的文件格式:
CREATE STAGE mystage
DIRECTORY = (ENABLE = TRUE)
FILE_FORMAT = myformat;
外部暂存区¶
Amazon S3
在以下示例中,如果 S3 桶 在中国的某个区域中,请为 URL 参数使用
s3china://
协议。使用名为
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' );使用名为
load
的 S3 桶建外部暂存区,文件夹路径名为encrypted_files
,并使用主密钥进行客户端加密(默认加密类型),以解密/加密桶中存储的文件:CREATE STAGE my_ext_stage2 URL='gcs://load/encrypted_files/' STORAGE_INTEGRATION = my_storage_int ENCRYPTION=(TYPE = 'GCS_SSE_KMS' KMS_KEY_ID = '{a1b2c3});
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' );
CREATE OR ALTER STAGE 示例¶
内部暂存区¶
创建带注释的内部暂存区:
CREATE OR ALTER STAGE my_int_stage
COMMENT='my_comment'
;
更改内部暂存区以创建目录表并移除注释:
CREATE OR ALTER STAGE my_int_stage
DIRECTORY=(ENABLE=true);
外部暂存区¶
使用带有凭据的 s3 桶创建外部暂存区:
CREATE OR ALTER STAGE my_ext_stage
URL='s3://load/files/'
CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z');
更改外部暂存区以创建目录表:
CREATE OR ALTER STAGE my_ext_stage
URL='s3://load/files/'
CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
DIRECTORY=(ENABLE=true);