友情链接:
随着大模型AI技术的发展,全球数据量呈指数增长,尤其是非结构化数据的增加挑战了传统关系型数据库的有效性。传统存储方式不仅成本高,还影响数据处理效率。企业面临的主要矛盾在于:尽管采用了结构化存储方案,但复杂的ETL流程割裂了数据工程与分析,增加了协作成本并限制了数据价值的实时释放。
在此背景下,Parquet作为一种革命性的列式存储格式正重塑数据生态。该开源格式通过创新的列式存储架构,实现了三个维度的技术突破:
1)基于列式存储的高效压缩算法,较传统行式存储可节省50%以上的存储空间;
2)支持复杂嵌套数据结构的Schema演化能力,完美适配JSON、Avro等现代数据格式;
3)跨平台兼容性设计,原生支持Java、Python、C++等主流编程语言,并与Spark等大数据计算框架深度集成。
星环科技TDH社区版提供了免费使用的解决方案,不仅全面支持Parquet格式,还兼容其他常用的数据格式如ORC和Avro,满足多样化需求。通过TDH社区版对这些格式的支持,用户能够更高效地处理海量数据,提升查询性能,降低存储成本,为业务创新提供强大支持。
在深入探讨Parquet的技术优势之前,我们需要先理解数据存储领域两个根本性的范式差异——行式存储与列式存储的内在逻辑。
行式存储将数据按行存储在磁盘上,即将同一行的所有字段值存储在一起。
适用于 OLTP(在线事务处理)场景,如数据库系统,其中通常需要快速地执行插入、更新和删除操作。
行式存储的优点:
列式存储将数据按列存储在磁盘上,即将同一列的所有数值存储在一起。
适用于 OLAP(在线分析处理)场景,如数据仓库和大数据分析平台,其中通常需要执行复杂的查询和聚合操作。
查询时只需读取所需的列,因此在分析性能上通常比行式存储更高效,特别是当查询只涉及部分列时。
列式存储的优点:
Parquet 将数据按列存储,而不是按行存储。这意味着每个列的数据被单独存储,而不是整行的数据。这种存储方式有几个优势:
Parquet 文件被分割为多个 row groups(行组),每个 row group 包含部分行的数据。
每个 row group 可以独立于其他 row groups 进行压缩和存储。这种分割方式提供了以下优势:
Parquet 文件在物理存储中完整保留数据模式(Schema)定义,这种设计赋予其强大的模式演化能力。当业务需求变更导致数据结构扩展时,Parquet 支持向现有数据集添加新列,而无需重构原有数据。更进一步,它允许在不同版本间实现兼容性读写:新增列可设置默认值或标记为可选字段,历史查询仍能正常执行。这种灵活性在数据湖架构中尤为重要,既避免了全量数据迁移的高昂成本,又能确保新旧系统间的平滑过渡,使数据资产具备持续演进的生命力。
Parquet 是一个开放的文件格式,其跨语言SDK支持Java、Python、C++等主流开发语言,并深度集成到Inceptor。在星环TDH平台中,Parquet作为开放的列式存储格式,通过深度集成支持外部数据的高效接入与分析,并与平台的多模型存储引擎协同,辅助实现从采集到分析的数据流转。这种开放生态不仅降低了异构系统间的集成成本,更构建起统一的数据交换层,使结构化与半结构化数据能够在不同处理引擎间自由流动。
Parquet的架构如上图所示,主要包含以下 5 个主要模块:
Parquet 是一种支持嵌套的数据模型,和 Protocol Buffers 的数据模型类似,它的 schema 就是一个嵌套 message。
每个 schema 包含多个字段,每一个字段又可以包含多个字段,每一个字段有三个属性:repetition、type 和 name,其中 repetiton 可以是以下三种:required(出现1次),repeated(出现0次或多次),optional(出现0次或1次)。每一个字段的数据类型可以分成两种:group(复杂类型)和 primitive(基本类型)。 Parquet Schema 示意图如下。
以下面这个schema为例(同上图)介绍Parquet的数据模型
message AddressBook {
required string owner;
repeated string ownerPhoneNumbers;
repeated group contacts {
required string name;
optional string phoneNumber;
}
}
在这个schema中,每条记录代表一条轨迹。每条记录中有且仅有一个owner,每个owner可以对应0个或多个ownerPhoneNumbers和contacts 。每个contacts 必须包含一个name,phoneNumber字段则为可选字段。在 schema的顶层是message,它可以包含多个字段。每个字段具有三个属性:重复性(repetition)、类型(type)和名字(name)。
字段的重复性包含三种:
字段的类型包括:
a、基础数据类型(物理上只存储基础数据类型):BOOLEAN、INT32、INT64、INT96、FLOAT、DOUBLE、BYTE_ARRAY、FIXED_LEN_BYTE_ARRAY
b、逻辑数据类型(指导如何转换成基础数据类型进行存储):
编码是将数据转换为更紧凑的格式,以减少存储空间或提高计算效率。Parquet 使用了几种常见的编码方式来对数据进行编码,这些编码方式有助于在存储时减少数据的冗余,提高读取性能。
压缩是将数据进一步减少存储空间的技术。Parquet支持多种压缩算法,可以在不牺牲数据质量的情况下,进一步压缩数据以节省存储空间。常见的压缩算法包括Snappy、GZIP、LZO、Brotli等。
#创建 Parquet 表
CREATE TABLE users_parquet (
id INT,
name STRING,
age INT
) USING parquet
LOCATION '/path/to/parquet/table';
#插入数据到Parquet表
INSERT INTO users_parquet VALUES
(1, 'Alice', 29),
(2, 'Bob', 31),
(3, 'Charlie', 25);
#查询Parquet表
SELECT * FROM users_parquet;
SELECT * FROM users_parquet WHERE age > 30;
#创建分区表
CREATE TABLE users_partitioned (
id INT,
name STRING,
age INT
) PARTITIONED BY (age)
USING parquet
LOCATION '/path/to/partitioned/table';
Parquet格式凭借其高效的压缩算法、强大的模式演化能力以及广泛的跨平台支持,已经成为现代数据存储与处理的重要工具。星环科技TDH社区版全面免费支持包括Parquet在内的多种先进数据格式,助力用户实现更高效的海量数据分析与处理。
想要了解更多信息,欢迎访问我们的官方网站和加入社区讨论。立即探索,开启您的数据驱动创新之旅!
友情链接:
随着大模型AI技术的发展,全球数据量呈指数增长,尤其是非结构化数据的增加挑战了传统关系型数据库的有效性。传统存储方式不仅成本高,还影响数据处理效率。企业面临的主要矛盾在于:尽管采用了结构化存储方案,但复杂的ETL流程割裂了数据工程与分析,增加了协作成本并限制了数据价值的实时释放。
在此背景下,Parquet作为一种革命性的列式存储格式正重塑数据生态。该开源格式通过创新的列式存储架构,实现了三个维度的技术突破:
1)基于列式存储的高效压缩算法,较传统行式存储可节省50%以上的存储空间;
2)支持复杂嵌套数据结构的Schema演化能力,完美适配JSON、Avro等现代数据格式;
3)跨平台兼容性设计,原生支持Java、Python、C++等主流编程语言,并与Spark等大数据计算框架深度集成。
星环科技TDH社区版提供了免费使用的解决方案,不仅全面支持Parquet格式,还兼容其他常用的数据格式如ORC和Avro,满足多样化需求。通过TDH社区版对这些格式的支持,用户能够更高效地处理海量数据,提升查询性能,降低存储成本,为业务创新提供强大支持。
在深入探讨Parquet的技术优势之前,我们需要先理解数据存储领域两个根本性的范式差异——行式存储与列式存储的内在逻辑。
行式存储将数据按行存储在磁盘上,即将同一行的所有字段值存储在一起。
适用于 OLTP(在线事务处理)场景,如数据库系统,其中通常需要快速地执行插入、更新和删除操作。
行式存储的优点:
列式存储将数据按列存储在磁盘上,即将同一列的所有数值存储在一起。
适用于 OLAP(在线分析处理)场景,如数据仓库和大数据分析平台,其中通常需要执行复杂的查询和聚合操作。
查询时只需读取所需的列,因此在分析性能上通常比行式存储更高效,特别是当查询只涉及部分列时。
列式存储的优点:
Parquet 将数据按列存储,而不是按行存储。这意味着每个列的数据被单独存储,而不是整行的数据。这种存储方式有几个优势:
Parquet 文件被分割为多个 row groups(行组),每个 row group 包含部分行的数据。
每个 row group 可以独立于其他 row groups 进行压缩和存储。这种分割方式提供了以下优势:
Parquet 文件在物理存储中完整保留数据模式(Schema)定义,这种设计赋予其强大的模式演化能力。当业务需求变更导致数据结构扩展时,Parquet 支持向现有数据集添加新列,而无需重构原有数据。更进一步,它允许在不同版本间实现兼容性读写:新增列可设置默认值或标记为可选字段,历史查询仍能正常执行。这种灵活性在数据湖架构中尤为重要,既避免了全量数据迁移的高昂成本,又能确保新旧系统间的平滑过渡,使数据资产具备持续演进的生命力。
Parquet 是一个开放的文件格式,其跨语言SDK支持Java、Python、C++等主流开发语言,并深度集成到Inceptor。在星环TDH平台中,Parquet作为开放的列式存储格式,通过深度集成支持外部数据的高效接入与分析,并与平台的多模型存储引擎协同,辅助实现从采集到分析的数据流转。这种开放生态不仅降低了异构系统间的集成成本,更构建起统一的数据交换层,使结构化与半结构化数据能够在不同处理引擎间自由流动。
Parquet的架构如上图所示,主要包含以下 5 个主要模块:
Parquet 是一种支持嵌套的数据模型,和 Protocol Buffers 的数据模型类似,它的 schema 就是一个嵌套 message。
每个 schema 包含多个字段,每一个字段又可以包含多个字段,每一个字段有三个属性:repetition、type 和 name,其中 repetiton 可以是以下三种:required(出现1次),repeated(出现0次或多次),optional(出现0次或1次)。每一个字段的数据类型可以分成两种:group(复杂类型)和 primitive(基本类型)。 Parquet Schema 示意图如下。
以下面这个schema为例(同上图)介绍Parquet的数据模型
message AddressBook {
required string owner;
repeated string ownerPhoneNumbers;
repeated group contacts {
required string name;
optional string phoneNumber;
}
}
在这个schema中,每条记录代表一条轨迹。每条记录中有且仅有一个owner,每个owner可以对应0个或多个ownerPhoneNumbers和contacts 。每个contacts 必须包含一个name,phoneNumber字段则为可选字段。在 schema的顶层是message,它可以包含多个字段。每个字段具有三个属性:重复性(repetition)、类型(type)和名字(name)。
字段的重复性包含三种:
字段的类型包括:
a、基础数据类型(物理上只存储基础数据类型):BOOLEAN、INT32、INT64、INT96、FLOAT、DOUBLE、BYTE_ARRAY、FIXED_LEN_BYTE_ARRAY
b、逻辑数据类型(指导如何转换成基础数据类型进行存储):
编码是将数据转换为更紧凑的格式,以减少存储空间或提高计算效率。Parquet 使用了几种常见的编码方式来对数据进行编码,这些编码方式有助于在存储时减少数据的冗余,提高读取性能。
压缩是将数据进一步减少存储空间的技术。Parquet支持多种压缩算法,可以在不牺牲数据质量的情况下,进一步压缩数据以节省存储空间。常见的压缩算法包括Snappy、GZIP、LZO、Brotli等。
#创建 Parquet 表
CREATE TABLE users_parquet (
id INT,
name STRING,
age INT
) USING parquet
LOCATION '/path/to/parquet/table';
#插入数据到Parquet表
INSERT INTO users_parquet VALUES
(1, 'Alice', 29),
(2, 'Bob', 31),
(3, 'Charlie', 25);
#查询Parquet表
SELECT * FROM users_parquet;
SELECT * FROM users_parquet WHERE age > 30;
#创建分区表
CREATE TABLE users_partitioned (
id INT,
name STRING,
age INT
) PARTITIONED BY (age)
USING parquet
LOCATION '/path/to/partitioned/table';
Parquet格式凭借其高效的压缩算法、强大的模式演化能力以及广泛的跨平台支持,已经成为现代数据存储与处理的重要工具。星环科技TDH社区版全面免费支持包括Parquet在内的多种先进数据格式,助力用户实现更高效的海量数据分析与处理。
想要了解更多信息,欢迎访问我们的官方网站和加入社区讨论。立即探索,开启您的数据驱动创新之旅!