View a markdown version of this page

在 Amazon Redshift 中引用 Iceberg 表 - Amazon Redshift

从补丁 198 开始,Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息,请参阅博客文章

在 Amazon Redshift 中引用 Iceberg 表

Amazon Redshift 提供了多种方法来引用存储在数据湖中的 Apache Iceberg 表。您可以使用外部架构来创建对包含 Iceberg 表的 Data Catalog 数据库的引用,也可以使用三部分表示法直接访问自动挂载的目录。

使用外部架构引用 Iceberg 表

外部架构提供了在 Amazon Redshift 中引用 Data Catalog 中的表的方法。创建外部架构时,您在 Amazon Redshift 数据库与包含您 Iceberg 表的特定 Data Catalog 数据库之间建立了连接。

要为 Iceberg 表创建外部架构,请执行以下操作:

CREATE EXTERNAL SCHEMA schema_name FROM DATA CATALOG DATABASE 'glue_database_name' IAM_ROLE 'arn:aws:iam::account-id:role/role-name';

创建外部架构后,您可以使用两部分表示法查询 Iceberg 表:

SELECT * FROM schema_name.iceberg_table_name;

您也可以将 Iceberg 表与本地 Amazon Redshift 表联接起来:

SELECT r.customer_id, i.order_date, r.customer_name FROM local_customers r JOIN schema_name.iceberg_orders i ON r.customer_id = i.customer_id;

对自动挂载的目录使用三部分表示法

您可以使用三部分表示法,直接引用自动挂载的目录中的表而无需创建外部架构。在处理与 AWS Lake Formation 联合的 Amazon S3 表存储桶时,此方法尤为有用。有关设置 Data Catalog 自动挂载的信息,请参阅 Simplify external object access in Amazon Redshift using automatic mounting of the AWS Glue Data Catalog

三部分表示法如下所示:

"catalog_name".database_name.table_name

例如,要在自动挂载的 Amazon S3 表目录中查询 Iceberg 表,请执行以下操作:

SELECT * FROM "my_table_bucket@s3tablescatalog".my_database.my_iceberg_table;

有关将 Amazon S3 表存储桶与 Amazon Redshift 集成的更多信息,请参阅《Amazon S3 用户指南》中的将 S3 表类数据存储服务与 Amazon Redshift 集成

您也可以使用 USE 语句来设置默认的目录和数据库:

USE "my_table_bucket@s3tablescatalog".my_database; SELECT * FROM my_iceberg_table;

要设置用于架构解析的搜索路径,请执行以下操作:

USE "my_table_bucket@s3tablescatalog"; SET search_path TO my_database; SELECT * FROM my_iceberg_table;

引用 Iceberg 表的最佳实践

在 Amazon Redshift 中引用 Iceberg 表时,请考虑以下最佳实践:

  • 使用描述性架构名称:创建外部架构时,请使用能清楚表明数据来源和用途的名称,例如 sales_data_lakecustomer_analytics

  • 利用表统计数据:确保使用 AWS Glue 为 Iceberg 表生成列统计数据,用来优化查询性能。Amazon Redshift 使用这些统计数据进行查询规划和优化。

  • 考虑数据新鲜度:在您查询 Iceberg 表时,其他服务可能会更新这些表。Amazon Redshift 提供事务一致性,可确保您在执行查询期间看到一致的数据快照。

  • 使用适当的 IAM 权限:确保您的 Amazon Redshift 集群或工作组具有必要的 IAM 权限,可以访问存储 Iceberg 表的 Amazon S3 位置以及 Data Catalog 元数据。

  • 监控查询性能:使用 Amazon Redshift 查询监控功能,跟踪对 Iceberg 表进行查询的性能并根据需要进行优化。

常见引用模式

以下示例演示引用 Iceberg 表的常用模式:

跨多个 Iceberg 表聚合数据:

SELECT region, SUM(sales_amount) as total_sales, COUNT(*) as transaction_count FROM data_lake.sales_transactions WHERE transaction_date >= '2024-01-01' GROUP BY region ORDER BY total_sales DESC;

将 Iceberg 表与本地 Amazon Redshift 表联接:

SELECT c.customer_name, c.customer_tier, SUM(o.order_amount) as total_orders FROM customers c JOIN data_lake.order_history o ON c.customer_id = o.customer_id WHERE o.order_date >= CURRENT_DATE - INTERVAL '30 days' GROUP BY c.customer_name, c.customer_tier;

在复杂查询中使用三部分表示法:

WITH recent_orders AS ( SELECT customer_id, order_date, order_amount FROM "analytics_bucket@s3tablescatalog".ecommerce.orders WHERE order_date >= CURRENT_DATE - INTERVAL '7 days' ) SELECT customer_id, COUNT(*) as order_count, AVG(order_amount) as avg_order_value FROM recent_orders GROUP BY customer_id HAVING COUNT(*) > 1;