Configurar las opciones de tabla te permite habilitar la interoperabilidad de escritura de BigQuery o la administración de tablas (optimización automática del almacenamiento) para tus tablas de Apache Iceberg en el catálogo de tiempo de ejecución de Lakehouse. Estas opciones sirven como parámetros de configuración fundamentales que extienden las capacidades para las operaciones en la tabla.
Si configuras propiedades de tabla específicas, puedes habilitar la interoperabilidad de escritura con BigQuery DML o la administración automática de tablas (optimización del almacenamiento).
Cuando usas tablas en el catálogo de tiempo de ejecución de Lakehouse, es útil comprender los diferentes tipos de tablas y sus capacidades de habilitación. Para obtener más información sobre el uso de tablas de Apache Iceberg específicamente, consulta Descripción general de las tablas de Apache Iceberg.
Antes de comenzar
-
Verifica que la facturación esté habilitada para tu Google Cloud proyecto.
-
Habilita la API de BigLake.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (
roles/serviceusage.serviceUsageAdmin), que contiene el permisoserviceusage.services.enable. Obtén más información para otorgar roles. - Configura el catálogo de tiempo de ejecución de Lakehouse con el extremo del catálogo REST de Apache Iceberg.
Roles obligatorios
Para obtener los permisos que necesitas para configurar las opciones de tabla, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto y bucket de almacenamiento:
-
Configurar las propiedades de la tabla en el modo de venta de credenciales:
Editor de BigLake (
roles/biglake.editor) - el proyecto -
Configurar las propiedades de la tabla en el modo de venta de credenciales:
- Editor de BigLake (
roles/biglake.editor) - el proyecto - Usuario de objetos de almacenamiento (
roles/storage.objectUser) - el bucket de Cloud Storage
- Editor de BigLake (
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Consideraciones sobre la configuración
Ten en cuenta los siguientes requisitos y comportamientos predeterminados cuando configures las opciones de tabla:
Tablas de Iceberg compatibles
Solo se admiten las tablas de Apache Iceberg V2 (DG) y V3 (versión preliminar). No se admiten las tablas de Iceberg V1. Para actualizar las tablas V1 existentes, consulta Actualiza las tablas de Iceberg V1 a V2.
Requisito de venta de credenciales
Para habilitar la administración automática de tablas, tu catálogo de tiempo de ejecución de Lakehouse debe tener habilitada la venta de credenciales a nivel del catálogo. Los trabajos en segundo plano de administración de tablas usan la cuenta de servicio de venta de credenciales para autenticar y actualizar los archivos de datos de almacenamiento subyacentes.
Habilita BigQuery DML
Habilitar las sentencias del lenguaje de manipulación de datos (DML) de BigQuery desbloquea la interoperabilidad de escritura de BigQuery en las tablas de Apache Iceberg creadas con motores de código abierto.
Las sentencias admitidas incluyen INSERT, UPDATE, DELETE y MERGE,
así como sentencias DDL
estándar como
CREATE TABLE, ALTER TABLE y DROP TABLE, excepto las que no son compatibles con las tablas de Apache Iceberg en
BigQuery.
Habilita BigQuery DML para tablas nuevas
Cuando creas una tabla desde
BigQuery, BigQuery DML y la administración automática de tablas están habilitados de forma predeterminada. Cuando creas una tabla desde motores de código abierto, configura la propiedad de tabla gcp.biglake.bigquery-dml.enabled = true con la sintaxis DDL de tu motor.
Por ejemplo, en Spark SQL:
CREATE TABLE NAMESPACE.TABLE_NAME (id int, data string)
USING ICEBERG
TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);
Habilita BigQuery DML para tablas existentes
Para habilitar BigQuery DML en una tabla existente, actualiza la propiedad de la tabla.
Por ejemplo, en Spark SQL:
ALTER TABLE NAMESPACE.TABLE_NAME
SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);
Inhabilita BigQuery DML
Si inhabilitas BigQuery DML, la tabla se vuelve de solo lectura para BigQuery y se detiene la administración automática de tablas.
Por ejemplo, en Spark SQL:
ALTER TABLE NAMESPACE.TABLE_NAME
SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = false);
Habilita la administración de tablas
La administración de tablas automatiza los procesos en segundo plano para optimizar el almacenamiento y administrar el ciclo de vida de los datos y los metadatos, como la compactación y la recolección de elementos no utilizados.
La administración de tablas te permite realizar las siguientes operaciones:
Vencimiento de instantáneas y recolección de elementos no utilizados: El vencimiento de instantáneas administra la retención y el borrado de archivos de datos y metadatos de las instantáneas de tablas. Esto se ejecuta automáticamente en segundo plano después de cualquier mutación de datos. Las instantáneas vencen según las propiedades de la tabla de Iceberg configuradas por el usuario
history.expire.max-snapshot-age-msyhistory.expire.min-snapshots-to-keepen la tabla. Quita las entradas de instantáneas vencidas del archivometadata.jsony, luego, borra físicamente los archivos de datos y metadatos que pertenecían solo a las instantáneas vencidas y que ya no hacen referencia a ninguna instantánea activa.Limitación: Se omite el vencimiento de instantáneas y la recolección de elementos no utilizados asociada si la tabla usa etiquetas o ramas. Para obtener más información, consulta Limitaciones.
Limitación: La administración automática de tablas no controla la eliminación de archivos huérfanos. Para obtener más información, consulta Limitaciones.
Coalesce (compactación): Coalesce es responsable de mantener la forma de los datos mediante la combinación de archivos pequeños en archivos más grandes. Coalesce se ejecuta automáticamente en segundo plano después de cualquier mutación de datos. Los archivos se seleccionan para la compactación si su tamaño promedio sin comprimir es inferior al 50% del tamaño de archivo objetivo de 256 MB. Cada operación de coalesce produce una nueva instantánea de la tabla. Por lo general, los trabajos de coalesce ceden y vuelven a intentarlo después de cualquier operación DML en ejecución. Sin embargo, para evitar la inanición indefinida de la optimización del almacenamiento, se activa un trabajo de coalesce de forma forzada cada 24 horas si los datos son aptos para coalesce.
Supervisión de trabajos de administración de tablas: Todos los trabajos de administración de tablas en segundo plano se registran en la vista
INFORMATION_SCHEMA.JOBSde BigQuery. Puedes consultar esta vista para hacer un seguimiento de estas operaciones, de manera similar a como supervisas otros trabajos de BigQuery. Para obtener más información sobre cómo consultar información de trabajos, consulta Obtén trabajos de optimización de almacenamiento de Iceberg jobs.La frecuencia de los trabajos de administración de tablas se relaciona directamente con la actividad de mutación de datos. Las inserciones o actualizaciones pequeñas y frecuentes activan tareas en segundo plano más frecuentes. Es posible que observes períodos sin trabajos en segundo plano si no hay escrituras en la tabla. Por el contrario, los volúmenes de escritura altos pueden generar una actividad de trabajo más visible en
INFORMATION_SCHEMA.
Habilita la administración de tablas para tablas nuevas
Cuando creas una tabla desde
BigQuery, DML y la administración automática de tablas están habilitados de forma predeterminada. Cuando creas una tabla desde motores de código abierto, configura la propiedad gcp.biglake.table-management.enabled. Si habilitas la administración de tablas, se habilita automáticamente BigQuery DML si aún no está habilitado.
Por ejemplo, en Spark SQL:
CREATE TABLE NAMESPACE.TABLE_NAME (id int, data string)
USING ICEBERG
TBLPROPERTIES ('gcp.biglake.table-management.enabled' = true);
Habilita la administración de tablas para tablas existentes
Para habilitar la administración de tablas en una tabla existente, actualiza la propiedad de la tabla.
Por ejemplo, en Spark SQL:
ALTER TABLE NAMESPACE.TABLE_NAME
SET TBLPROPERTIES ('gcp.biglake.table-management.enabled' = true);
Inhabilita la administración de tablas
Si inhabilitas la administración de tablas, se impide que se pongan en cola los trabajos de optimización en segundo plano futuros, aunque se completarán los trabajos activos en curso. Si inhabilitas la administración de tablas, no se inhabilita BigQuery DML.
Spark SQL
ALTER TABLE NAMESPACE.TABLE_NAME
SET TBLPROPERTIES ('gcp.biglake.table-management.enabled' = false);
BigQuery
ALTER TABLE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
SET OPTIONS (`properties.gcp.biglake.table-management` = "disabled");
Limitaciones
Las limitaciones para las capacidades administradas (como la interoperabilidad de escritura de BigQuery y la administración automática de tablas) incluyen las siguientes:
Limitaciones generales
- Las capacidades administradas solo son compatibles con las tablas de Apache Iceberg creadas en el catálogo de tiempo de ejecución de Lakehouse con el extremo del catálogo REST de Apache Iceberg.
- Todas las limitaciones existentes para las tablas de Apache Iceberg administradas por BigQuery se aplican a las operaciones con las capacidades administradas habilitadas.
- Las capacidades administradas no son compatibles con las tablas con la versión 3 del formato de Apache Iceberg. Solo se pueden habilitar las capacidades administradas para las tablas con la versión 2 del formato (especificación de Iceberg v2).
- Las capacidades administradas no son compatibles con las tablas que tienen particiones avanzadas, como la partición por
STRING, la partición de varias columnas o la evolución de particiones. - Las capacidades administradas no son compatibles con las tablas configuradas con órdenes de clasificación (por ejemplo, con el procedimiento
WRITE ORDER BYo la configuración dewrite.distribution.mode = range). - Las capacidades administradas no son compatibles con las tablas de Iceberg v2 que usan el modo de combinación en lectura. Solo se pueden habilitar las capacidades administradas para las tablas que usan el modo de actualización, borrado y combinación de copia en escritura.
- Las capacidades administradas no admiten archivos de datos comprimidos con códecs
gzip,lz4obrotli(write.parquet.compression.codec). Solo se admiten los tipos de compresiónzstdysnappypara los archivos de datos. - Las capacidades administradas no son compatibles con las tablas si el esquema contiene identificadores de clave primaria anidados (
identifier-field-ids) que hacen referencia a rutas de acceso o campos anidados en una estructura. - Las capacidades administradas no son compatibles con las tablas con ubicaciones de datos o metadatos personalizadas (
write.data.pathywrite.metadata.path). Se requiere la ubicación predeterminada del bucket de Cloud Storage para contener archivos de datos y metadatos. - El agrupamiento en clústeres de BigQuery no es compatible con las tablas de Apache Iceberg administradas por el catálogo de tiempo de ejecución de Lakehouse.
- Si se crea una tabla con el
NUMERICtipo de datos en BigQuery, fallará cualquier actualización de esquema de Spark porque Spark leeNUMERICcomoNUMERIC(38,9). Como solución alternativa, cuando crees tablas con el tipoNUMERICen BigQuery, establece explícitamente la precisión enNUMERIC(38,9). - Problema conocido: No se admite la eliminación de una columna en BigQuery con DDL (
ALTER TABLE ... DROP COLUMN) seguida inmediatamente de la adición de una columna con el mismo nombre.
Limitaciones con el viaje en el tiempo
- Cuando la administración de tablas está habilitada, el valor máximo recomendado para la propiedad
history.expire.max-snapshot-age-mses de 7 días. - No se aplican las configuraciones de BigQuery a nivel del proyecto o del conjunto de datos para el viaje en el tiempo. Solo están activas las propiedades y los valores predeterminados de la tabla de Iceberg.
Limitaciones con la administración de tablas
- Se omite el vencimiento de instantáneas para toda la tabla si esta contiene instantáneas con etiquetas o ramas. Se ignora la retención personalizada establecida con
ALTER... RETAIN x DAYS, y se ignoran todos los valores establecidos para lahistory.expire.max-ref-age-mspropiedad. Los motores de código abierto aún pueden realizar el vencimiento de instantáneas. - La administración automática de tablas no vence los esquemas ni las especificaciones de partición. El archivo
metadata.jsonconserva el historial completo de esquemas y especificaciones de partición, incluso si ninguna instantánea hace referencia a esos IDs de esquema. La administración automática de tablas no limpia los archivos huérfanos creados por BigQuery o motores de código abierto. Los motores de código abierto pueden realizar la limpieza de archivos huérfanos (por ejemplo, con el procedimiento remove_orphan_files de Spark con la opción
prefix_listingestablecida entrue).Coalesce no admite la ordenación z ni la ordenación lineal. Si tu tabla contiene estas propiedades, no se garantiza que se mantenga el diseño después de que se ejecute coalesce. Si tus tablas contienen estas propiedades, la mejor acción es no habilitar la administración de tablas.
Limitaciones con la partición
- Cuando se crean o registran tablas desde motores de código abierto, las capacidades administradas solo admiten la partición en tipos de campos
DATE,TIMESTAMP, yTIMESTAMPTZcon transformacioneshour,day,month, yyear(excepto la transformaciónhouren camposDATE). - Las capacidades administradas no son compatibles con las tablas con transformaciones
IDENTITY. Los usuarios deben especificar explícitamente la transformación. - Los comandos
- Reemplazar una tabla no particionada por una tabla particionada
- Reemplazar una tabla particionada por una tabla no particionada
- Reemplazar una tabla particionada por una tabla que usa una especificación de partición diferente
CREATE OR REPLACEen tablas con capacidades administradas solo se admiten si usan la misma especificación de partición. No se admiten los siguientes reemplazos:- No se admite el nombre de campo de partición personalizado. Las tablas creadas o registradas
desde motores de código abierto deben seguir la convención de nombres de campo de partición predeterminada del motor (agregar
_y el nombre de la transformación, como_hour,_day,_month, o_year). Por ejemplo, para un campo llamadotime_dateque usa la transformaciónDAY, el valor esperado del campo de partición es:json { "field-id": 1, "source-id": 1, "name": "time_date_day", "transform": transform }
Limitaciones con las propiedades de tabla de Iceberg personalizadas
Las siguientes propiedades de comportamiento de la tabla no se pueden configurar en valores no predeterminados cuando se habilitan las capacidades administradas. Los valores predeterminados están codificados cuando se habilita cualquier capacidad administrada:
| Propiedad | Valor predeterminado | Detalles |
|---|---|---|
format-version |
2 |
Las capacidades administradas solo admiten tablas de Iceberg v2. |
write.format.default |
parquet |
Las tablas solo admiten archivos de datos en formato Parquet. |
write.data.path |
table location + /data |
Se usa la ruta de acceso predeterminada del bucket de Cloud Storage configurada para el catálogo REST de Lakehouse para escribir archivos de datos. |
write.metadata.path |
table location + /metadata |
Se usa la ruta de acceso predeterminada del bucket de Cloud Storage configurada para el catálogo REST de Lakehouse para escribir archivos de metadatos. |
write.delete.mode |
copy-on-write |
Los trabajos de escritura y administración de tablas de BigQuery solo admiten la copia en escritura. |
write.update.mode |
copy-on-write |
Los trabajos de escritura y administración de tablas de BigQuery solo admiten la copia en escritura. |
write.merge.mode |
copy-on-write |
Los trabajos de escritura y administración de tablas de BigQuery solo admiten la copia en escritura. |
write.delete.isolation-level |
Detección estricta de conflictos | Los cambios que modifican el archivo metadata.json (incluidos los conflictos de datos, los conflictos de metadatos, las lecturas fantasma o las escrituras simultáneas que no entran en conflicto) hacen que la transacción simultánea falle y vuelva a intentarlo. |
write.update.isolation-level |
Detección estricta de conflictos | El mismo comportamiento que write.delete.isolation-level. |
write.merge.isolation-level |
Detección estricta de conflictos | El mismo comportamiento que write.delete.isolation-level. |
Las siguientes propiedades se pueden configurar cuando se crean o modifican tablas desde motores de código abierto:
| Propiedad | Valor predeterminado | Detalles |
|---|---|---|
write.parquet.compression-codec |
zstd |
Las escrituras de BigQuery y la optimización del almacenamiento solo admiten los formatos de compresión zstd y snappy. No se admiten otros formatos de compresión (como gzip, brotli y lz4). |
write.metadata.compression-codec |
null |
Se puede configurar como null o gzip. |
history.expire.max-snapshot-age-ms |
432000000 (5 días) |
Se puede configurar en cualquier número entero positivo, pero se recomienda hasta 7 días (604800000 ms) cuando la administración de tablas está habilitada. Los trabajos de administración de tablas borran las instantáneas más antiguas que la duración especificada. |
history.expire.min-snapshots-to-keep |
1 |
Se puede configurar en cualquier número entero positivo. Los trabajos de administración de tablas conservan al menos esta cantidad de instantáneas. |
Se pueden configurar otras propiedades de escritura de Apache Iceberg, como write.target-file-size-bytes y write.parquet.page-size-bytes, desde motores de código abierto, pero es posible que los trabajos de escritura y administración de tablas de BigQuery no las cumplan.
¿Qué sigue?
- Aprende a modificar datos con BigQuery DML.
- Aprende a consultar una tabla.