# delta **Repository Path**: src-openeuler/delta ## Basic Information - **Project Name**: delta - **Description**: 本项目已经迁移至 AtomGit || This project has been migrated to AtomGit || Linked: https://atomgit.com/src-openeuler/delta - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-05-16 - **Last Updated**: 2025-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: BigData ## README # Notice: This project has been migrated to [AtomGit](https://atomgit.com/src-openeuler/delta) # 通知: 本项目已经正式迁移至 [AtomGit](https://atomgit.com/src-openeuler/delta) 平台 # delta #### 介绍 Delta Lake 是 DataBricks 公司开源的、用于构建湖仓架构的存储框架。能够支持 Spark,Flink,Hive,PrestoDB,Trino 等查询/计算引擎。作为一个开放格式的存储层,它在提供了批流一体的同时,为湖仓架构提供可靠的,安全的,高性能的保证。 Delta Lake 关键特性: - ACID事务:通过不同等级的隔离策略,Delta Lake 支持多个 pipeline 的并发读写; - 数据版本管理:Delta Lake 通过 Snapshot 等来管理、审计数据及元数据的版本,并进而支持 time-travel 的方式查询历史版本数据或回溯到历史版本; - 开源文件格式:Delta Lake 通过 parquet 格式来存储数据,以此来实现高性能的压缩等特性; - 批流一体:Delta Lake 支持数据的批量和流式读写; - 元数据演化:Delta Lake 允许用户合并 schema 或重写 schema,以适应不同时期数据结构的变更; - 丰富的DML:Delta Lake 支持 Upsert,Delete 及 Merge 来适应不同场景下用户的使用需求,比如 CDC 场景; #### 软件架构 软件架构说明 Delta Lake的设计 - 文件组织 在Delta Lake中,一个表包含了实际数据和表操作的日志,并且一个表的所有文件都存储在同一个“目录”下,当然OSS实际上采用扁平的文件组织形式,这里的“目录”指的是目录格式的文件名前缀。Delta Lake以Parquet的格式来存储表中的实际数据,使用GUID作为文件名,并且支持分区,属于同一个分区的Parquet文件会采用相同的子目录作为文件名前缀。 - 元数据管理 Delta Lake基于日志来实现元数据管理。由于日志中记录了所有表操作,因此基于checkpoint及其之后的Json文件,我们可以构建表在当前时刻的快照。 - 事务 Delta Lake并发控制策略实现了文件粒度的MVCC。读事务直接基于事务开始时表的快照读取表中的数据文件。写事务首先基于事务开始时表的快照进行out-of-place update,然后尝试根据递增的字典序创建下一个Json日志文件,创建成功则将表操作记录在日志文件中,并且成功提交,否则提交失败并重做。提交成功的写事务产生的新数据文件被记录在日志中,对接下来的事务可见,删除的数据文件只是在日志中标记删除,不会影响正在执行的读事务。提交失败的写事务首先会更新它持有的表的快照,然后检查它的写入与之前的提交是否有冲突,没有冲突则直接继续尝试提交,否则需要重做写入。上述策略非常适合低并发写或分片写入的场景,因为这些场景下写入冲突较少,重做代价低。 - 性能优化 Delta Lake支持使用OPTIMIZE命令合并小文件。数据文件的大小会对访问OSS时能达到的实际throughput产生影响,较大的文件有利于实现较高的throughput,但由于写入需要重写整个数据文件,较大的文件会产生较大的写入开销,因此需要调整文件大小来权衡读写性能,而在Delta Lake中合并小文件的目标大小默认是1GB。 ​Delta Lake使用传统的基于min/max统计信息的方法实现data skipping,不同的是Delta Lake并没有将min/max统计信息保存在Parquet的footer中,而是将其记录在日志中,这样可以避免在做pruning时以较高的latency低效地读取每一个Parquet的footer。 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)