Consulta de tablas 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
SELECT * FROM [
db_name
.]table_name
[WHEREpredicate
]
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
después del nombre de la tabla en la instrucción timestamp
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 ejemplo siguiente 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
después del nombre de la tabla en la instrucción version
SELECT
, como en el siguiente ejemplo.
SELECT * FROM [
db_name
.]table_name
FOR VERSION AS OFversion
El parámetro de la versión
es el ID de instantánea bigint
asociado a una versión de la tabla 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
Las cláusulas FOR SYSTEM_TIME AS OF
y FOR SYSTEM_VERSION AS
OF
de la versión 2 del motor Athena se han sustituido por las cláusulas FOR
TIMESTAMP AS OF
y FOR VERSION AS OF
de la versión 3 del motor Athena.
Recuperación del ID de la instantánea
Puede utilizar los SDK proporcionados por Iceberg en Java
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://my-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 Iceberg
Para crear y consultar vistas de Athena en tablas 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
Trabajar con el control de acceso detallado de Lake Formation
La versión 3 del motor Athena admite el control de acceso detallado de Lake Formation con tablas 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 Iceberg fuera de Athena, utilice la versión 0.13.0 o superior del SDK de Apache Iceberg