当查询三角洲共享表RESOURCE_LIMIT_EXCEEDED错误

三角洲共享共享表的元数据大小限制。如果超出这些限制它生成一个错误。

写的拉杰夫kannan Thangaiah

去年发表在:2023年4月19日

问题

你查询一个表共享δ分享和你RESOURCE_LIMIT_EXCEEDED错误。

错误可能会引用一个超时。

io.delta.sharing.spark.util.UnexpectedHttpStatus: HTTP请求失败状态:HTTP / 1.1 400错误请求{“错误代码”:“RESOURCE_LIMIT_EXCEEDED”,“消息”:“一个超时发生时处理表。如果它继续发生,请联系您的数据提供者分享一个更小的表。”}。

错误也可能参考表元数据超过大小限制。

{“错误代码”:“RESOURCE_LIMIT_EXCEEDED”,“消息”:“表元数据大小超过限制”}

导致

三角洲共享共享表的元数据大小限制。

  • 你是有限的700 kaddfileDeltaLog行动。这是有多少活跃的文件,你可以在一个共享的三角洲表。
  • 你是有限的100 kRemoveFilesDeltaLog行动。这是文件被删除的数量。这包括文件被删除等操作优化和合并。

解决方案

您可以运行优化(AWS|Azure|GCP)共享三角洲表减少活动文件的数量。

优化table_name(在哪里谓词)[ZORDER通过(col_name1(,])]


在运行优化减少活动的文件,你可以点击RemoveFiles限制,如果优化命令删除超过100 k的文件。

如果是这种情况,你可以暂时降低delta.logRetentionDuration财产。这降低了物品的时间留在DeltaLog。通过设置保留时间短,例如24小时,事务日志迅速清除,这有助于你保持在100 k下RemoveFiles极限。

% sql ALTER TABLE <表名称>设置TBLPROPERTIES(δ。logRetentionDuration”=“24小时”)
删除

警告

降低了delta.logRetentionDuration属性也可以减少你的时间旅行的能力。你只可以时间旅行是否DeltaLog中包含元数据。如果日志保留设置为24小时,你只能24小时时间旅行回来。


一旦问题得到解决,你应该回复delta.logRetentionDuration属性回30天,所以你可以继续使用时间旅行的特性。

% sql ALTER TABLE <表名称>设置TBLPROPERTIES(δ。logRetentionDuration ' = ' 30天)


为了防止这个问题再次出现,你应该跑步优化定期。这有助于保持活跃的文件的数量低于极限。

这篇文章有用吗?