自动优化在砖

自动优化是一个可选的特性,自动紧凑的小文件在个人写一个三角洲表。自动优化增加延迟开销写操作,但加速读取操作。在下列情况下自动优化尤其有用:

  • 流用例延迟在分钟的顺序是可以接受的

  • 合并是首选的方法编写成三角洲湖吗

  • 创建作为选择插入常用的操作

自动优化是如何工作的

自动优化包括两个互补的特点:优化和自动压实写道。

如何优化写工作

砖动态优化的Apache火花分区大小根据实际数据,并试图写出128 MB的文件为每个表分区。这是一个近似的大小,取决于数据集特征。

优化写道

汽车压实是如何工作的

后一个人写,砖检查文件是否可以进一步被压缩,运行一个优化工作(128 MB的文件大小而不是1 GB的文件大小使用的标准优化)进一步压缩文件的分区最小文件的数量。

启用自动优化

优化写在砖是默认启用以下业务运行时9.1 LTS及以上:

  • 合并

  • 更新与子查询

  • 删除与子查询

其他操作,或砖LTS 7.3运行时,您可以显式地启用优化写和汽车压实使用下列方法之一:

  • 新表:设置表的属性delta.autoOptimize.optimizeWrite=真正的delta.autoOptimize.autoCompact=真正的创建命令。

    创建学生(idINT,的名字字符串,年龄INT)TBLPROPERTIES(δautoOptimizeoptimizeWrite=真正的,δautoOptimizeautoCompact=真正的)
  • 现有表:设置表的属性delta.autoOptimize.optimizeWrite=真正的delta.autoOptimize.autoCompact=真正的改变命令。

    改变(table_name|δ' <- - - - - -路径> ']TBLPROPERTIES(δautoOptimizeoptimizeWrite=真正的,δautoOptimizeautoCompact=真正的)
  • 所有新表:

    火花δ属性违约autoOptimizeoptimizeWrite=真正的;火花δ属性违约autoOptimizeautoCompact=真正的;

在砖运行时的10.1及以上,表属性delta.autoOptimize.autoCompact还接受的价值观汽车遗产除了真正的。当设置为汽车(推荐),砖曲调的目标文件大小要适当的用例。当设置为遗产真正的、自动压实使用128 MB作为目标文件大小。

此外,您可以启用和禁用这两个特性引发会话配置:

  • spark.databricks.delta.optimizeWrite.enabled

  • spark.databricks.delta.autoCompact.enabled

会话配置优先于表属性允许您更好地控制在选择或退出这些特性。

当选择退出

本节提供指导时选择退出自动优化功能。

当选择在优化写道

优化写道旨在最大化吞吐量的数据写入到存储服务。这可以通过减少写入文件的数量,在不牺牲太多的并行性。

优化中需要根据数据的洗牌的分区结构目标表。这自然洗牌带来额外成本。然而,在写吞吐量增长可能偿还洗牌的成本。如果不是,吞吐量增长时查询数据仍然应该使这个特性值得的。

优化的关键部分是一种自适应调整写道。如果你有一个流摄取用例和输入数据率随时间的变化,自适应洗牌将相应地调整自己在micro-batches传入的数据速率。如果你有代码片段合并(n)重新分区(n)之前你写你的流,您可以删除这些行。

当选择在

  • 流媒体使用情况分钟的延迟是可以接受的

  • 当使用SQL命令合并,更新,删除,插入,创建作为选择

什么时候退出

  • 当书面数据字节的顺序和存储优化实例不可用。

  • 当使用现货实例和现货价格的不稳定,导致很大一部分节点丢失。

当选择自动压实

汽车压实后发生写入表已成功同步并运行在集群上执行写入。这意味着如果你有代码模式,你写信给三角洲湖,然后立即打电话优化,你可以删除优化如果你让汽车压实。

汽车压实使用不同的启发式优化。自同步运行后写,我们已经调整了汽车压实运行具有以下属性:

  • 砖不支持z值与汽车压实z值是更昂贵的比压实。

  • 汽车压实生成更小的文件(128 MB)优化(1 GB)。

  • 汽车压实贪婪地选择一组有限的分区,最好利用压实。选择分区的数量将取决于集群上推出的大小。如果您的集群有更多cpu,分区可以优化。

  • 控制输出文件的大小,设置火花配置spark.databricks.delta.autoCompact.maxFileSize。默认值是134217728,大小设置为128 MB。指定值104857600将文件大小设置为100 mb。

当选择在

  • 流媒体使用情况分钟的延迟是可以接受的。

  • 当你没有规律优化调用在你的桌子上。

什么时候退出

  • DBR 10.3及以下:当其他作家执行操作删除,合并,更新,或优化同时,因为汽车压实可以导致事务冲突这些工作。

    如果汽车压实失败由于事务冲突,砖失败或重试压实。相应的编写查询(这引发了自动压实)会成功即使汽车压实不成功。

    在DBR 10.4及以上,这不是一个问题:汽车压实不会引起事务等其他并发操作的冲突删除,合并,或更新。其他并发事务有更高的优先级和不会失败由于汽车压实。

示例工作流:流摄取与并发删除或更新

此工作流假设您有一个集群运行一个24/7摄取数据流工作,和一个集群上运行一个小时,每天,或临时的基础上删除或更新一批记录。这个用例,砖建议你:

  • 在表级别上启用优化写道

    改变<table_name|δtable_path' >TBLPROPERTIES(δautoOptimizeoptimizeWrite=真正的)

    这将确保所写的文件流的数量和最佳大小的删除和更新工作。

  • 让汽车压实在会话级别使用以下设置执行删除或更新的工作。

    火花sql(“设置spark.databricks.delta.autoCompact.enabled = true”)

    这允许跨表压缩文件。因为它发生删除或更新后,你减轻事务冲突的风险。

常见问题(FAQ)

自动优化z顺序文件吗?

汽车只在小文件优化执行压实。它不z值文件。

自动优化腐败的z值的文件吗?

自动优化z值忽略了文件。它只有契约新文件。

如果我有汽车优化使我流的表上,和一个并发事务冲突与优化,将我的工作失败?

不。事务冲突,导致汽车优化失败忽视,和流将继续正常运行。

我需要安排吗优化如果启用了自动优化工作在我的桌子上吗?

对于大小大于10 TB的表,我们建议您保留优化运行在一个时间表进一步巩固文件,减少你的三角洲的元数据表。由于汽车优化不支持z值,您仍然应该安排优化ZORDER通过定期的工作运行。

我有很多小文件。为什么汽车优化不压实他们吗?

默认情况下,自动优化不开始压实,直到找到50多个小文件的目录。通过设置你可以改变这一行为spark.databricks.delta.autoCompact.minNumFiles。有许多小文件并不总是一个问题,因为它可以跳过带来更好的数据,和它可以帮助减少在合并和删除重写。然而,有太多的小文件可能是一个信号,表明你的数据分区。