Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la publicación del blog
Tablas de Iceberg de referencia en Amazon Redshift
Amazon Redshift ofrece varias formas de hacer referencia a las tablas de Apache Iceberg almacenadas en el lago de datos. Puede usar esquemas externos para crear referencias a las bases de datos del catálogo de datos que contienen tablas de Iceberg o usar una notación de tres partes para acceder directamente a los catálogos montados automáticamente.
Uso de esquemas externos para hacer referencia a las tablas de Iceberg
Los esquemas externos proporcionan una forma de hacer referencia a las tablas del catálogo de datos desde Amazon Redshift. Cuando crea un esquema externo, establece una conexión entre la base de datos de Amazon Redshift y una base de datos de catálogo de datos específica que incluye las tablas de Iceberg.
Para crear un esquema externo para las tablas de Iceberg:
CREATE EXTERNAL SCHEMAschema_nameFROM DATA CATALOG DATABASE 'glue_database_name' IAM_ROLE 'arn:aws:iam::account-id:role/role-name';
Tras crear el esquema externo, puede consultar las tablas de Iceberg mediante una notación de dos partes:
SELECT * FROMschema_name.iceberg_table_name;
También puede unir tablas de Iceberg con tablas locales de 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;
Uso de la notación de tres partes con catálogos montados automáticamente
La notación de tres partes permite hacer referencia directa a las tablas de los catálogos montados automáticamente sin crear esquemas externos. Esto resulta particularmente útil cuando se trabaja con buckets de tablas de Amazon S3 federados con AWS Lake Formation. Para obtener información sobre cómo configurar el montaje automático del catálogo de datos, consulte Simplificación del acceso a objetos externos en Amazon Redshift mediante el montaje automático de AWS Glue Data Catalog
La sintaxis de la notación de tres partes es:
"catalog_name".database_name.table_name
Por ejemplo, para consultar una tabla de Iceberg en un catálogo de tablas de Amazon S3 montado automáticamente:
SELECT * FROM "my_table_bucket@s3tablescatalog".my_database.my_iceberg_table;
Para obtener más información sobre la integración de buckets de tablas de Amazon S3 con Amazon Redshift, consulte Acceso a las tablas de Amazon S3 con Amazon Redshift en la Guía del usuario de Amazon S3.
También puede hacer referencia a las tablas del catálogo raíz montado automáticamente awsdatacatalog, que proporciona acceso directo a las bases de datos y tablas registradas en AWS Glue Data Catalog:
SELECT * FROM awsdatacatalog.my_database.my_iceberg_table;
Para obtener más información sobre el uso del catálogo raíz awsdatacatalog, consulte Consulta de AWS Glue Data Catalog en la Guía de administración de Amazon Redshift y Administración de los espacios de nombres del catálogo de datos en la Guía para desarrolladores de AWS Lake Formation.
También puede usar la instrucción USE para establecer un catálogo y una base de datos predeterminados para los buckets de tablas de Amazon S3:
USE "my_table_bucket@s3tablescatalog".my_database; SELECT * FROMmy_iceberg_table;
Para establecer una ruta de búsqueda para la resolución del esquema con buckets de tablas de Amazon S3:
USE "my_table_bucket@s3tablescatalog"; SET search_path TOmy_database; SELECT * FROMmy_iceberg_table;
nota
La instrucción USE y search_path solo son compatibles con s3tablescatalog. No se pueden usar con awsdatacatalog. Para hacer referencia a las tablas de awsdatacatalog, utilice la notación completa de tres partes.
Prácticas recomendadas para hacer referencia a tablas de Iceberg
Una tabla de Apache Iceberg es una única entidad lógica compuesta por varios archivos: un archivo de metadatos raíz (metadata.json), listas de manifiestos, archivos de manifiesto y archivos de datos (normalmente .parquet). El archivo de metadatos raíz sirve como punto de entrada y contiene referencias a todos los demás archivos que conforman la tabla. Cuando concede acceso a Amazon Redshift a una tabla Iceberg, Amazon Redshift utiliza el archivo de metadatos raíz para detectar y leer todos los archivos de datos a los que se hace referencia. Si Amazon Redshift tiene acceso al archivo de metadatos raíz, asume y requiere también acceso a todos los archivos de datos subyacentes. Esto es coherente con el diseño de Iceberg, en el que el acceso de tabla es la unidad de autorización prevista.
Para mejorar el rendimiento de las consultas, Amazon Redshift almacena en caché los archivos de metadatos de Iceberg (incluidos el archivo de metadatos raíz, las listas de manifiestos y los archivos de manifiesto) en la memoria. El archivo de metadatos raíz (metadata.json) se revalida con Amazon S3 a un intervalo configurable (TTL). Una vez que caduca el TTL, Amazon Redshift realiza una solicitud HEAD de Amazon S3 sobre el archivo de metadatos raíz para verificar que el rol de IAM sigue teniendo acceso y que el archivo no se ha modificado. Si la comprobación de permisos falla o el archivo ha cambiado, la entrada almacenada en caché se expulsa y los metadatos se vuelven a recuperar de Amazon S3. Dado que el archivo de metadatos raíz es el punto de entrada para todo el acceso a las tablas, esta revalidación actúa como puerta de control de permisos para toda la tabla. Las listas de manifiestos y los archivos de manifiesto se almacenan en caché sin una revalidación TTL independiente; su validez de acceso se deriva de la comprobación de permisos de los metadatos raíz. Esto significa que, si revoca los permisos de Amazon S3 en una tabla Iceberg, las consultas pueden seguir ejecutándose correctamente durante un máximo de dos minutos mientras se utilizan los metadatos almacenados en caché.
importante
Amazon S3 le permite establecer permisos en cada objeto concreto, lo que significa que, técnicamente, es posible conceder acceso a los metadatos de una tabla de Iceberg al tiempo que se restringe el acceso a algunos de sus archivos de datos subyacentes. Esto genera una incoherencia en los permisos que puede provocar fallos en las consultas o errores de acceso inesperados en Amazon Redshift.
Amazon Redshift valida periódicamente el acceso al archivo de metadatos raíz almacenado en caché, pero no valida ni garantiza la coherencia entre los permisos en los metadatos y en los archivos de datos dentro de su bucket de Amazon S3. Es responsabilidad del cliente asegurarse de que los permisos se apliquen de manera coherente en todos los archivos que conforman una tabla de Iceberg.
Para evitarlo, tenga en cuenta las siguientes prácticas recomendadas al hacer referencia a tablas de Iceberg en Amazon Redshift:
-
Use nombres de esquema descriptivos: al crear esquemas externos, use nombres que indiquen claramente el origen y el propósito de los datos, como
sales_data_lakeocustomer_analytics. -
Aproveche las estadísticas de las tablas: asegúrese de que las estadísticas de las columnas se generen para las tablas de Iceberg que utilicen AWS Glue para optimizar el rendimiento de las consultas. Amazon Redshift utiliza estas estadísticas para planificar y optimizar las consultas.
-
Tenga en cuenta la actualización de los datos: otros servicios pueden actualizar las tablas de Iceberg mientras las consulta. Amazon Redshift proporciona coherencia transaccional, lo que garantiza que vea una instantánea coherente de los datos durante la ejecución de la consulta.
-
Utilice los permisos de IAM adecuados: asegúrese de que el clúster o grupo de trabajo de Amazon Redshift tenga los permisos de IAM necesarios para acceder a las ubicaciones de Amazon S3 en las que se almacenan las tablas de Iceberg, así como a los metadatos del catálogo de datos.
-
Permisos de tabla: concede permisos en la tabla, no en el archivo individual.
-
Permisos uniformes: garantice un acceso uniforme a toda la ruta de Amazon S3 de su tabla de Iceberg, incluidos todos los metadatos, manifiestos y archivos de datos.
-
Evite las políticas restrictivas en el objeto: no establezca políticas restrictivas de objeto en archivos individuales de Parquet con el prefijo de una tabla de Iceberg.
-
Conozca el TTL del almacenamiento para los cambios de permisos: cuando revoque los permisos de Amazon S3 en una tabla de Iceberg, es posible que las consultas sigan ejecutándose correctamente utilizando los metadatos raíz almacenados en caché durante un tiempo máximo equivalente al TTL configurado (por defecto: 2 minutos).
-
Supervise el rendimiento de las consultas: utilice las características de supervisión de consultas de Amazon Redshift para realizar un seguimiento del rendimiento de las consultas en comparación con las tablas de Iceberg y optimícelas según sea necesario.
Patrones de referencia comunes
En los siguientes ejemplos, se muestran patrones comunes para hacer referencia a las tablas de Iceberg:
Adición de datos en varias tablas de 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;
Unión de tablas de Iceberg con tablas locales de 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;
Uso de una notación de tres partes con consultas complejas:
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;