ALTER STAGE¶
修改现有的已命名内部或外部暂存区的属性。
语法¶
ALTER STAGE [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER STAGE [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER STAGE <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
-- Internal stage
ALTER STAGE [ IF EXISTS ] <name> SET
  [ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM } [ formatTypeOptions ] } ) ]
  { [ COMMENT = '<string_literal>' ] }
-- External stage
ALTER STAGE [ IF EXISTS ] <name> SET {
    [ externalStageParams ]
    [ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM } [ formatTypeOptions ] } ) ]
    [ COMMENT = '<string_literal>' ]
    }
其中:
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 } ]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
目录表语法¶
ALTER STAGE [ IF EXISTS ] <name> SET DIRECTORY = ( { ENABLE = TRUE | FALSE } )
ALTER STAGE [ IF EXISTS ] <name> REFRESH [ SUBPATH = '<relative-path>' ]
参数¶
name指定要更改的暂存区的标识符。如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
RENAME TO new_name指定暂存区的新标识符;对于架构来说必须唯一。
有关更多详细信息,请参阅 标识符要求。
可以将对象移动到其他数据库和/或架构,同时选择重命名对象。为此,请指定一个限定
new_name值,该值分别以db_name.schema_name.object_name或schema_name.object_name的形式包含新数据库和/或架构名称。备注
目标数据库和/或架构必须已存在。此外,新位置中不能存在同名对象;否则,该语句将返回错误。
除非 对象所有者(即拥有对象 OWNERSHIP 权限的角色)也拥有目标架构,否则禁止将对象移动到托管访问架构。
SET ...指定要为暂存区设置的选项/属性:
URL = ' ... '、.STORAGE_INTEGRATION = ...、.CREDENTIALS = ( ... )、.ENCRYPTION = ( ... )为外部暂存区修改特定于云的 URL、存储集成或凭据,和/或加密。有关更多详细信息,请参阅 :ref:` 外部暂存区参数 <label-alter_stage_externalstageparams>`(本主题内容)。
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]指定 标签 名称和标签字符串值。
标签值始终为字符串,标签值的最大字符数为 256。
有关在语句中指定标签的信息,请参阅 对象的标签配额。
COMMENT = 'string_literal'为暂存区添加注释或覆盖现有注释。
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-alter_stage_formattypeoptions>`(本主题内容)。
CUSTOM格式类型指定基础暂存区持有非结构化数据,并且只能与FILE_PROCESSOR复制选项一起使用。备注
FORMAT_NAME和TYPE是互斥的;您只能为一个暂存区指定一个或另一个。
备注
请勿使用 CREATE STAGE、ALTER STAGE、CREATE TABLE 或 ALTER TABLE 命令指定复制选项。建议您使用 COPY INTO <table> 命令指定复制选项。
外部暂存区参数 (externalStageParams)¶
URL = 'cloud_specific_url'如果一个暂存区没有 URL,它就是一个内部暂存区
警告
修改暂存区的
URL参数可能会中断依赖于暂存区的对象的以下功能:利用云消息传递来触发数据加载的管道对象(即,
AUTO_INGEST = TRUE)。利用云消息传递触发元数据刷新的外部表(即,
AUTO_REFRESH = TRUE)。
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。container是 Azure 容器的名称(例如mycontainer)。path是云存储位置中文件(即文件的名称以通用字符串开头)的可选路径(区分大小写),用于限制要加载的文件集。不同的云存储服务也可以将路径称为 前缀 或 文件夹。
STORAGE_INTEGRATION = integration_name或 .CREDENTIALS = ( cloud_specific_credentials )仅当 Amazon S3、Google Cloud Storage 或 Microsoft Azure 为专用时才需要;公共桶/容器不需要
Amazon S3
STORAGE_INTEGRATION = integration_name指定将外部云存储的身份验证责任委托给 Snowflake Identity and Access Management (IAM) 实体的存储集成的名称。有关更多详细信息,请参阅 CREATE STORAGE INTEGRATION。
备注
我们强烈建议使用存储集成。此选项避免了在创建暂存或加载数据时使用 CREDENTIALS 参数提供云存储凭据的需要。
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_IDAWS_SECRET_KEYAWS_TOKEN
访问专用桶 需要 这三个组件。指定时间段后,临时凭证将过期,无法再使用。然后,您必须生成一组新的有效临时凭据。
重要
COPY 命令还允许使用永久(又名“长期”)凭据;但是,出于安全原因,Snowflake 不 建议使用它们。如果必须使用永久凭据,Snowflake 建议定期为外部暂存区生成新的永久凭据。
IAM 角色: 省略安全凭证和访问密钥,而是使用
AWS_ROLE并指定 AWS 角色 ARN (Amazon Resource Name) 来标识角色。重要
使用 AWS IAM 角色访问私有 S3 桶以加载或卸载数据的功能现已弃用(即在未来版本中将删除支持,TBD)。我们强烈建议修改使用此功能的任何现有 S3 暂存区,改为引用存储集成对象。有关说明,请参阅 选项 1:配置 Snowflake 存储集成以访问 Amazon S3。
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 参数提供云存储凭据的需要。
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`(即,当提供 :samp:`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 用于在卸载时加密文件。
请注意,数据加载时会忽略此值。
默认:
NONEGoogle 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 用于在卸载时加密文件。
请注意,数据加载时会忽略此值。如果服务账户有足够的权限来解密桶中的数据,则加载操作应会成功。
默认:
NONEMicrosoft 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 位密钥。
默认:
NONEUSE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }指定是否对外部暂存区使用 专用连接,以加强您的安全态势。
如果外部暂存区使用存储集成,并且该集成配置为专用连接,请将此参数设置为 FALSE。
有关使用此参数的信息,请参阅以下之一:
目录表参数¶
ENABLE = TRUE | FALSE指定是否向暂存区添加目录表。当值为 TRUE 时,将向暂存区添加目录表。
备注
与 S3 兼容的外部暂存区 不 支持将此参数设置为 TRUE。无法自动刷新与 S3 兼容的外部暂存区的元数据。
默认:
FALSEREFRESH访问目录表定义中引用的暂存数据文件并更新表元数据:
路径中的新文件将添加到表元数据中。
对路径中文件的更改将在表元数据中更新。
路径中不再存在的文件将从表元数据中移除。
您可以在每次将文件添加到暂存区、更新或删除文件时执行此命令。此步骤将元数据与目录表的暂存区定义中的最新关联文件集同步。
SUBPATH = 'relative-path'(可选)指定相对路径以刷新数据文件的特定子集的元数据。
格式类型选项 (formatTypeOptions)¶
根据指定的文件格式类型 (FILE_FORMAT = ( TYPE = ... )),可以包含以下一个或多个特定于格式的选项(用空格、逗号或换行符分隔):
TYPE = CSV¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE- 使用:
 数据加载、数据卸载和外部表
- 定义:
 加载数据时,指定数据文件的当前压缩算法。Snowflake 使用此选项来检测 已压缩 的数据文件是如何压缩的,以便提取文件中的压缩数据进行加载。
卸载数据时,使用指定的压缩算法压缩数据文件。
- 值:
 支持的值
备注
AUTO加载数据时,压缩算法会自动检测,但使用 Brotli 的压缩文件除外,目前无法自动检测。卸载数据时,文件会使用默认格式 gzip 自动压缩。
GZIPBZ2BROTLI加载/卸载 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' | AUTOTIME_FORMAT = 'string' | AUTOTIMESTAMP_FORMAT = string' | AUTOBINARY_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 自动压缩。
GZIPBZ2BROTLI如果加载/卸载 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 自动压缩。
GZIPBROTLI如果加载/卸载 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 自动压缩。
GZIPBZ2BROTLI如果加载/卸载 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
访问控制要求¶
权限  | 
对象  | 
备注  | 
|---|---|---|
OWNERSHIP  | 
暂存区  | 
在更改暂存区属性以及使用以下语法在暂存区上启用或禁用目录目录表时必需:ALTER STAGE ...SET DIRECTORY。 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).  | 
WRITE  | 
暂存区  | 
在使用 ALTER STAGE ...REFRESH刷新元数据时必填。  | 
要对架构中的任何对象执行操作,需要对父数据库和架构的 USAGE 权限。请注意,如果某个角色获授某个架构的任意权限,该角色便能够解析该架构。例如,若某角色被授予 CREATE 权限,则可以在该架构上创建对象,而无需 同时 被授予该架构的 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
对于使用 S3 接入点的外部暂存区:
如果您使用的是存储集成,则必须为集成配置 IAM 策略,以向 S3 接入点授予权限。有关更多信息,请参阅 选项 1:配置 Snowflake 存储集成以访问 Amazon S3。
不支持多区域接入点。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
将 my_int_stage 重命名为 new_int_stage:
ALTER STAGE my_int_stage RENAME TO new_int_stage;
更改 my_ext_stage`(在“:doc:`create-stage”示例中创建的),以将 URL 更改为引用 files 文件夹中名为 new 的子文件夹。如果引用此暂存区的 COPY INTO <table> 命令在任何记录上遇到数据错误,则将跳过该文件。所有其他复制选项均设置为默认值:
如果 S3 桶位于中国的某个,请为 s3china:// 参数使用 URL 协议。
ALTER STAGE my_ext_stage SET URL='s3://loading/files/new/' COPY_OPTIONS = (ON_ERROR='skip_file');
更改 my_ext_stage,提供的凭据将被替换为对名为 myint 的存储集成的引用:
ALTER STAGE my_ext_stage SET STORAGE_INTEGRATION = myint;
更改 my_ext_stage 以指定暂存区的新访问密钥 ID 和秘密访问密钥:
ALTER STAGE my_ext_stage SET CREDENTIALS=(AWS_KEY_ID='d4c3b2a1' AWS_SECRET_KEY='z9y8x7w6');(上述示例中使用的凭据值仅用于说明目的)
更改 my_ext_stage3 以将暂存区的加密类型更改为 AWS_SSE_S3 服务器端加密:
ALTER STAGE my_ext_stage3 SET ENCRYPTION=(TYPE='AWS_SSE_S3');
目录表示例¶
将一个目录表添加到一个名为 mystage 的现有暂存区:
ALTER STAGE mystage SET DIRECTORY = ( ENABLE = TRUE );
在名为 mystage 的暂存区中手动刷新目录表元数据:
ALTER STAGE mystage REFRESH;
+-------------------------+----------------+-------------------------------+
| file                    | status         | description                   |
|-------------------------+----------------+-------------------------------|
| data/json/myfile.json   | REGISTERED_NEW | File registered successfully. |
+-------------------------+----------------+-------------------------------+
在名为 mystage 的暂存区中手动刷新 data 路径中文件的目录表元数据:
ALTER STAGE mystage REFRESH SUBPATH = 'data';