

# 注意事项和限制
<a name="optimizer-notes"></a>

 本节包括在 AWS Glue Data Catalog 中使用表优化器时需要考虑的事项。

## 持久性与正确性
<a name="durability-correctness"></a>

**S3 表位置：**

当多个 AWS Glue Data Catalog 表共享同一 Amazon S3 位置并启用优化器时，一个表的快照保留或孤立文件删除优化器可能会删除另一个表仍在引用的文件。确保启用了优化器的每个表都使用不与任何其他表（包括不同数据库中的表）共享的唯一 Amazon S3 位置。

**S3 生命周期过期：**

适用于 Iceberg 表存储位置的 Amazon S3 生命周期过期规则可能会删除活动快照仍在引用的清单和数据文件。如果您的存储桶具有生命周期过期规则，请确保这些规则排除了 Iceberg 表存储路径。

## 托管式数据压缩的支持的格式和限制
<a name="compaction-notes"></a>

数据压缩支持多种用于读取和写入数据的压缩格式，例如从加密表中读取数据。

**并发控制：**

 Apache Iceberg 支持乐观的并发控制，允许多个写入器同时执行操作。冲突在提交时进行检测并解决。使用流式处理管道时，可通过表属性和压缩设置配置适当的重试设置，以有效处理并发写入。有关详细指导，请参阅 AWS 大数据博客中关于[管理 Iceberg 表并发写入](https://aws.amazon.com/blogs/big-data/manage-concurrent-write-conflicts-in-apache-iceberg-on-the-aws-glue-data-catalog/)的文章：

**压缩重试：**

 当压缩操作连续四次失败时，AWS Glue 目录表优化功能会自动暂停优化器，以防止不必要的计算资源消耗。请先查看日志，尝试了解压缩反复失败的原因。要恢复压缩优化，您可以通过 AWS Glue 控制台或 API 重新启用优化器。

 **数据压缩支持：**
+ **加密** – 数据压缩仅支持默认的 Amazon S3 加密（SSE-S3）和服务器端 KMS 加密（SSE-KMS）。
+ **压缩策略**：Binpack、快速排序和 Z 形排序
+ 当存储基础数据的 Amazon S3 存储桶位于另一个账户中时，您可以从数据目录所在的账户运行压缩。要实现此目的，压缩角色需要具有访问 Amazon S3 存储桶的权限。

 **数据压缩目前不支持：**
+ **对跨账户表进行压缩** – 您无法对跨账户表进行压缩。
+ **对跨区域表进行压缩** – 您无法对跨区域表进行压缩。
+ **针对资源链接启用压缩**
+ **Amazon S3 Express One Zone 存储类中的表**：您无法对 Amazon S3 Express One Zone 存储类中的 Iceberg 表运行压缩。
+ **Z 形排序压缩策略不支持以下数据类型：**
  + 十进制
  + TimestampWithoutZone

## 关于快照保留和孤立文件删除优化器的注意事项
<a name="retention-notes"></a>

对于快照保留和孤立文件删除优化器，应注意以下几点。
+ 快照保留和孤立文件删除进程的上限为每次运行删除 1,000,000 个文件。删除已过期的快照时，如果符合删除条件的文件数量超过 1,000,000 个，则超过该阈值的所有剩余文件将继续作为孤立文件存在于表存储中。
+ 只有在满足以下两个条件时，快照保留优化器才会保留快照：要保留的最小快照数量和指定的保留期。
+ 快照保留优化器会从 Apache Iceberg 中删除过期的快照元数据，从而防止对过期快照进行时空旅行查询，并选择性删除关联的数据文件。
+  孤立文件删除优化器会删除 Iceberg 元数据不再引用的孤立数据和元数据文件，前提是它们的创建时间早于优化器运行时设定的孤立文件删除保留期。
+ Apache Iceberg 通过分支和标签促进版本控制，这些分支和标签是指向特定快照状态的指定指针。每个分支和标签都遵循自己独立的生命周期，受其各自级别定义的保留策略的约束。AWS Glue Data Catalog 优化器会考虑这些生命周期策略，确保遵守指定的保留规则。分支和标签级别的保留策略优先于优化器配置。

   有关更多信息，请参阅 Apache Iceberg 文档中的[分支和标签](https://iceberg.apache.org/docs/nightly/branching/)部分。
+ 快照保留和孤立文件删除优化器将根据配置的参数删除符合清理条件的文件。通过在相应的存储桶上实施 S3 版本控制和生命周期策略，增强对文件删除的控制。

   有关设置版本控制和创建生命周期规则的详细说明，请参阅 [https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)。
+  为了正确判定孤立文件，请确保提供的表位置和任何子路径不与任何其他表或数据来源中的数据重叠，也不包含来自任何其他表或数据来源的数据。如果路径重叠，意外删除文件可能导致无法恢复的数据丢失。

## 调试 OversizedAllocationException 异常
<a name="debug-exception"></a>

要解决 `OversizedAllocationException` 异常，请执行以下操作：
+ 减小向量化读取器的批量大小并进行检查。默认批处理大小为 5000。此设置在 `read.parquet.vectorization.batch-size` 中进行控制。
  + 若多次调整后仍无效，请关闭向量化功能。此设置在 `read.parquet.vectorization.enabled` 中进行控制。