当前位置: 首页 > article >正文

科普:“表格式 ”与“ 存储格式”

表格式(Table Format)和存储格式(File Format)的总结如下,结合其核心特点和典型应用场景:


一、存储格式(File Format)

存储格式定义数据在文件中的物理存储方式,直接影响读写性能、压缩效率和兼容性。

1. 列式存储
  • Parquet

    • 特点:列式存储,高压缩率,支持复杂嵌套结构,适合 OLAP 场景。
    • 应用:大数据分析(Spark、Hive)、数据湖存储。
    • 示例user.parquet 文件按列存储 user_id, name, age
  • ORC (Optimized Row Columnar)

    • 特点:优化行列混合存储,支持索引和谓词下推,Hive 生态常用。
    • 应用:Hive 数据仓库、批量 ETL 处理。
    • 示例sales.orc 文件按列存储订单数据,含轻量索引加速查询。
2. 行式存储
  • Avro

    • 特点:基于 Schema 的行式存储,支持动态模式演化,适合流式数据传输。
    • 应用:Kafka 消息序列化、跨语言数据交换。
    • 示例:Kafka 中的用户行为日志以 Avro 格式存储。
  • CSV/TSV

    • 特点:纯文本,人类可读,兼容性强,但无压缩和模式信息。
    • 应用:数据导入导出、小型数据集交换。
    • 示例data.csv 文件以逗号分隔存储用户信息。
  • JSON

    • 特点:半结构化,支持嵌套数据,但解析效率低。
    • 应用:Web API 响应、日志存储。
    • 示例logs.json 文件记录应用日志,含时间戳和事件详情。
3. 混合存储
  • Arrow
    • 特点:内存列式格式,零拷贝读取,用于高速内存计算。
    • 应用:Pandas、Spark 内存计算,跨系统数据传输。
    • 示例:Spark 与 Flink 通过 Arrow 格式共享内存数据。

二、表格式(Table Format)

表格式是逻辑层的元数据规范,管理数据文件的组织、事务、版本等,与存储格式解耦。

1. 数据湖表格式
  • Apache Iceberg

    • 特点:支持 ACID 事务、隐藏分区、时间旅行,引擎无关(Flink/Spark/Trino)。
    • 应用:实时数据湖、多引擎协作。
    • 示例:Flink 实时写入 Iceberg 表,Spark 批处理分析。
  • Delta Lake

    • 特点:基于 Spark 生态,提供 ACID 事务和 Upsert 操作,深度集成 Spark。
    • 应用:湖仓一体、频繁更新的场景(如用户画像)。
    • 示例:Spark Streaming 写入 Delta Lake,支持 Merge 操作更新数据。
  • Apache Hudi

    • 特点:专注于增量更新(CDC),支持高效的 Upsert 和增量拉取。
    • 应用:实时数据管道、CDC 场景。
    • 示例:MySQL Binlog 同步到 Hudi 表,下游消费增量数据。
2. 传统表格式
  • Hive 表
    • 特点:基于目录分区,元数据存储在 Hive Metastore,功能简单。
    • 应用:离线批处理(Hive/Spark SQL)。
    • 示例:Hive 表按日期分区存储日志,通过 HQL 查询。

三、核心对比

类别代表格式核心目标典型场景
存储格式Parquet、ORC、Avro优化单文件存储效率数据分析、序列化传输
表格式Iceberg、Delta、Hudi管理多文件逻辑与元数据数据湖、ACID 事务、多引擎协作

四、应用场景示例

  1. 实时数仓

    • 存储格式:Parquet(高效列式存储)。
    • 表格式:Iceberg(事务支持 + 时间旅行)。
    • 流程:Kafka → Flink 实时处理 → 写入 Iceberg(Parquet 文件) → Trino 查询。
  2. 频繁更新的用户数据

    • 存储格式:ORC(压缩率高)。
    • 表格式:Delta Lake(Upsert 支持)。
    • 流程:Spark 读取用户表 → Merge 操作更新 → 写入 Delta Lake。
  3. 日志分析

    • 存储格式:JSON(原始日志半结构化)。
    • 表格式:Hive 表(简单分区管理)。
    • 流程:日志文件(JSON) → Hive 表分区存储 → Hive SQL 分析。

五、实际架构设计

  • 存储格式:解决单文件如何高效存储数据,关注压缩、编码、读写性能。
  • 表格式:解决多文件如何组织与管理,关注事务、版本、跨引擎兼容性。

通常组合使用两者,例如:

  • 数据以 Parquet 格式存储,
  • 通过 Iceberg 表格式管理,
  • 实现高效存储与逻辑管理的双重优化。

http://www.kler.cn/a/547725.html

相关文章:

  • 【环境配置】Ubuntu 22.04 C++ header file not found using Vim with YouCompleteMe
  • Redis 设置密码无效问题解决
  • c++--变量内存分配
  • 【开源项目】Excalidraw手绘风格白板(保姆级)教程
  • 如何学BI大数据
  • Html、Markdown的信息提取
  • LabVIEW 中 dotnet.llb 库功能
  • 05-服务保护和分布式事务(Sentinel、Seata)
  • Linux文件管理:硬链接与软链接
  • 图论 - 一些经典小算法思想(无题目例子)
  • 《open3d qt 网格泊松采样成点云》
  • 关于Dest1ny:我的创作纪念日
  • JavaScript原型和原型链
  • 代码随想录二刷|动态规划3
  • 鸿蒙Harmony-应用状态-AppStorage详细介绍
  • 蓝桥杯---排序数组(leetcode第912题)
  • 神经网络常见激活函数 12-Swish函数
  • 游戏引擎学习第104天
  • Nacos 详细介绍:微服务架构中的服务发现与配置管理利器
  • 用大模型学大模型04-机器学习建模过程