Datalake 表格支持的文件格式

开放源代码支持多种文件格式。 所述文件格式是 Db2 Warehouse as a Service 和 Db2 Warehouse on OpenShift 中支持的格式。 列式存储可节省数据处理的时间和空间,使 ORC 和 Parquet 成为首选文件格式。

Parquet

Parquet 文件格式是一种开源的列式存储格式。 Parquet 可高效处理各类大规模查询。 Parquet 尤其适用于扫描特定表内特定列的查询。

这是 Db2 中 Datalake 表格支持的默认文件格式。

该文件格式的推荐压缩类型是 snappy(默认)和 gzip。

优化列柱式 (ORC)

ORC 文件格式是一种高效的数据存储方式。 ORC 文件以列式格式存储行集合,可在集群中并行处理行集合。

ORC 文件格式为每一列使用特定类型的编码器,并将文件分成大条纹。 每个条带都使用索引,使 Db2® 阅读器能够跳过不满足过滤条件的行集。 页脚包含元数据,包括每个条带的字节范围信息和文件类型信息。 Db2 用于处理 ORC 文件的资源量受 ORC 磁条大小的影响。 ORC 文件的推荐条带大小由 orc.stripe.size 属性决定,为 64 MB。 应避免磁条大小超过 256 MB。

有关将 ORC 文件格式与历史日期和 TIMESTAMP 值一起使用的详情,请参阅 Datalake 表支持的数据类型

该文件格式的推荐压缩类型是 zlib(默认)。

Avro

Avro 是 Apache 的一个开源项目,它提供了一种在 Hadoop 环境中表示复杂数据结构的便捷方法。 通过在 CREATE TABLE (Datalake) 语句中使用 Avro SerDe ,可以将 Avro 数据作为 Datalake 表读取或写入。

以下 Avro 数据类型可映射到 Db2 数据类型:
表 1. 支持的原始数据类型
Avro 数据类型 Db2 数据类型 avro.schema.literal
LONG BIGINT

{

"名称":"<COL_NAME>"、

"type": "long"

},

BYTES 二进制、振动二进制

{

"名称":"<COL_NAME>"、

"类型":"字节"

},

BOOLEAN BOOLEAN

{

"名称":"<COL_NAME>"、

"type": "boolean"

},

字符串 varchar, char, string

{

"名称":"<COL_NAME>"、

"type": "string"

},

双人 FLOAT8

{

"名称":"<COL_NAME>"、

"type": "double"

},

FLOAT 浮点数 FLOAT4 ,实数

{

"名称":"<COL_NAME>"、

"类型":"浮子"

},

INT integer, int, INT4, smallint, INT2, tinyint

{

"名称":"<COL_NAME>"、

"类型":"英特"

},

文本

文本文件格式非常普遍,因为它易于使用和管理。 数据以行为单位存储,每一行为一条记录。 每行以换行符 (\n) 结束。

默认情况下,文本文件格式的字段结束符是 \001,即代表 CTRL-A 的 ASCII 字符。 如果要使用 CSV 文件,建议使用 EXTERNAL TABLE 支持,而不是 Datalake TABLE 支持。 请参阅 CREATE EXTERNAL TABLE 语句

虽然 Hive 中默认使用这种文件格式,但 Db2 Datalake 表并非如此,默认使用 Parquet 格式。

注意: 冰山表不支持文本文件格式。

如果提供了不兼容的列值(例如,如果您试图在定义为 INT 的列中插入 a 值),则会返回错误信息。

如果表格文件中存储的数据包含不兼容的列值,该值将被视为空值。 如果不允许使用空值,则会返回错误信息。

如果输入数据包含的列(字段)多于表格,数据中的附加字段将被忽略。 如果输入数据中的字段少于表中的列,则在列定义为可空的情况下插入空值;否则将返回错误信息。

一般来说,实际数据不得包含分隔符。 唯一的例外是,如果您指定了 "ESCAPED BY "子句,并且这些字符被正确转义,那么数据中就可能存在字段结束符。 换行符不能转义。

使用转义字符保留数据中的逗号。

...
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' ESCAPED BY '\\'
...

此文件格式不支持压缩。

JSON

JSON 文件格式是数据交换、网络应用程序开发和应用程序日志的常用开放格式。 您可以通过指定 STORED AS JSONFILE 来查询有效 JSON LINE 格式的数据。 每一行必须用 JSON 片段表示,每行之间必须用换行符隔开。

注意: Iceberg 表不支持 JSON 文件格式。