自动优化在砖
自动优化是一个可选的特性,自动紧凑的小文件在个人写一个三角洲表。自动优化增加延迟开销写操作,但加速读取操作。在下列情况下自动优化尤其有用:
流用例延迟在分钟的顺序是可以接受的
合并成
是首选的方法编写成三角洲湖吗创建表作为选择
或插入成
常用的操作
启用自动优化
优化写在砖是默认启用以下业务运行时9.1 LTS及以上:
合并
更新
与子查询删除
与子查询
其他操作,或砖LTS 7.3运行时,您可以显式地启用优化写和汽车压实使用下列方法之一:
新表:设置表的属性
delta.autoOptimize.optimizeWrite=真正的
和delta.autoOptimize.autoCompact=真正的
在创建表
命令。创建表学生(idINT,的名字字符串,年龄INT)TBLPROPERTIES(δ。autoOptimize。optimizeWrite=真正的,δ。autoOptimize。autoCompact=真正的)
现有表:设置表的属性
delta.autoOptimize.optimizeWrite=真正的
和delta.autoOptimize.autoCompact=真正的
在改变表
命令。改变表(table_name|δ。' <表- - - - - -路径> ']集TBLPROPERTIES(δ。autoOptimize。optimizeWrite=真正的,δ。autoOptimize。autoCompact=真正的)
所有新表:
集火花。砖。δ。属性。违约。autoOptimize。optimizeWrite=真正的;集火花。砖。δ。属性。违约。autoOptimize。autoCompact=真正的;
在砖运行时的10.1及以上,表属性delta.autoOptimize.autoCompact
还接受的价值观汽车
和遗产
除了真正的
和假
。当设置为汽车
(推荐),砖曲调的目标文件大小要适当的用例。当设置为遗产
或真正的
、自动压实使用128 MB作为目标文件大小。
此外,您可以启用和禁用这两个特性引发会话配置:
spark.databricks.delta.optimizeWrite.enabled
spark.databricks.delta.autoCompact.enabled
会话配置优先于表属性允许您更好地控制在选择或退出这些特性。
当选择退出
本节提供指导时选择退出自动优化功能。
当选择在优化写道
优化写道旨在最大化吞吐量的数据写入到存储服务。这可以通过减少写入文件的数量,在不牺牲太多的并行性。
优化中需要根据数据的洗牌的分区结构目标表。这自然洗牌带来额外成本。然而,在写吞吐量增长可能偿还洗牌的成本。如果不是,吞吐量增长时查询数据仍然应该使这个特性值得的。
优化的关键部分是一种自适应调整写道。如果你有一个流摄取用例和输入数据率随时间的变化,自适应洗牌将相应地调整自己在micro-batches传入的数据速率。如果你有代码片段合并(n)
或重新分区(n)
之前你写你的流,您可以删除这些行。
当选择自动压实
汽车压实后发生写入表已成功同步并运行在集群上执行写入。这意味着如果你有代码模式,你写信给三角洲湖,然后立即打电话优化
,你可以删除优化
如果你让汽车压实。
汽车压实使用不同的启发式优化
。自同步运行后写,我们已经调整了汽车压实运行具有以下属性:
砖不支持z值与汽车压实z值是更昂贵的比压实。
汽车压实生成更小的文件(128 MB)
优化
(1 GB)。汽车压实贪婪地选择一组有限的分区,最好利用压实。选择分区的数量将取决于集群上推出的大小。如果您的集群有更多cpu,分区可以优化。
控制输出文件的大小,设置火花配置
spark.databricks.delta.autoCompact.maxFileSize
。默认值是134217728
,大小设置为128 MB。指定值104857600
将文件大小设置为100 mb。
示例工作流:流摄取与并发删除或更新
此工作流假设您有一个集群运行一个24/7摄取数据流工作,和一个集群上运行一个小时,每天,或临时的基础上删除或更新一批记录。这个用例,砖建议你:
在表级别上启用优化写道
改变表<table_name|δ。”table_path' >集TBLPROPERTIES(δ。autoOptimize。optimizeWrite=真正的)
这将确保所写的文件流的数量和最佳大小的删除和更新工作。
让汽车压实在会话级别使用以下设置执行删除或更新的工作。
火花。sql(“设置spark.databricks.delta.autoCompact.enabled = true”)
这允许跨表压缩文件。因为它发生删除或更新后,你减轻事务冲突的风险。
常见问题(FAQ)
自动优化z顺序文件吗?
汽车只在小文件优化执行压实。它不z值文件。
自动优化腐败的z值的文件吗?
自动优化z值忽略了文件。它只有契约新文件。
如果我有汽车优化使我流的表上,和一个并发事务冲突与优化,将我的工作失败?
不。事务冲突,导致汽车优化失败忽视,和流将继续正常运行。
我需要安排吗优化
如果启用了自动优化工作在我的桌子上吗?
对于大小大于10 TB的表,我们建议您保留优化
运行在一个时间表进一步巩固文件,减少你的三角洲的元数据表。由于汽车优化不支持z值,您仍然应该安排优化…ZORDER通过
定期的工作运行。
我有很多小文件。为什么汽车优化不压实他们吗?
默认情况下,自动优化不开始压实,直到找到50多个小文件的目录。通过设置你可以改变这一行为spark.databricks.delta.autoCompact.minNumFiles
。有许多小文件并不总是一个问题,因为它可以跳过带来更好的数据,和它可以帮助减少在合并和删除重写。然而,有太多的小文件可能是一个信号,表明你的数据分区。