从补丁 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 SCHEMAschema_nameFROM DATA CATALOG DATABASE 'glue_database_name' IAM_ROLE 'arn:aws:iam::account-id:role/role-name';
创建外部架构后,您可以使用两部分表示法查询 Iceberg 表:
SELECT * FROMschema_name.iceberg_table_name;
您也可以将 Iceberg 表与本地 Amazon Redshift 表联接起来:
SELECT r.customer_id, i.order_date, r.customer_name FROM local_customers r JOINschema_name.iceberg_ordersi 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 * FROMmy_iceberg_table;
要设置用于架构解析的搜索路径,请执行以下操作:
USE "my_table_bucket@s3tablescatalog"; SET search_path TOmy_database; SELECT * FROMmy_iceberg_table;
引用 Iceberg 表的最佳实践
在 Amazon Redshift 中引用 Iceberg 表时,请考虑以下最佳实践:
-
使用描述性架构名称:创建外部架构时,请使用能清楚表明数据来源和用途的名称,例如
sales_data_lake或customer_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;