如何有效地对Delta表进行分区?

2024-01-26

在将数据帧存储在增量表中时,为我的数据帧寻找有效的分区策略。

我当前的数据帧 1.5000.000 rowa 将数据从数据帧移动到增量表需要 3.5 小时。

为了寻找一种更有效的方法来完成此写作,我决定尝试表中的不同列作为分区列。我搜索了列的基数并选择了以下列。

column1 = 有 3 个不同的值
column2 = 有 7 个不同的值
第 3 列 = 有 26 个不同的值
第 4 列 = 有 73 个不同的值
第 5 列 = 有 143 个不同的值
第 6 列 = 有 246 个不同的值
第 7 列 = 有 543 个不同的值

集群:64GB,8核

在我的笔记本中使用以下代码

df.write.partitionBy("column_1").format("delta").mode("overwrite").save(partition_1)
..
df.write.partitionBy("column_7").format("delta").mode("overwrite").save(partition7)

因此,我想看看哪种分区策略会带来更好的结果:基数高的列、基数低的列或介于两者之间的列。 令我惊讶的是,这并没有产生任何影响,因为所有这些都花费了几乎相同的时间,虽然有几分钟的差异,但都+3小时。

为什么我失败了?分区没有优点吗?


当您使用 Delta(Databricks 或 OSS Delta 1.2.x,更好的 2.0)时,通常您可能根本不需要使用分区,原因如下(不适用于 Parquet 或其他文件格式):

  • 达美支持数据跳跃 https://docs.databricks.com/delta/optimizations/file-mgmt.html#data-skipping允许只读取必要的文件,当您与优化 ZORDER BY https://docs.databricks.com/delta/optimizations/file-mgmt.html#z-ordering-multi-dimensional-clustering这将使相关数据彼此更加接近。
  • 布隆过滤器 https://docs.databricks.com/delta/optimizations/bloom-filters.html允许更精细地跳过文件。

使用 Delta Lake 表分区的经验规则如下:

  • 当它有利于查询时使用它,特别是当您对表执行 MERGE 时,因为它可以避免并行事务之间的冲突
  • 当它有助于删除旧数据时(例如按日期分区)
  • 当它真正有利于您的查询时。例如,您有每个国家/地区的数据,并且大多数查询将使用国家/地区作为条件的一部分。或者例如,当您按日期分区并根据时间查询数据时......

在所有情况下,不要对高基数列(数百个值)和具有太多分区列使用分区,因为在大多数情况下,这会导致创建读取效率较低的小文件(每个文件单独访问),另外它会增加驱动程序的负载,因为它需要保留每个文件的元数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何有效地对Delta表进行分区? 的相关文章

随机推荐

  • FFmpeg 的 avcodec_decode_audio3 返回 -1

    我在android上使用FFmpeg来解码mp3 我在配置中设置了所有解码器启用并正确制作了 so 文件 这是为配置文件添加参数的 sh NDK android ndk r5b PLATFORM NDK platforms android
  • 如何最小化 R 包的安装大小

    在我的工作场所 我们正在为不同版本的 R 安装许多库 所需的大小正在迅速增加 我可以做什么来尽可能减少每次安装 我知道 no docs 并且我需要 with keep source EDIT 这是对我的设置的快速研究 我将我的图书馆复制到
  • 详细了解 openCV aruco 标记检测/姿态估计:亚像素精度

    我目前正在研究openCV的 aruco 模块 特别关注ArUco标记和AprilTags的poseEstimation 在研究子像素精度时 我遇到了一种奇怪的行为 如下代码所示 如果我确实提供了 完美 校准 例如 cx cy 等于图像中心
  • 在外部登录/注册 ASP.NET Web API 2.0 和 Identity 期间从 Facebook 检索其他配置文件信息

    似乎有很多关于如何使用 ASP NET Identity 和 MVC 客户端从 Facebook 配置文件获取附加信息的文档 但我似乎找不到任何关于如何从 Web API 控制器访问附加信息声明的信息 我的 Startup Auth cs
  • 为什么在 forEach 循环中不会追加列表项?

    我有一个简单的 forEach 循环 其中我尝试将列表项附加到无序列表中 但是 当我运行脚本时 我只看到添加了一个列表项 谁能解释为什么会发生这种情况 JS let bookElement document getElementsByCla
  • 如何在C#中使用文本框搜索列表视图的项目

    我有一个列表视图名称listView1 它包含计算机ID和它们的一些信息 所以我想做的是我有一个文本框名称过滤框 当我写东西时它会过滤它 它工作得很好 我的问题是它只是寻找第一列不是其他列 例如 PCNAME USER MODEL AAAA
  • 知道类中的所有变量是否为空的最佳方法是什么?

    这意味着类已初始化 但变量尚未设置 示例类 public class User String id null String name null public String getId return id public void setId
  • Groovy 不在集合中

    在 Groovy 中检查列表是否包含某些内容的惯用方法是使用in if b in a b c 但是如何很好地检查某些内容是否不在集合中呢 if g in a b c 使用逻辑看起来并不混乱 不经意的一瞥是隐藏的 在 Groovy 中是否有更
  • 如何从 ion-searchbar 获取输入?

    这是超级简单的问题 但我似乎无法弄清楚这一点 是的 我已经阅读了文档 我正在尝试获取用户输入的内容ion searchbar 在 Ionic v4 中 在他们按搜索并放入 const let 后 麻哈HTML
  • 带有 std::thread 和 std::chrono 的基本计时器

    我正在尝试使用经典方法来实现一个基本计时器 start 和 stop 我将 c 11 与 std thread 和 std chrono 一起使用 启动方法 创建一个在给定间隔时间内休眠的新线程 然后执行给定的 std function 当
  • 设置 UIView 的背景颜色会增加内存使用量

    我正在将许多 UIView 加载到 UIScrollView 上 并试图找出它们使用这么多内存的原因 经过使用 Instruments 的排除过程后 我发现设置视图的背景颜色会增加 4 倍的内存使用量 如果我不设置背景颜色 内存使用量约为
  • 上传到firebase时如何防止重复图像?

    当我想将图像上传到 firebase 实时数据库和存储 时遇到一些问题 在实时数据库中 我的图像对象默认有一张图像 并且当我上传其他图像时我不想覆盖图像所以我使用了传播运算符 SO 当我选择时一张图片并单击上传它们 它可以工作并保存 没有重
  • 更新列表列表中的属性

    问题是 如何在不循环的情况下更新 allItems 内的 ItemCount 字段 例如使用 Linq 例如 如果 Index 0 我想将 ItemCount 设置为 ItemCount 5 您可以看到下面的代码 我有以下课程 public
  • 尝试使用 LEFT OUTER JOIN 优化 MySQL 查询

    我有这个查询 它工作正常 只是需要很长时间 7 秒 jobs 表中有 40k 条记录 wq 表中有 700k 条记录 我尝试了 EXPLAIN 它说它查看作业表中的所有记录 并且不使用任何索引 我不知道如何告诉 MySQL 在查找 wq 表
  • 淘汰赛验证插件自定义错误消息

    根据以下内容 我到底如何设置回调以显示自定义错误消息而不是默认消息 ko validation rules exampleAsync async true the flag that says Hey I m Async validator
  • Pyaudio:将输入连接到输出时出错

    我正在 Intel Edison 主板上尝试 pyaudio 但它在内置测试中失败了 单独录音和播放在我的设置中工作得很好 但如果我尝试将输入连接到输出 则会出现错误 文件 wire full py 第 33 行 位于 data strea
  • 将子组件的配置传递给父组件

    通常 要定义网格类型 我会执行以下操作 Ext define MyApp view MyGrid extend Ext grid Panel alias widget myGrid store MyStore columns 然后我通过其
  • 如何在iOS App Store Sandbox中测试自动续订订阅的“续订”组件?

    Folks 我正在尝试验证自动续订订阅是否确实在沙盒环境中续订 首先 沙盒中的自动续订订阅似乎只有 5 分钟的有效期 说得通 我预计如果我等待五分钟 然后再拨打 https sandbox itunes apple com verifyRe
  • NSString 为空

    如何测试 NSString 是否为空 或全部空白或为零 通过单个方法调用 你可以尝试这样的事情 implementation NSString JRAdditions BOOL isStringEmpty NSString string i
  • 如何有效地对Delta表进行分区?

    在将数据帧存储在增量表中时 为我的数据帧寻找有效的分区策略 我当前的数据帧 1 5000 000 rowa 将数据从数据帧移动到增量表需要 3 5 小时 为了寻找一种更有效的方法来完成此写作 我决定尝试表中的不同列作为分区列 我搜索了列的基