前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Delta Lake 目录结构探秘

Delta Lake 目录结构探秘

作者头像
用户2936994
发布2022-07-21 13:40:44
5050
发布2022-07-21 13:40:44
举报
文章被收录于专栏:祝威廉祝威廉

有了前面章节的铺垫,相信你已经知道,delta表其实是由两部分组成的:

  1. Parquet文件
  2. 新增删除文件对应的记录文件

为了给大家更直观的看下Delta目录结构到底是啥样,我截取了一张图:

key=a,key=b有没有非常熟悉的感觉?是不是和hive里分区表非常类似?没错,他就是一个分区字段。进去看看其实就是一些parquet文件。如果delta表没有分区字段,那么这些parquet文件都会在根目录里。

如果只是一堆的parquet文件,就无法支持delta的各种功能了。所以delta的真正神奇魔法都在_delta_log目录里。我们进去看看:

太棒了,是json文件,这意味着我们可以直接打开看看里面,而不需要专门写程序去看。根据我们前面所学的知识,delta将所有的对数据的操作都转化为了对文件的两个操作,而_delta_log 则是记录这两个操作的日志。现在让我们打开文件见证下我们之前的说法是不是对的:

commitInfo表示一次写入(更新或者新增或者删除或者混合),里面我们看到了分区字段,版本号以及操作是WRITE. 那操作的具体文件是什么呢?我们看到下面有两条记录,都是add操作,里面有相应的路径,分区信息以及大小,修改创建时间等等。

哇,和我们之前的讨论一模一样!你会发现,delta目录结构是如此的简单,元信息都可以肉眼可见,而数据则是以我们非常熟悉的parquet文件格式存储。

常见疑问

Q1: 随着更新次数的增长,meta(_delta_log)里的json文件会不会很多,性能岂不是很低?

确实如此,但是delta 会每 N(默认是10)个json文件后将之前的所有json文件合并成一个parquet文件,这样只要读取最近的10个元数据文件即可。 另外遍历目录是个昂贵的操作,读取数据parquet文件时,delta不会去遍历,而是根据meta里记录的文件集合去加载过滤数据。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档