Consulta de tablas de Iceberg y realización de viajes en el tiempo - Amazon Athena

Consulta de tablas de Iceberg y realización de viajes en el tiempo

Para consultar un conjunto de datos Iceberg, utilice una instrucción SELECT estándar como la siguiente. Las consultas siguen la especificación del formato v2 de Apache Iceberg y hacen la fusión en lectura tanto de la posición como de los borrados de igualdad.

SELECT * FROM [db_name.]table_name [WHERE predicate]

Para optimizar los tiempos de consulta, todos los predicados se empujan hacia abajo, hacia donde viven los datos.

Consultas de viaje en el tiempo y de viaje de versión

Cada tabla de Apache Iceberg mantiene un manifiesto con versiones de los objetos de Amazon S3 que contiene. Las versiones anteriores del manifiesto se pueden usar para las consultas de viaje en el tiempo y de viaje de versión.

Las consultas de viaje en el tiempo de Athena consultan en Amazon S3 para obtener los datos históricos de una instantánea coherente a partir de una fecha y hora especificas. Las consultas de viaje de versión en Athena consultan Amazon S3 para obtener datos históricos a partir de un ID de instantánea especificado.

Consultas de viaje en el tiempo

Para ejecutar una consulta de viaje en el tiempo, use FOR TIMESTAMP AS OF timestamp después del nombre de la tabla en la instrucción SELECT, como en el siguiente ejemplo.

SELECT * FROM iceberg_table FOR TIMESTAMP AS OF timestamp

La hora del sistema que se especificará para viajar puede ser una marca temporal o una marca temporal con una zona horaria. Si no se especifica, Athena considera que el valor es una marca de tiempo en el huso horario UTC.

En el siguiente ejemplo de consultas de viaje en el tiempo, se seleccionan los datos de CloudTrail para la fecha y hora especificadas.

SELECT * FROM iceberg_table FOR TIMESTAMP AS OF TIMESTAMP '2020-01-01 10:00:00 UTC'
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF (current_timestamp - interval '1' day)

Consultas de viaje de versión

Para ejecutar una consulta de viaje de versiones (es decir, ver una instantánea coherente a partir de una versión especificada), utilice FOR VERSION AS OF version después del nombre de la tabla en la instrucción SELECT, como en el siguiente ejemplo.

SELECT * FROM [db_name.]table_name FOR VERSION AS OF version

El parámetro de la versión es el ID de instantánea bigint asociado a una versión de la tabla de Iceberg.

En el siguiente ejemplo de consulta de viaje de versiones, se seleccionan los datos de la versión especificada.

SELECT * FROM iceberg_table FOR VERSION AS OF 949530903748831860
nota

Las cláusulas FOR SYSTEM_TIME AS OF y FOR SYSTEM_VERSION AS OF de la versión 2 del motor de Athena se han sustituido por las cláusulas FOR TIMESTAMP AS OF y FOR VERSION AS OF de la versión 3 del motor de Athena.

Recuperación del ID de la instantánea

Puede utilizar la clase SnapshotUtil de Java proporcionada por Iceberg para recuperar el ID de una instantánea de Iceberg, como se muestra en el siguiente ejemplo.

import org.apache.iceberg.Table; import org.apache.iceberg.aws.glue.GlueCatalog; import org.apache.iceberg.catalog.TableIdentifier; import org.apache.iceberg.util.SnapshotUtil; import java.text.SimpleDateFormat; import java.util.Date; Catalog catalog = new GlueCatalog(); Map<String, String> properties = new HashMap<String, String>(); properties.put("warehouse", "s3://DOC-EXAMPLE-BUCKET/my-folder"); catalog.initialize("my_catalog", properties); Date date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse("2022/01/01 00:00:00"); long millis = date.getTime(); TableIdentifier name = TableIdentifier.of("db", "table"); Table table = catalog.loadTable(name); long oldestSnapshotIdAfter2022 = SnapshotUtil.oldestAncestorAfter(table, millis);

Combinación de viajes en el tiempo y de versión

Se puede usar la sintaxis de viaje en el tiempo y de versión en la misma consulta para especificar diferentes condiciones de tiempo y de control de versiones, como en el siguiente ejemplo.

SELECT table1.*, table2.* FROM [db_name.]table_name FOR TIMESTAMP AS OF (current_timestamp - interval '1' day) AS table1 FULL JOIN [db_name.]table_name FOR VERSION AS OF 5487432386996890161 AS table2 ON table1.ts = table2.ts WHERE (table1.id IS NULL OR table2.id IS NULL)

Creación y consulta de vistas con tablas de Iceberg

Para crear y consultar vistas de Athena en tablas de Iceberg, utilice las vistas CREATE VIEW tal y como se describe en Uso de vistas.

Ejemplo:

CREATE VIEW view1 AS SELECT * FROM iceberg_table
SELECT * FROM view1

Si está interesado en utilizar la especificación de vistas de Iceberg para crear vistas, póngase en contacto con athena-feedback@amazon.com.

Trabajar con el control de acceso detallado de Lake Formation

La versión 3 del motor de Athena admite el control de acceso detallado de Lake Formation con tablas de Iceberg, incluido el control de acceso de seguridad de nivel de columna y fila. Este control de acceso funciona con consultas de viajes en el tiempo y con tablas que han realizado la evolución del esquema. Para obtener más información, consulte Control de acceso detallado de Lake Formation y grupos de trabajo de Athena.

Si ha creado su tabla de Iceberg fuera de Athena, utilice la versión 0.13.0 o superior del SDK de Apache Iceberg para que la información de la columna de la tabla de Iceberg aparezca en el AWS Glue Data Catalog. Si la tabla de Iceberg no contiene información sobre columnas en AWS Glue, puede utilizar la instrucción ALTER TABLE SET PROPERTIES de Athena o el último SDK de Iceberg para corregir la tabla y actualizar la información de la columna en AWS Glue.