

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 在 Amazon Redshift 上使用 Apache Iceberg 表
<a name="querying-iceberg"></a>

**注意**  
 要在将 Apache Iceberg 表与 Amazon Redshift 结合使用时获得最佳性能，您必须使用 Amazon Glue 生成表的列统计数据。有关更多信息，请参阅《Amazon Glue 开发人员指南》**中的[为 Iceberg 表生成列统计数据](https://docs.amazonaws.cn/glue/latest/dg/iceberg-generate-column-stats.html)。

本主题介绍如何将 Apache Iceberg 格式的表与 Redshift Spectrum 或 Redshift Serverless 结合使用。Apache Iceberg 是一种用于超大型分析表的高性能格式。

您可以使用 Redshift Spectrum 或 Redshift Serverless 来查询在 Amazon Glue Data Catalog 中编目的 Apache Iceberg 表。Apache Iceberg 是一种用于数据湖的开源表格式。有关更多信息，请参阅 Apache Iceberg 文档中的 [Apache Iceberg](https://iceberg.apache.org/)。

Amazon Redshift 为查询 Apache Iceberg 表提供事务一致性。在使用 Amazon Redshift 运行查询时，您可以使用符合 ACID（原子性、一致性、隔离、持久性）的服务（例如 Amazon Athena 和 Amazon EMR）来操作表中的数据。Amazon Redshift 可以使用存储在 Apache Iceberg 元数据中的表统计数据，来优化查询计划并减少查询处理期间的文件扫描。使用 Amazon Redshift SQL，您可以将 Redshift 表与数据湖表联接起来。

开始在 Amazon Redshift 上使用 Iceberg 表：

1. 使用兼容的服务（如 Amazon Athena 或 Amazon EMR）在 Amazon Glue Data Catalog 数据库上创建 Apache Iceberg 表。要使用 Athena 创建 Iceberg 表，请参阅《Amazon Athena User Guide》**中的[Using Apache Iceberg tables](https://docs.amazonaws.cn/athena/latest/ug/querying-iceberg.html)。

1. 使用允许访问您的数据湖的关联 IAM 角色，创建一个 Amazon Redshift 集群或 Redshift Serverless 工作组。有关如何创建集群或工作组的信息，请参阅《Amazon Redshift 入门指南》**中的 [Amazon Redshift 预置数据仓库入门](https://docs.amazonaws.cn/redshift/latest/gsg/new-user.html)和 [Redshift Serverless 数据仓库入门](https://docs.amazonaws.cn/redshift/latest/gsg/new-user-serverless.html)。

1. 使用查询编辑器 v2 或第三方 SQL 客户端连接到您的集群或工作组。有关如何使用查询编辑器 v2 进行连接的信息，请参阅《Amazon Redshift 管理指南》**中的[使用 SQL 客户端工具连接到 Amazon Redshift 数据仓库](https://docs.amazonaws.cn/redshift/latest/mgmt/connecting-to-cluster.html)。

1. 在 Amazon Redshift 数据库中为包含 Iceberg 表的特定数据目录数据库创建外部架构。有关创建外部架构的信息，请参阅[Amazon Redshift Spectrum 中的外部架构](c-spectrum-external-schemas.md)。

1. 运行 SQL 查询以访问您创建的外部架构中的 Iceberg 表。

## 在 Amazon Redshift 上使用 Apache Iceberg 表时的注意事项
<a name="querying-iceberg-considerations"></a>

在将 Amazon Redshift 与 Iceberg 表一起使用时，请考虑以下事项：
+ **Iceberg 版本支持** – Amazon Redshift 支持对以下版本的 Iceberg 表运行查询：
  + 版本 1 定义了如何使用不可变数据文件管理大型分析表。
  + 版本 2 增加了支持行级更新和删除的功能，同时保持现有数据文件不变，并使用删除文件处理表数据更改。

   有关版本 1 表和版本 2 表之间的区别，请参阅 Apache Iceberg 文档中的[Format version changes](https://iceberg.apache.org/spec/#appendix-e-format-version-changes)。
+ **添加分区** – 您无需为 Apache Iceberg 表手动添加分区。Amazon Redshift 会自动检测到 Apache Iceberg 表中的新分区，无需手动操作即可更新表定义中的分区。分区规格的任何更改也将自动应用于您的查询，无需任何用户干预。
+ **将 Iceberg 数据摄取到 Amazon Redshift 中** – 您可以使用 INSERT INTO 或 CREATE TABLE AS 命令，将数据从 Iceberg 表导入到本地 Amazon Redshift 表中。您目前无法使用 COPY 命令将 Apache Iceberg 表的内容摄取到本地 Amazon Redshift 表中。
+ **实体化视图** – 您可以在 Apache Iceberg 表上创建实体化视图，就像在 Amazon Redshift 中为任何其他外部表创建实体化视图一样。其他数据湖表格式的相同注意事项也适用于 Apache Iceberg 表。目前不支持对数据湖表执行自动查询重写和自动实体化视图。
+ **Amazon Lake Formation 精细访问控制** – Amazon Redshift 支持对 Apache Iceberg 表进行 Amazon Lake Formation 精细访问控制。
+ **用户定义的数据处理参数** – Amazon Redshift 支持对 Apache Iceberg 表使用用户定义的数据处理参数。您可以在现有文件上使用用户定义的数据处理参数，来定制要在外部表中查询的数据，以避免扫描错误。这些参数提供了处理表架构与文件中实际数据之间不匹配的功能。您也可以在 Apache Iceberg 表上使用用户定义的数据处理参数。
+ **时空旅行查询** – Apache Iceberg 表目前不支持时空旅行查询。
+ **定价** – 当您从集群访问 Iceberg 表时，您需要按照 Redshift Spectrum 定价付费。当您从工作组访问 Iceberg 表时，您需要按 Redshift Serverless 定价付费。有关 Redshift Spectrum 和 Redshift Serverless 定价的信息，请参阅 [Amazon Redshift 定价](https://www.amazonaws.cn/redshift/pricing/)。
+ **元数据缓存**：元数据缓存基于 [Iceberg 规范](https://iceberg.apache.org/spec/#file-system-operations)假定元数据文件是不可变的。元数据文件不可变性是 Amazon Redshift 中数据完整性的一项要求。
+ **联合身份**：写入 Apache Iceberg 表时不支持联合身份。这包括在创建外部架构时，为 IAM\$1ROLE 参数使用 SESSION 关键字。有关 IAM\$1ROLE 参数的更多信息，请参阅 [CREATE EXTERNAL SCHEMA](https://docs.amazonaws.cn/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)。