Tablas de Apache Iceberg
Las tablas de Apache Iceberg administradas por BigQuery (anteriormente, tablas de BigLake para Apache Iceberg en BigQuery) proporcionan la base para compilar lakehouses de formato abierto en Google Cloud. Las tablas de Iceberg administradas ofrecen la misma experiencia completamente administrada que las tablas estándar de BigQuery, pero almacenan datos en buckets de almacenamiento que pertenecen al cliente. Las tablas de Iceberg administradas admiten el formato de tabla de Spark abierto para una mejor interoperabilidad con motores de procesamiento de código abierto y de terceros en una sola copia de los datos.
Las tablas Iceberg administradas admiten las siguientes funciones:
- Mutaciones de tablas con el lenguaje de manipulación de datos (DML) de GoogleSQL
- Transmisión continua unificada por lotes y de alta capacidad de procesamiento con la API de BigQuery Storage Write a través de conectores como Spark, Dataflow y otros motores.
- Export of Apache Iceberg V2 snapshot and automatic refresh en cada mutación de la tabla para el acceso directo a las consultas con motores de consultas de código abierto y de terceros, como Spark.
- Evolución del esquema, que te permite agregar, descartar y cambiar el nombre de las columnas según tus necesidades. Esta función también te permite cambiar el tipo de datos de una columna existente y el modo de columna. Para obtener más información, consulta las reglas de conversión de tipos.
- Optimización automática del almacenamiento, que incluye el tamaño de archivo adaptable, el agrupamiento automático, la recolección de elementos no utilizados y la optimización de metadatos.
- Viaje en el tiempo para acceder a datos históricos en BigQuery
- Seguridad a nivel de la columna y enmascaramiento de datos
- Transacciones de varias instrucciones (en versión preliminar)
- Partición de tablas (en versión preliminar).
- Creación de tablas en flujos de trabajo de Dataform.
Arquitectura
Las tablas administradas de Iceberg brindan la comodidad de la administración de recursos de BigQuery a las tablas que residen en tus propios buckets de nube. Puedes usar BigQuery y motores de procesamiento de código abierto en estas tablas sin mover los datos fuera de los buckets que controlas. Debes configurar un bucket de Cloud Storage antes de comenzar a usar las tablas administradas de Iceberg.
Las tablas administradas de Iceberg utilizan el catálogo de tiempo de ejecución de Lakehouse como el catálogo de tiempo de ejecución unificado para todos los datos de Spark. El catálogo de tiempo de ejecución de Lakehouse proporciona una sola fuente de información para administrar los metadatos de varios motores y permite la interoperabilidad de los motores.
El uso de tablas de Apache Iceberg tiene las siguientes implicaciones en tu bucket:
- BigQuery crea archivos de datos nuevos en el bucket en respuesta a solicitudes de escritura y optimizaciones de almacenamiento en segundo plano, como instrucciones DML y transmisión.
- La compactación y el agrupamiento en clústeres automáticos se realizan en los archivos de datos del bucket. Después del vencimiento del período del viaje en el tiempo, se realiza la recolección de basura de los archivos de datos. Sin embargo, si se borra la tabla, no se realiza la recolección de registros no utilizados de los archivos de datos asociados. Para obtener más información, consulta Optimización del almacenamiento.
Crear una tabla de Spark es similar a crear tablas de BigQuery. Debido a que almacena datos en formatos abiertos en Cloud Storage, debes hacer lo siguiente:
- Especifica la conexión de recursos de Cloud con
WITH CONNECTIONpara configurar las credenciales de conexión de BigQuery y acceder a Cloud Storage. - Especifica el formato de archivo del almacenamiento de datos como
PARQUETcon la instrucciónfile_format = PARQUET. - Especifica el formato de tabla de metadatos de código abierto como
ICEBERGcon la declaracióntable_format = ICEBERG.
Prácticas recomendadas
Si cambias o agregas archivos directamente al bucket fuera de BigQuery, se pueden perder datos o producirse errores irrecuperables. En la siguiente tabla, se describen las situaciones posibles:
| Operación | Consecuencias | Prevención |
|---|---|---|
| Agregar archivos nuevos al bucket fuera de BigQuery. | Pérdida de datos: BigQuery no realiza un seguimiento de los archivos u objetos nuevos que se agregan fuera de BigQuery. Los procesos de recolección de elementos no utilizados en segundo plano borran los archivos sin seguimiento. | Agregar datos exclusivamente a través de BigQuery. Esto permite que BigQuery haga un seguimiento de los archivos y evite que se recopilen como basura. Para evitar la pérdida de datos y las incorporaciones accidentales, también te recomendamos restringir los permisos de escritura de herramientas externas en los buckets que contienen tablas de Iceberg administradas. |
| Crea una tabla de Spark nueva en un prefijo no vacío. | Pérdida de datos: BigQuery no realiza un seguimiento de los datos existentes, por lo que estos archivos se consideran sin seguimiento y se borran con los procesos de recolección de elementos no utilizados en segundo plano. | Solo crea tablas de Iceberg administradas nuevas en prefijos vacíos. |
| Modifica o reemplaza los archivos de datos de tablas de Spark. | Pérdida de datos: En la modificación o el reemplazo externos, la tabla no pasa una verificación de coherencia y se vuelve ilegible. Las consultas a la tabla fallan. No hay una forma de autoservicio para recuperarse de este punto. Comunícate con el equipo de asistencia para obtener ayuda con la recuperación de datos. |
Modificar los datos exclusivamente a través de BigQuery. Esto permite que BigQuery haga un seguimiento de los archivos y evite que se recopilen como basura. Para evitar la pérdida de datos y las incorporaciones accidentales, también te recomendamos restringir los permisos de escritura de herramientas externas en los buckets que contienen tablas de Iceberg administradas. |
| Crear dos tablas de Iceberg administradas en los mismos URIs o en URIs superpuestos. | Pérdida de datos: BigQuery no establece una vinculación entre instancias de URI idénticas de tablas administradas de Iceberg. Los procesos de recolección de elementos no utilizados en segundo plano de cada tabla considerarán que los archivos de la tabla opuesta no tienen seguimiento y los borrarán, lo que provocará la pérdida de datos. | Usar URIs únicos para cada tabla de Spark |
Prácticas recomendadas para la configuración de bucket de Cloud Storage
La configuración de tu bucket de Cloud Storage y su conexión con BigQuery tienen un impacto directo en el rendimiento, el costo, la integridad de los datos, la seguridad y la administración de tus tablas de Iceberg administradas. Estas son algunas prácticas recomendadas para ayudarte con esta configuración:
Selecciona un nombre que indique claramente que el bucket solo está destinado a las tablas Iceberg administradas.
Elige buckets de Cloud Storage de una sola región que estén ubicados en la misma región que tu conjunto de datos de BigQuery. Esta coordinación mejora el rendimiento y reduce los costos, ya que evita los cargos por transferencia de datos.
De forma predeterminada, Cloud Storage almacena los datos en la clase de almacenamiento Standard Storage, que proporciona un rendimiento suficiente. Para optimizar los costos de almacenamiento de datos, puedes habilitar Autoclass para administrar automáticamente las transiciones de clases de almacenamiento. Autoclass comienza con la clase de almacenamiento Standard Storage y mueve los objetos a los que no se accede a clases progresivamente más frías para reducir los costos de almacenamiento. Cuando se vuelve a leer el objeto, se mueve de nuevo a la clase Standard.
Habilita el acceso uniforme a nivel del bucket y la prevención del acceso público.
Verifica que los roles requeridos estén asignados a los usuarios y las cuentas de servicio correctos.
Para evitar la eliminación o corrupción accidental de datos de Spark en tu bucket de Cloud Storage, restringe los permisos de escritura y eliminación para la mayoría de los usuarios de tu organización. Para ello, establece una política de permisos de bucket con condiciones que denieguen las solicitudes
PUTyDELETEpara todos los usuarios, excepto los que especifiques.Aplica claves de encriptación administradas por Google o administradas por el cliente para proteger aún más los datos sensibles.
Habilita el registro de auditoría para la transparencia operativa, la solución de problemas y la supervisión del acceso a los datos.
Conserva la política de borrado de forma no definitiva predeterminada (retención de 7 días) para protegerte contra eliminaciones accidentales. Sin embargo, si detectas que se borraron datos de Spark, comunícate con el equipo de asistencia en lugar de restablecer objetos de forma manual, ya que BigQuery no realiza un seguimiento de los objetos que se agregan o modifican fuera de BigQuery.
El tamaño de archivo adaptable, el agrupamiento automático y la recolección de elementos no utilizados se habilitan automáticamente y ayudan a optimizar el rendimiento y el costo de los archivos.
Evita las siguientes funciones de Cloud Storage, ya que no son compatibles con las tablas administradas de Iceberg:
- Espacios de nombres jerárquicos
- Listas de control de acceso (LCA) de objetos
- Claves de encriptación proporcionadas por el cliente
- Control de versiones de objetos
- Bloqueo de objetos
- Bloqueo del bucket
- Restablece objetos borrados de forma no definitiva con la API de BigQuery o la CLI de bq
Puedes implementar estas prácticas recomendadas creando tu bucket con el siguiente comando:
gcloud storage buckets create gs://BUCKET_NAME \ --project=PROJECT_ID \ --location=LOCATION \ --enable-autoclass \ --public-access-prevention \ --uniform-bucket-level-access
Reemplaza lo siguiente:
BUCKET_NAME: Es el nombre de tu bucket nuevo.PROJECT_ID: Es el ID del proyecto.LOCATION: La ubicación de tu bucket nuevo
Flujos de trabajo de tablas de Spark
En las siguientes secciones, se describe cómo crear, cargar, administrar y consultar tablas administradas.
Antes de comenzar
Antes de crear y usar tablas administradas de Iceberg, asegúrate de haber configurado una conexión de recursos de Cloud a un bucket de almacenamiento. Tu conexión necesita permisos de escritura en el bucket de almacenamiento, como se especifica en la siguiente sección Roles obligatorios. Para obtener más información sobre los roles y permisos necesarios para las conexiones, consulta Administra conexiones.
Roles obligatorios
Para obtener los permisos que necesitas para permitir que BigQuery administre las tablas de tu proyecto, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Para crear tablas administradas de Iceberg, haz lo siguiente:
-
Propietario de datos de BigQuery (
roles/bigquery.dataOwner) en tu proyecto -
Administrador de conexión de BigQuery (
roles/bigquery.connectionAdmin) en tu proyecto
-
Propietario de datos de BigQuery (
-
Para consultar tablas de Iceberg administradas, haz lo siguiente:
-
Visualizador de datos de BigQuery (
roles/bigquery.dataViewer) en tu proyecto -
Usuario de BigQuery (
roles/bigquery.user) en tu proyecto
-
Visualizador de datos de BigQuery (
-
Otorga a la cuenta de servicio de conexión los siguientes roles para que pueda leer y escribir datos en Cloud Storage:
-
Usuario de objetos de almacenamiento (
roles/storage.objectUser) en el bucket -
Lector de depósitos heredados de Storage (
roles/storage.legacyBucketReader) en el bucket
-
Usuario de objetos de almacenamiento (
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para permitir que BigQuery administre las tablas de tu proyecto. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para permitir que BigQuery administre las tablas de tu proyecto:
-
Todos:
-
bigquery.connections.delegateen tu proyecto -
bigquery.jobs.createen tu proyecto -
bigquery.readsessions.createen tu proyecto -
bigquery.tables.createen tu proyecto -
bigquery.tables.geten tu proyecto -
bigquery.tables.getDataen tu proyecto -
storage.buckets.geten tu bucket -
storage.objects.createen tu bucket -
storage.objects.deleteen tu bucket -
storage.objects.geten tu bucket -
storage.objects.listen tu bucket
-
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Crea tablas administradas de Iceberg
Para crear una tabla de Spark, selecciona uno de los siguientes métodos:
SQL
CREATE TABLE [PROJECT_ID.]DATASET_ID.TABLE_NAME ( COLUMN DATA_TYPE[, ...] ) CLUSTER BY CLUSTER_COLUMN_LIST WITH CONNECTION {CONNECTION_NAME | DEFAULT} OPTIONS ( file_format = 'PARQUET', table_format = 'ICEBERG', storage_uri = 'STORAGE_URI');
Reemplaza lo siguiente:
- PROJECT_ID: Es el proyecto que contiene el conjunto de datos. Si no se define, el comando supone el proyecto predeterminado.
- DATASET_ID: Es un conjunto de datos existente.
- TABLE_NAME: es el nombre de la tabla que crearás.
- DATA_TYPE: Es el tipo de datos de la información que se incluye en la columna.
- CLUSTER_COLUMN_LIST (opcional): Es una lista separada por comas que contiene hasta cuatro columnas. Deben ser columnas de nivel superior que no se repitan.
- CONNECTION_NAME: Es el nombre de la conexión. Por ejemplo,
myproject.us.myconnection.
Para usar una conexión predeterminada, especifica DEFAULT en lugar de la cadena de conexión que contiene PROJECT_ID.REGION.CONNECTION_ID.
- STORAGE_URI: Es un URI de Cloud Storage completamente calificado. Por ejemplo,
gs://mybucket/table.
bq
bq --project_id=PROJECT_ID mk \ --table \ --file_format=PARQUET \ --table_format=ICEBERG \ --connection_id=CONNECTION_NAME \ --storage_uri=STORAGE_URI \ --schema=COLUMN_NAME:DATA_TYPE[, ...] \ --clustering_fields=CLUSTER_COLUMN_LIST \ DATASET_ID.MANAGED_TABLE_NAME
Reemplaza lo siguiente:
- PROJECT_ID: Es el proyecto que contiene el conjunto de datos. Si no se define, el comando supone el proyecto predeterminado.
- CONNECTION_NAME: Es el nombre de la conexión. Por ejemplo,
myproject.us.myconnection. - STORAGE_URI: Es un URI de Cloud Storage completamente calificado. Por ejemplo,
gs://mybucket/table. - COLUMN_NAME: El nombre de la columna.
- DATA_TYPE: Es el tipo de datos de la información que se incluye en la columna.
- CLUSTER_COLUMN_LIST (opcional): Es una lista separada por comas que contiene hasta cuatro columnas. Deben ser columnas de nivel superior que no se repitan.
- DATASET_ID: Es el ID de un conjunto de datos existente.
- MANAGED_TABLE_NAME: es el nombre de la tabla que crearás.
API
Llama al método tables.insert con un recurso de tabla definido, similar al siguiente:
{ "tableReference": { "tableId": "TABLE_NAME" }, "biglakeConfiguration": { "connectionId": "CONNECTION_NAME", "fileFormat": "PARQUET", "tableFormat": "ICEBERG", "storageUri": "STORAGE_URI" }, "schema": { "fields": [ { "name": "COLUMN_NAME", "type": "DATA_TYPE" } [, ...] ] } }
Reemplaza lo siguiente:
- TABLE_NAME: Es el nombre de la tabla que crearás.
- CONNECTION_NAME: Es el nombre de la conexión. Por ejemplo,
myproject.us.myconnection. - STORAGE_URI: Es un URI de Cloud Storage completamente calificado.
También se admiten comodines. Por ejemplo,
gs://mybucket/table. - COLUMN_NAME: El nombre de la columna.
- DATA_TYPE: Es el tipo de datos de la información que se incluye en la columna.
Importa datos a tablas administradas de Iceberg
En las siguientes secciones, se describe cómo importar datos de varios formatos de tablas a tablas administradas de Iceberg.
Carga datos estándar desde archivos planos
Las tablas administradas de Iceberg usan trabajos de carga de BigQuery para cargar archivos externos en tablas administradas de Iceberg. Si tienes una tabla de Spark existente, sigue la guía de la CLI de bq load o la guía de SQL de LOAD para cargar datos externos. Después de cargar los datos, se escriben archivos Parquet nuevos en la carpeta STORAGE_URI/data.
Si se usan las instrucciones anteriores sin una tabla de Spark existente, se creará una tabla de BigQuery.
Consulta lo siguiente para ver ejemplos específicos de herramientas de cargas por lotes en tablas administradas:
SQL
LOAD DATA INTO MANAGED_TABLE_NAME FROM FILES ( uris=['STORAGE_URI'], format='FILE_FORMAT');
Reemplaza lo siguiente:
- MANAGED_TABLE_NAME: Es el nombre de una tabla de Spark existente.
- STORAGE_URI: Es un URI de Cloud Storage completamente calificado o una lista separada por comas de URI.
También se admiten comodines. Por ejemplo,
gs://mybucket/table. - FILE_FORMAT: Es el formato de la tabla de origen. Para conocer los formatos compatibles, consulta la fila
formatdeload_option_list.
bq
bq load \ --source_format=FILE_FORMAT \ MANAGED_TABLE \ STORAGE_URI
Reemplaza lo siguiente:
- FILE_FORMAT: Es el formato de la tabla de origen. Para conocer los formatos compatibles, consulta la fila
formatdeload_option_list.- MANAGED_TABLE_NAME: Es el nombre de una tabla de Apache Iceberg existente.
- STORAGE_URI: Es un URI de Cloud Storage completamente calificado o una lista separada por comas de URI.
También se admiten comodines. Por ejemplo,
gs://mybucket/table.
Carga estándar desde archivos particionados por Apache Hive
Puedes cargar archivos particionados por Apache Hive en tablas administradas de Iceberg con trabajos de carga estándar de BigQuery. Para obtener más información, consulta Carga datos con particiones externas.
Carga datos de transmisión desde Pub/Sub
Puedes cargar datos de transmisión en tablas administradas de Iceberg con una suscripción de BigQuery a Pub/Sub.
Exporta datos de tablas administradas de Iceberg
En las siguientes secciones, se describe cómo exportar datos de tablas administradas de Iceberg a varios formatos de tabla.
Exporta datos a formatos planos
Para exportar una tabla de Spark a un formato plano, usa la sentencia EXPORT DATA y selecciona un formato de destino. Para obtener más información, consulta Cómo exportar datos.
Crea instantáneas de metadatos de tablas de Spark
Para crear una instantánea de metadatos de la tabla de Spark, sigue estos pasos:
Exporta los metadatos al formato Spark V2 con la instrucción SQL
EXPORT TABLE METADATA.Opcional: Programa la actualización de la instantánea de metadatos de Spark. Para actualizar una instantánea de metadatos de Spark según un intervalo de tiempo establecido, usa una consulta programada.
Opcional: Habilita la actualización automática de metadatos para que tu proyecto actualice automáticamente la instantánea de metadatos de la tabla de Spark en cada mutación de la tabla. Para habilitar la actualización automática de metadatos, comunícate con bigquery-tables-for-apache-iceberg-help@google.com. Se aplican costos de
EXPORT METADATAen cada operación de actualización.
En el siguiente ejemplo, se crea una consulta programada llamada My Scheduled Snapshot
Refresh Query con la instrucción DDL EXPORT TABLE METADATA FROM
mydataset.test. La instrucción DDL se ejecuta cada 24 horas.
bq query \ --use_legacy_sql=false \ --display_name='My Scheduled Snapshot Refresh Query' \ --schedule='every 24 hours' \ 'EXPORT TABLE METADATA FROM mydataset.test'
Visualiza la instantánea de metadatos de la tabla de Spark
Después de actualizar la instantánea de metadatos de la tabla de Spark, puedes encontrarla en el URI de Cloud Storage en el que se creó originalmente la tabla de Spark. La carpeta /data contiene los fragmentos de datos del archivo Parquet, y la carpeta /metadata contiene la instantánea de los metadatos de la tabla de Spark.
SELECT table_name, REGEXP_EXTRACT(ddl, r"storage_uri\s*=\s*\"([^\"]+)\"") AS storage_uri FROM `mydataset`.INFORMATION_SCHEMA.TABLES;
Ten en cuenta que mydataset y table_name son marcadores de posición para tu conjunto de datos y tabla reales.
Cómo leer tablas de Iceberg administradas con Spark
En el siguiente ejemplo, se configura tu entorno para usar Spark SQL con Spark y, luego, se ejecuta una consulta para recuperar datos de una tabla de Spark especificada.
spark-sql \ --packages org.apache.iceberg:iceberg-spark-runtime-ICEBERG_VERSION_NUMBER \ --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.CATALOG_NAME.type=hadoop \ --conf spark.sql.catalog.CATALOG_NAME.warehouse='BUCKET_PATH' \ # Query the table SELECT * FROM CATALOG_NAME.FOLDER_NAME;
Reemplaza lo siguiente:
- ICEBERG_VERSION_NUMBER: Es la versión actual del entorno de ejecución de Spark. Descarga la versión más reciente de Spark Releases.
- CATALOG_NAME: Es el catálogo para hacer referencia a tu tabla de Spark.
- BUCKET_PATH: Es la ruta de acceso al bucket que contiene los archivos de la tabla.
Por ejemplo,
gs://mybucket/ - FOLDER_NAME: Es la carpeta que contiene los archivos de la tabla. Por ejemplo,
myfolder.
Modifica tablas administradas de Iceberg
Para modificar una tabla de Spark, sigue los pasos que se muestran en Modifica esquemas de tablas.
Usa transacciones de varias instrucciones
Para obtener acceso a las transacciones de varias declaraciones para las tablas Iceberg administradas, completa el formulario de registro.
Usa la partición
Para obtener acceso al particionamiento de las tablas de Apache Iceberg, completa el formulario de registro.
Para particionar una tabla, especifica una columna de partición que se usará para segmentar la tabla. Se admiten los siguientes tipos de columnas para las tablas Iceberg administradas:
DATEDATETIMETIMESTAMP
La partición de una tabla en una columna DATE, DATETIME o TIMESTAMP se conoce como partición de columna de unidad de tiempo.
Puedes elegir si las particiones tienen un nivel de detalle por hora, día, mes o año.
Las tablas Iceberg administradas también admiten el agrupamiento en clústeres y la combinación de tablas agrupadas en clústeres y particionadas.
Limitaciones de la partición
- Se aplican todas las limitaciones de tabla particionada BigQuery.
- No se admiten tipos de columnas de partición que no sean
DATE,DATETIMEoTIMESTAMP. - No se admite la expiración de particiones.
- No se admite la evolución de particiones.
Crea una tabla de Spark particionada
Para crear una tabla de Spark particionada, sigue las instrucciones para crear una tabla de Spark estándar y, luego, incluye una de las siguientes opciones, según tu entorno:
- La cláusula
PARTITION BY - Las marcas
--time_partitioning_fieldy--time_partitioning_type - La propiedad
timePartitioning
Modifica y consulta tablas de Iceberg administradas particionadas
Las instrucciones y consultas del lenguaje de manipulación de datos (DML) de BigQuery para las tablas de Iceberg administradas particionadas son las mismas que para las tablas de Spark estándar. BigQuery automáticamente define el alcance del trabajo para las particiones correctas, de manera similar a la particionamiento oculto de Spark. Además, los datos nuevos que agregues a la tabla se particionarán automáticamente.
También puedes consultar tablas de Iceberg administradas particionadas con otros motores de la misma manera que las tablas de Iceberg administradas estándar. Para obtener la mejor experiencia, te recomendamos que habilites las instantáneas de metadatos.
Para mejorar la seguridad, la información de partición de las tablas Iceberg administradas se desacopla de la ruta de acceso a los datos y se administra por completo a través de la capa de metadatos.
Precios
Los precios de las tablas de Spark incluyen el almacenamiento, la optimización del almacenamiento, y las consultas y los trabajos.
Almacenamiento
Las tablas de Iceberg administradas almacenan todos los datos en Cloud Storage. Se te cobra por todos los datos almacenados, incluidos los datos históricos de las tablas. También se pueden aplicar los cargos de transferencia y el procesamiento de datos de Cloud Storage. Es posible que se eximan algunas tarifas de operaciones de Cloud Storage para las operaciones que se procesan a través de BigQuery o la API de BigQuery Storage. No hay tarifas de almacenamiento específicas de BigQuery. Para obtener más información, consulta los Precios de Cloud Storage.
Optimización del almacenamiento
Las tablas administradas de Iceberg realizan la administración automática de tablas, lo que incluye la compactación, el agrupamiento en clústeres, la recolección de elementos no utilizados y la generación o actualización de metadatos de BigQuery para optimizar el rendimiento de las consultas y reducir los costos de almacenamiento. El uso de recursos de procesamiento para la administración de tablas se factura en unidades de procesamiento de datos (DCU) a lo largo del tiempo, en incrementos por segundo. Para obtener más detalles, consulta los precios de las tablas de Apache Iceberg.
Las operaciones de exportación de datos que se realizan durante la transmisión a través de la API de Storage Write se incluyen en los precios de la API de Storage Write y no se cobran como mantenimiento en segundo plano. Para obtener más información, consulta Precios por transferencia de datos.
Para ver los registros y el uso de procesamiento de estas operaciones en segundo plano, consulta la vista INFORMATION_SCHEMA.JOBS. Para ver ejemplos de consultas, consulta lo siguiente:
Consultas y trabajos
Al igual que con las tablas de BigQuery, se te cobra por las consultas y los bytes leídos (por TiB) si usas los precios según demanda de BigQuery o el consumo de ranuras (por ranura-hora) si usas los precios de procesamiento de capacidad de BigQuery.
Los precios de BigQuery también se aplican a la API de BigQuery Storage Read y a la API de Storage Write.
Las operaciones de carga y exportación (como EXPORT METADATA) usan ranuras de pago por uso de la edición Enterprise. Esto difiere de las tablas de BigQuery, que no se cobran por estas operaciones. Si hay reservas PIPELINE con ranuras de Enterprise o Enterprise Plus disponibles, las operaciones de carga y exportación usan de preferencia estas ranuras de reserva.
Limitaciones
Las tablas administradas de Iceberg tienen las siguientes limitaciones:
- Las tablas Iceberg administradas no admiten operaciones de cambio de nombre ni declaraciones
ALTER TABLE RENAME TO.- Las tablas Iceberg administradas no admiten copias de tablas ni declaraciones
CREATE TABLE COPY.- Las tablas Iceberg administradas no admiten clones de tablas ni declaraciones
CREATE TABLE CLONE.- Las tablas Iceberg administradas no admiten instantáneas de tablas ni declaraciones
CREATE SNAPSHOT TABLE.- Las tablas Iceberg administradas no admiten el siguiente esquema de tabla:
- Las tablas Iceberg administradas no admiten instantáneas de tablas ni declaraciones
- Las tablas Iceberg administradas no admiten clones de tablas ni declaraciones
- Las tablas Iceberg administradas no admiten copias de tablas ni declaraciones
- Esquema vacío
- Esquema con tipos de datos
BIGNUMERIC,INTERVAL,JSON,RANGEoGEOGRAPHY. - Esquema con comparaciones de campos.
- Esquema con expresiones de valor predeterminado.
- Esquema con tipos de datos
- Las tablas Iceberg administradas no admiten los siguientes casos de evolución del esquema:
- Coerciones de tipo de
NUMERICaFLOAT - Coerciones de tipo de
INTaFLOAT - Agregar nuevos campos anidados a columnas
RECORDexistentes con instrucciones de DDL de SQL
- Coerciones de tipo de
- Las tablas de Iceberg administradas muestran un tamaño de almacenamiento de 0 bytes cuando la consola o las APIs las consultan.
- Las tablas Iceberg administradas no admiten vistas materializadas.
- Las tablas Iceberg administradas no admiten vistas autorizadas, pero sí el control de acceso a nivel de columna.
- Las tablas Iceberg administradas no admiten actualizaciones de captura de datos modificados (CDC).
- Las tablas Iceberg administradas no admiten la recuperación ante desastres administrada.
- Las tablas Iceberg administradas no admiten la seguridad a nivel de las filas.
- Las tablas Iceberg administradas no admiten ventanas de seguridad ante fallas.
- Las tablas Iceberg administradas no admiten trabajos de extracción.
- La vista
INFORMATION_SCHEMA.TABLE_STORAGEno incluye tablas de Spark. - Las tablas Iceberg administradas no se admiten como destinos de resultados de consultas. En su lugar, puedes usar la instrucción
CREATE TABLEcon el argumentoAS query_statementpara crear una tabla como destino del resultado de la consulta. CREATE OR REPLACEno admite reemplazar tablas estándar por tablas de Apache Iceberg ni tablas de Iceberg administradas por tablas estándar.- Las cargas por lotes y las sentencias
LOAD DATAsolo admiten la anexión de datos a tablas administradas de Iceberg existentes. - La carga por lotes y las sentencias
LOAD DATAno admiten actualizaciones de esquemas. TRUNCATE TABLEno admite tablas Iceberg administradas. Existen dos alternativas:CREATE OR REPLACE TABLE, con las mismas opciones de creación de tablas.DELETE FROMtablaWHEREverdadero
- La función con valor de tabla (TVF)
APPENDSno admite tablas Iceberg administradas. - Es posible que los metadatos de Spark no contengan datos que la API de Storage Write haya transmitido a BigQuery en los últimos 90 minutos.
- El acceso paginado basado en registros con
tabledata.listno admite tablas de Apache Iceberg. - Solo se ejecuta una declaración DML de mutación simultánea (
UPDATE,DELETEyMERGE) para cada tabla de Spark. Las declaraciones DML adicionales de mutación están en cola.