寻找一种方法来了解何时 运行 优化 Delta Lake 表
Looking for a way to know when to run OPTIMIZE on Delta Lake tables
在 AWS 上使用 Databricks 运行ning,我正在寻找一种方法来了解何时是 运行 优化分区表的好时机。考虑到这是一个昂贵的过程,尤其是在大桌子上,我怎么知道现在是否是 运行 它的好时机以及在哪些桌子上?也许我可以创建一个每周执行一次的脚本,并且 运行 仅在需要时优化命令。
此外,建议的做法是 运行 在我创建分区的同一作业上对每个分区进行优化?
所以我创建了 2022-02-12 分区,然后 运行 优化了分区=2022-02-12 的位置,由于 S3 的“最终一致性”,我不确定这一点,也许是文件加载后还没有准备好,有些东西可能会损坏。
谢谢!
如果您有按天分区的数据,那么您可以每天 运行 优化脚本,也许在一天结束后一小时(S3 的最终一致性在这里不起作用)。它可以很简单(考虑在最常查询的列上添加 ZORDER BY
):
OPTIIMZE <table> WHERE partition = (current_date() - interval 1 days)
如果你的工作量是append-only,那么你就不用担心conflicts。
除了OPTIMIZE,你还需要有一个会做VACUUM的作业,因为OPTIMIZE会留下旧文件in-place,它们会占用space.
在 AWS 上使用 Databricks 运行ning,我正在寻找一种方法来了解何时是 运行 优化分区表的好时机。考虑到这是一个昂贵的过程,尤其是在大桌子上,我怎么知道现在是否是 运行 它的好时机以及在哪些桌子上?也许我可以创建一个每周执行一次的脚本,并且 运行 仅在需要时优化命令。
此外,建议的做法是 运行 在我创建分区的同一作业上对每个分区进行优化?
所以我创建了 2022-02-12 分区,然后 运行 优化了分区=2022-02-12 的位置,由于 S3 的“最终一致性”,我不确定这一点,也许是文件加载后还没有准备好,有些东西可能会损坏。
谢谢!
如果您有按天分区的数据,那么您可以每天 运行 优化脚本,也许在一天结束后一小时(S3 的最终一致性在这里不起作用)。它可以很简单(考虑在最常查询的列上添加 ZORDER BY
):
OPTIIMZE <table> WHERE partition = (current_date() - interval 1 days)
如果你的工作量是append-only,那么你就不用担心conflicts。
除了OPTIMIZE,你还需要有一个会做VACUUM的作业,因为OPTIMIZE会留下旧文件in-place,它们会占用space.