Actualización de los datos de las tablas de Iceberg - Amazon Athena

Actualización de los datos de las tablas de Iceberg

Los datos de la tabla de Iceberg se pueden administrar directamente en Athena mediante consultas INSERT, UPDATE y DELETE. Cada transacción de administración de datos produce una nueva instantánea, que se puede consultar por medio de un viaje en el tiempo. Las instrucciones UPDATE y DELETE siguen la especificación de eliminación de posiciones a nivel filas del formato Iceberg v2 y aplican el aislamiento de instantáneas.

Use los siguientes comandos para realizar operaciones de administración de datos en tablas de Iceberg.

INSERT INTO

Este comando inserta datos en una tabla de Iceberg. El comando INSERT INTO de Athena Iceberg se carga igual que las consultas actuales INSERT INTO para tablas de Hive externas según la cantidad de datos analizados. Para insertar datos en una tabla de Iceberg, use la siguiente sintaxis, donde la consulta puede ser VALUES (val1, val2, ...) o SELECT (col1, col2, …) FROM [db_name.]table_name WHERE predicate. Para obtener información sobre la sintaxis y la semántica de SQL, consulte INSERT INTO.

INSERT INTO [db_name.]table_name [(col1, col2, …)] query

Los siguientes ejemplos insertan valores en la tabla iceberg_table.

INSERT INTO iceberg_table VALUES (1,'a','c1')
INSERT INTO iceberg_table (col1, col2, ...) VALUES (val1, val2, ...)
INSERT INTO iceberg_table SELECT * FROM another_table

DELETE

El comando DELETE de Athena Iceberg escribe los archivos de eliminación de posición Iceberg en una tabla. Esto se conoce como eliminación de tipo fusionar al leer. En contraste con la eliminación de tipo copiar al escribir, una eliminación de tipo fusionar al leer es más eficiente porque no se reescriben los datos de los archivos. Cuando Athena lee los datos de Iceberg, fusiona los archivos de eliminación de posición de Iceberg con los archivos de datos para producir la última vista de una tabla. Para eliminar estos archivos de eliminación de posición, puede ejecutar la acción de compactación REWRITE DATA. Las operaciones DELETE se cobran según la cantidad de datos analizados. Para ver la sintaxis, consulte DELETE.

En el siguiente ejemplo, se eliminan las filas de iceberg_table que tienen c3 como valor de category.

DELETE FROM iceberg_table WHERE category='c3'

UPDATE

El comando UPDATE de Athena Iceberg escribe los archivos de eliminación de posición de Iceberg y las filas recién actualizadas como archivos de datos en la misma transacción. Se puede considerar al comando UPDATE como una combinación de INSERT INTO y DELETE. Las operaciones UPDATE se cobran según la cantidad de datos analizados. Para ver la sintaxis, consulte UPDATE.

En el siguiente ejemplo, se actualizan los valores especificados en la tabla iceberg_table.

UPDATE iceberg_table SET category='c2' WHERE category='c1'

MERGE INTO

Actualiza, elimina o inserta filas en una tabla de Iceberg de forma condicional. Una sola instrucción puede combinar acciones de actualización, eliminación e inserción. Para ver la sintaxis, consulte MERGE INTO.

nota

MERGE INTO es transaccional y solo es compatible con las tablas de Apache Iceberg en la versión 3 del motor Athena.

El siguiente ejemplo elimina todos los clientes de la tabla t que se encuentran en la tabla de origen s.

MERGE INTO accounts t USING monthly_accounts_update s ON t.customer = s.customer WHEN MATCHED THEN DELETE

En el siguiente ejemplo, se actualiza la tabla de destino t con la información del cliente de la tabla de origen s. Para las filas de clientes de la tabla t que tienen filas de clientes coincidentes en la tabla s, el ejemplo incrementa las compras de la tabla t. Si la tabla t no coincide con ninguna fila de clientes de la tabla s, en el ejemplo se inserta la fila de clientes de una tabla s a otra t.

MERGE INTO accounts t USING monthly_accounts_update s ON (t.customer = s.customer) WHEN MATCHED THEN UPDATE SET purchases = s.purchases + t.purchases WHEN NOT MATCHED THEN INSERT (customer, purchases, address) VALUES(s.customer, s.purchases, s.address)

El siguiente ejemplo actualiza condicionalmente la tabla de destino t con información de la tabla de origen s. El ejemplo elimina cualquier fila de destino coincidente cuya dirección de origen sea Centreville. Para todas las demás filas coincidentes, el ejemplo agrega las compras de origen y establece la dirección de destino en la dirección de origen. Si no hay ninguna coincidencia en la tabla de destino, el ejemplo inserta la fila de la tabla de origen.

MERGE INTO accounts t USING monthly_accounts_update s ON (t.customer = s.customer) WHEN MATCHED AND s.address = 'Centreville' THEN DELETE WHEN MATCHED THEN UPDATE SET purchases = s.purchases + t.purchases, address = s.address WHEN NOT MATCHED THEN INSERT (customer, purchases, address) VALUES(s.customer, s.purchases, s.address)