准备加载数据¶
本主题简要介绍支持的数据文件格式和数据压缩。根据数据的结构,您可能需要在加载数据之前 准备 数据。
本主题内容:
支持的数据类型¶
有关 Snowflake 支持的数据类型的描述,请参阅 SQL 数据类型参考。
数据文件压缩¶
我们建议您在加载大型数据集前压缩数据文件。有关每种数据类型所支持的压缩算法,请参阅 CREATE FILE FORMAT。
加载压缩数据时,Snowflake 会自动为数据文件确定文件和编解码器的压缩方法。COMPRESSION 文件格式选项用于描述在暂存区中数据文件 已经 压缩方式。用以下一种方法设置 COMPRESSION 选项:
作为直接在 COPY INTO <table> 语句中指定的文件格式选项。
作为指定用于命名文件格式或暂存区对象的文件格式选项。然后可以在 COPY INTO <table> 语句中引用命名的文件格式/暂存区对象。
支持的文件格式¶
支持以下文件格式:
结构化/半结构化
类型
备注
结构化
分隔符(CSV、TSV 等)
支持任何有效的单字节分隔符;默认值为逗号(即 CSV)。
半结构化
JSON
Avro
包括压缩的 Avro 文件的自动检测和处理。
ORC
包括压缩的 ORC 文件的自动检测和处理。
Parquet
包括压缩的 Parquet 文件的自动检测和处理。. . 目前,Snowflake 支持使用 Parquet 编写器 v1 生成的 Parquet 文件架构。不支持使用编写器 v2 生成的文件。
XML
支持作为 预览 功能。
文件格式选项指定文件中包含的数据类型,以及有关数据格式的其他相关特征。您可以指定的文件格式选项因计划加载的数据类型而异。Snowflake 提供了一整套文件格式选项默认值。
半结构化文件格式¶
Snowflake 原生支持半结构化数据,这意味着半结构化数据可以加载到关系表中,而无需提前定义架构。Snowflake 支持将半结构化数据直接加载到 VARIANT 类型的列中(有关更多详细信息,请参阅 半结构化数据类型 )。
目前支持的半结构化数据格式包括 JSON、Avro、ORC、Parquet 或 XML:
对于 JSON、Avro、ORC 和 Parquet 数据,每个高级完整对象都作为单独的行加载到表中。每个对象都可以包含换行符和空格,只要该对象有效。
对于 XML 数据,每个高级元素都作为单独的行加载到表中。元素由同名的开始和结束标记标识。
通常,用于存储半结构化数据的表由单个 VARIANT 列组成。加载数据后,您可以查询类似于结构化数据的数据。您还可以执行其他任务,例如从数组中提取值和对象。有关更多信息,请参阅 FLATTEN 表函数。
备注
半结构化数据可以加载到具有多列的表中,但半结构化数据必须作为字段存储在结构化文件(例如 CSV 文件)中。然后,可以将数据加载到表中的指定列中。
命名文件格式¶
Snowflake 支持创建命名文件格式,这些文件格式是封装所有必需格式信息的数据库对象。然后,可以在可以指定单个文件格式选项的所有相同位置使用命名文件格式作为输入,从而帮助简化类似格式数据的数据加载过程。
命名文件格式是可选的,但在计划定期加载类似格式的数据时,建议 使用命名文件格式。
创建命名文件格式¶
您可以使用 Web 界面或 SQL 创建文件格式:
- Snowsight:
选择 Data » Databases。
找到数据库并选择要向其添加文件格式的架构。
选择 Create » File Format。
完成 SQL 语句并选择 Create File Format。
- Classic Console:
- SQL:
有关所有文件格式选项和默认值的说明,请参阅 CREATE FILE FORMAT。
支持的复制选项¶
复制选项确定与错误处理、最大数据大小等相关的数据加载行为。
有关所有复制选项和默认值的说明,请参阅 COPY INTO <table>。
替换默认文件格式和复制选项¶
您可以在以下任何位置指定所需的加载行为(即替换默认设置):
- 在表定义中:
不推荐。
- 在已命名暂存区定义中:
不推荐。
- 加载数据时直接在 COPY INTO TABLE 语句中:
单独显式设置选项。有关更多信息,请参阅 COPY INTO <table>。
备注
不要使用 CREATE STAGE、ALTER STAGE、CREATE TABLE 或 ALTER TABLE 命令指定文件格式选项或复制选项。建议您使用 COPY INTO <table> 命令指定文件格式选项或复制选项。
如果在多个位置指定了文件格式选项或复制选项,则加载操作将按以下优先顺序应用这些选项:
COPY INTO TABLE 语句。
暂存区定义。
表定义。
备注
在多个位置设置的文件格式选项不可累积。在一个位置设置的 任何 选项都会替换按优先级顺序设置的 所有 选项(无论是相同选项还是不同选项)。
在多个位置设置的复制选项是可累积的。在一个位置设置的单个选项将替换按优先级顺序设置的相同选项。