Tabelle gestite Apache Iceberg

Le tabelle gestite Apache Iceberg (in precedenza tabelle BigLake per Apache Iceberg in BigQuery) forniscono la base per la creazione di lakehouse in formato aperto su Google Cloud. Le tabelle Iceberg gestite offrono la stessa esperienza completamente gestita delle tabelle BigQuery standard, ma archiviano i dati in bucket di archiviazione di proprietà del cliente. Le tabelle gestite da Iceberg supportano il formato di tabella Iceberg aperto per una migliore interoperabilità con i motori di computing open source e di terze parti su una singola copia dei dati.

Le tabelle gestite di Iceberg supportano le seguenti funzionalità:

Architettura

Le tabelle gestite Iceberg offrono la comodità della gestione delle risorse BigQuery alle tabelle che si trovano nei tuoi bucket cloud. Puoi utilizzare BigQuery e i motori di calcolo open source su queste tabelle senza spostare i dati dai bucket che controlli. Prima di iniziare a utilizzare le tabelle gestite da Iceberg, devi configurare un bucket Cloud Storage.

L'utilizzo delle tabelle gestite da Iceberg ha le seguenti implicazioni sul tuo bucket:

  • BigQuery crea nuovi file di dati nel bucket in risposta alle richieste di scrittura e alle ottimizzazioni dello spazio di archiviazione in background, come le istruzioni DML e lo streaming.
  • La compattazione e il clustering automatici vengono eseguiti sui file di dati nel bucket. Dopo la scadenza della finestra di viaggio nel tempo, i file di dati vengono sottoposti a garbage collection. Tuttavia, se la tabella viene eliminata, i file di dati associati non vengono sottoposti a garbage collection. Per saperne di più, consulta Ottimizzazione dello spazio di archiviazione.

La creazione di una tabella gestita Iceberg è simile alla creazione di tabelle BigQuery. Poiché archivia i dati in formati aperti su Cloud Storage, devi:

  • Specifica la connessione alle risorse Cloud con WITH CONNECTION per configurare le credenziali di connessione per BigQuery per accedere a Cloud Storage.
  • Specifica il formato file del datastore come PARQUET con l'istruzione file_format = PARQUET.
  • Specifica il formato della tabella dei metadati open source come ICEBERG con l'istruzione table_format = ICEBERG.

Best practice

La modifica o l'aggiunta diretta di file al bucket al di fuori di BigQuery può comportare la perdita di dati o errori irreversibili. La tabella seguente descrive i possibili scenari:

Operazione Conseguenze Prevenzione
Aggiungi nuovi file al bucket al di fuori di BigQuery. Perdita di dati: i nuovi file o oggetti aggiunti al di fuori di BigQuery non vengono monitorati da BigQuery. I file non monitorati vengono eliminati dai processi di garbage collection in background. Aggiungi dati esclusivamente tramite BigQuery. In questo modo, BigQuery può monitorare i file ed evitare che vengano sottoposti a garbage collection.
Per evitare aggiunte accidentali e perdite di dati, ti consigliamo anche di limitare le autorizzazioni in scrittura degli strumenti esterni sui bucket contenenti tabelle gestite da Iceberg.
Crea una nuova tabella gestita di Iceberg in un prefisso non vuoto. Perdita di dati: i dati esistenti non vengono monitorati da BigQuery, pertanto questi file sono considerati non monitorati ed eliminati dai processi di garbage collection in background. Crea nuove tabelle gestite Iceberg solo in prefissi vuoti.
Modificare o sostituire i file di dati delle tabelle gestite Iceberg. Perdita di dati: in caso di modifica o sostituzione esterna, la tabella non supera un controllo di coerenza e diventa illeggibile. Le query sulla tabella non vanno a buon fine.
Non esiste un modo self-service per eseguire il recupero da questo punto. Contatta l'assistenza per ricevere aiuto con il recupero dati.
Modifica i dati esclusivamente tramite BigQuery. In questo modo, BigQuery può monitorare i file ed evitare che vengano sottoposti a garbage collection.
Per evitare aggiunte accidentali e perdite di dati, ti consigliamo inoltre di limitare le autorizzazioni in scrittura degli strumenti esterni sui bucket contenenti tabelle gestite da Iceberg.
Crea due tabelle gestite Iceberg sugli stessi URI o su URI sovrapposti. Perdita di dati: BigQuery non collega istanze URI identiche di tabelle gestite da Iceberg. I processi di garbage collection in background per ogni tabella considereranno i file della tabella opposta come non monitorati e li elimineranno, causando la perdita di dati. Utilizza URI univoci per ogni tabella gestita da Iceberg.

Best practice per la configurazione dei bucket Cloud Storage

La configurazione del bucket Cloud Storage e la sua connessione con BigQuery hanno un impatto diretto su prestazioni, costi, integrità dei dati, sicurezza e governance delle tabelle gestite di Iceberg. Di seguito sono riportate le best practice per questa configurazione:

  • Seleziona un nome che indichi chiaramente che il bucket è destinato solo alle tabelle gestite da Iceberg.

  • Scegli bucket Cloud Storage a regione singola collocati nella stessa regione del tuo set di dati BigQuery. Questo coordinamento migliora le prestazioni e riduce i costi evitando le tariffe per il trasferimento di dati.

  • Per impostazione predefinita, Cloud Storage archivia i dati nella classe di archiviazione Standard Storage, che offre prestazioni sufficienti. Per ottimizzare i costi di archiviazione dei dati, puoi attivare Autoclass per gestire automaticamente le transizioni delle classi di archiviazione. Autoclass inizia con la classe Standard Storage e sposta gli oggetti a cui non si accede in classi di archiviazione ad accesso progressivamente meno frequente per ridurre i costi di archiviazione. Quando l'oggetto viene letto di nuovo, viene spostato nuovamente nella classe Standard.

  • Abilita l'accesso uniforme a livello di bucket e la prevenzione dell'accesso pubblico.

  • Verifica che i ruoli richiesti siano assegnati agli utenti e ai service account corretti.

  • Per evitare l'eliminazione o il danneggiamento accidentale dei dati nel bucket Cloud Storage, limita le autorizzazioni di scrittura ed eliminazione per la maggior parte degli utenti della tua organizzazione. Puoi farlo impostando una policy di autorizzazione del bucket con condizioni che negano le richieste PUT e DELETE per tutti gli utenti, ad eccezione di quelli specificati.

  • Applica chiavi di crittografia gestite da Google o gestite dal cliente per una protezione aggiuntiva dei dati sensibili.

  • Abilita l'audit logging per la trasparenza operativa, la risoluzione dei problemi e il monitoraggio dell'accesso ai dati.

  • Mantieni la politica di cancellazione temporanea predefinita (conservazione di 7 giorni) per proteggerti da eliminazioni accidentali. Tuttavia, se scopri che i dati sono stati eliminati, contatta l'assistenza anziché ripristinare gli oggetti manualmente, poiché gli oggetti aggiunti o modificati al di fuori di BigQuery non vengono monitorati dai metadati di BigQuery.

  • Il dimensionamento adattivo dei file, il clustering automatico e la garbage collection vengono attivati automaticamente e aiutano a ottimizzare le prestazioni e i costi dei file.

  • Evita le seguenti funzionalità di Cloud Storage, in quanto non sono supportate per le tabelle gestite da Iceberg:

Puoi implementare queste best practice creando il bucket con il seguente comando:

gcloud storage buckets create gs://BUCKET_NAME \
    --project=PROJECT_ID \
    --location=LOCATION \
    --enable-autoclass \
    --public-access-prevention \
    --uniform-bucket-level-access

Sostituisci quanto segue:

  • BUCKET_NAME: il nome del nuovo bucket
  • PROJECT_ID: l'ID del progetto
  • LOCATION: la località del nuovo bucket

Workflow delle tabelle gestite Iceberg

Le sezioni seguenti descrivono come creare, caricare, gestire ed eseguire query sulle tabelle gestite di Iceberg.

Prima di iniziare

Prima di creare e utilizzare le tabelle gestite di Iceberg, assicurati di aver configurato una connessione alle risorse Cloud a un bucket di archiviazione. La connessione deve disporre delle autorizzazioni in scrittura sul bucket di archiviazione, come specificato nella sezione Ruoli richiesti di seguito. Per saperne di più sui ruoli e sulle autorizzazioni richiesti per le connessioni, consulta Gestisci le connessioni.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per consentire a BigQuery di gestire le tabelle nel tuo progetto, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per consentire a BigQuery di gestire le tabelle nel tuo progetto. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per consentire a BigQuery di gestire le tabelle nel tuo progetto, sono necessarie le seguenti autorizzazioni:

  • Tutti:
    • bigquery.connections.delegate sul tuo progetto
    • bigquery.jobs.create sul tuo progetto
    • bigquery.readsessions.create sul tuo progetto
    • bigquery.tables.create sul tuo progetto
    • bigquery.tables.get sul tuo progetto
    • bigquery.tables.getData sul tuo progetto
    • storage.buckets.get sul tuo bucket
    • storage.objects.create sul tuo bucket
    • storage.objects.delete sul tuo bucket
    • storage.objects.get sul tuo bucket
    • storage.objects.list sul tuo bucket

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Crea tabelle gestite di Iceberg

Per creare una tabella gestita da Iceberg, seleziona uno dei seguenti metodi:

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');

Sostituisci quanto segue:

  • PROJECT_ID: il progetto contenente il set di dati. Se non è definito, il comando presuppone il progetto predefinito.
  • DATASET_ID: un set di dati esistente.
  • TABLE_NAME: il nome della tabella che stai creando.
  • DATA_TYPE: il tipo di dati delle informazioni contenute nella colonna.
  • CLUSTER_COLUMN_LIST (facoltativo): un elenco separato da virgole contenente fino a quattro colonne. Devono essere colonne di primo livello non ripetute.
  • CONNECTION_NAME: il nome della connessione. Ad esempio, myproject.us.myconnection. Per utilizzare una connessione predefinita, specifica DEFAULT anziché il nome della connessione.
  • STORAGE_URI: un URI Cloud Storage completo. Ad esempio 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

Sostituisci quanto segue:

  • PROJECT_ID: il progetto contenente il set di dati. Se non è definito, il comando presuppone il progetto predefinito.
  • CONNECTION_NAME: il nome della connessione. Ad esempio, myproject.us.myconnection.
  • STORAGE_URI: un URI Cloud Storage completo. Ad esempio gs://mybucket/table.
  • COLUMN_NAME: il nome della colonna.
  • DATA_TYPE: il tipo di dati delle informazioni contenute nella colonna.
  • CLUSTER_COLUMN_LIST (facoltativo): un elenco separato da virgole contenente fino a quattro colonne. Devono essere colonne di primo livello non ripetute.
  • DATASET_ID: l'ID di un set di dati esistente.
  • MANAGED_TABLE_NAME: il nome della tabella che stai creando.

API

Chiama il metodo tables.insert con una risorsa tabella definita, simile alla seguente:

{
"tableReference": {
  "tableId": "TABLE_NAME"
},
"biglakeConfiguration": {
  "connectionId": "CONNECTION_NAME",
  "fileFormat": "PARQUET",
  "tableFormat": "ICEBERG",
  "storageUri": "STORAGE_URI"
},
"schema": {
  "fields": [
    {
      "name": "COLUMN_NAME",
      "type": "DATA_TYPE"
    }
    [, ...]
  ]
}
}

Sostituisci quanto segue:

  • TABLE_NAME: il nome della tabella che stai creando.
  • CONNECTION_NAME: il nome della connessione. Ad esempio, myproject.us.myconnection.
  • STORAGE_URI: un URI Cloud Storage completo. Sono supportati anche i caratteri jolly. Ad esempio: gs://mybucket/table.
  • COLUMN_NAME: il nome della colonna.
  • DATA_TYPE: il tipo di dati delle informazioni contenute nella colonna.

Importa i dati nelle tabelle gestite di Iceberg

Le sezioni seguenti descrivono come importare dati da vari formati di tabella nelle tabelle gestite da Iceberg.

Caricamento standard dei dati da flat file

Le tabelle gestite Iceberg utilizzano i job di caricamento di BigQuery per caricare file esterni nelle tabelle gestite Iceberg. Se hai già una tabella gestita Iceberg, segui la guida all'interfaccia a riga di comando bq load o la guida SQL LOAD per caricare dati esterni. Dopo il caricamento dei dati, i nuovi file Parquet vengono scritti nella cartella STORAGE_URI/data.

Se le istruzioni precedenti vengono utilizzate senza una tabella Iceberg gestita esistente, viene creata una tabella BigQuery.

Di seguito sono riportati esempi specifici per ogni strumento di caricamenti in batch nelle tabelle gestite di Iceberg:

SQL

LOAD DATA INTO MANAGED_TABLE_NAME
FROM FILES (
uris=['STORAGE_URI'],
format='FILE_FORMAT');

Sostituisci quanto segue:

  • MANAGED_TABLE_NAME: il nome di una tabella gestita Iceberg esistente.
  • STORAGE_URI: un URI Cloud Storage completo o un elenco separato da virgole di URI. Sono supportati anche i caratteri jolly. Ad esempio: gs://mybucket/table.
  • FILE_FORMAT: il formato della tabella di origine. Per i formati supportati, consulta la riga format di load_option_list.

bq

bq load \
  --source_format=FILE_FORMAT \
  MANAGED_TABLE \
  STORAGE_URI

Sostituisci quanto segue:

  • FILE_FORMAT: il formato della tabella di origine. Per i formati supportati, consulta la riga format di load_option_list.
  • MANAGED_TABLE_NAME: il nome di una tabella gestita Iceberg esistente.
  • STORAGE_URI: un URI Cloud Storage completo o un elenco separato da virgole di URI. Sono supportati anche i caratteri jolly. Ad esempio: gs://mybucket/table.

Caricamento standard da file partizionati Apache Hive

Puoi caricare i file partizionati Hive nelle tabelle gestite di Iceberg utilizzando i job di caricamento BigQuery standard. Per saperne di più, consulta Carica dati partizionati esternamente.

Carica i dati in streaming da Pub/Sub

Puoi caricare i dati in modalità flusso nelle tabelle gestite di Iceberg utilizzando una sottoscrizione BigQuery Pub/Sub.

Carica i dati in streaming utilizzando le query continue

Puoi elaborare e scrivere continuamente dati in streaming da BigQuery nelle tabelle gestite di Iceberg utilizzando una query continua di BigQuery con l'istruzione DML INSERT. In questo modo puoi eseguire ETL inverso, arricchimento dei dati e filtro in tempo reale nel tuo lakehouse in formato aperto.

Prima di eseguire la query continua, assicurati che la tabella gestita Iceberg di destinazione esista e che l'utente o il account di servizio disponga delle autorizzazioni richieste sulla tabella, sulla relativa connessione alle risorse Google Cloud e sul bucket Cloud Storage sottostante.

Per istruzioni sulla configurazione ed esempi SQL, consulta Scrivi dati in tabelle gestite di BigQuery o Apache Iceberg.

Esporta i dati dalle tabelle gestite di Iceberg

Le sezioni seguenti descrivono come esportare i dati dalle tabelle gestite di Iceberg in vari formati di tabella.

Esporta i dati in formati flat

Per esportare una tabella Iceberg gestita in un formato piatto, utilizza l'istruzione EXPORT DATA e seleziona un formato di destinazione. Per saperne di più, consulta Esportazione dei dati.

Crea snapshot dei metadati delle tabelle gestite da Iceberg

Per creare uno snapshot dei metadati della tabella gestita da Iceberg, segui questi passaggi:

  1. Esporta i metadati nel formato Iceberg V2 con l'istruzione SQL EXPORT TABLE METADATA.

  2. (Facoltativo) Pianifica l'aggiornamento dello snapshot dei metadati Iceberg. Per aggiornare uno snapshot dei metadati Iceberg in base a un intervallo di tempo impostato, utilizza una query pianificata.

  3. (Facoltativo) Attiva l'aggiornamento automatico dei metadati per il tuo progetto per aggiornare automaticamente lo snapshot dei metadati della tabella Iceberg a ogni mutazione della tabella. Per attivare l'aggiornamento automatico dei metadati, contatta bigquery-tables-for-apache-iceberg-help@google.com. I costi di EXPORT METADATA vengono applicati a ogni operazione di aggiornamento.

L'esempio seguente crea una query pianificata denominata My Scheduled Snapshot Refresh Query utilizzando l'istruzione DDL EXPORT TABLE METADATA FROM mydataset.test. L'istruzione DDL viene eseguita ogni 24 ore.

bq query \
    --use_legacy_sql=false \
    --display_name='My Scheduled Snapshot Refresh Query' \
    --schedule='every 24 hours' \
    'EXPORT TABLE METADATA FROM mydataset.test'

Visualizza lo snapshot dei metadati della tabella gestita Iceberg

Dopo aver aggiornato lo snapshot dei metadati della tabella gestita Iceberg, puoi trovare lo snapshot nell'URI Cloud Storage in cui è stata creata originariamente la tabella gestita Iceberg. La cartella /data contiene gli shard di dati dei file Parquet, mentre la cartella /metadata contiene lo snapshot dei metadati della tabella gestita da Iceberg.

SELECT
  table_name,
  REGEXP_EXTRACT(ddl, r"storage_uri\s*=\s*\"([^\"]+)\"") AS storage_uri
FROM
  `mydataset`.INFORMATION_SCHEMA.TABLES;

Tieni presente che mydataset e table_name sono segnaposto per il set di dati e la tabella effettivi.

Leggi le tabelle gestite di Iceberg con Spark

L'esempio seguente configura l'ambiente per l'utilizzo di Spark SQL con Spark, quindi esegue una query per recuperare i dati da una tabella gestita Iceberg specificata.

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;

Sostituisci quanto segue:

  • ICEBERG_VERSION_NUMBER: la versione attuale del runtime. Scarica l'ultima versione dalle release di Iceberg.
  • CATALOG_NAME: il catalogo a cui fare riferimento per la tabella gestita Iceberg.
  • BUCKET_PATH: il percorso del bucket contenente i file della tabella. Ad esempio, gs://mybucket/.
  • FOLDER_NAME: la cartella contenente i file della tabella. Ad esempio, myfolder.

Modifica le tabelle gestite di Iceberg

Per modificare una tabella gestita da Iceberg, segui i passaggi descritti in Modifica degli schemi delle tabelle.

Utilizza le transazioni con più istruzioni

Puoi utilizzare le transazioni con più istruzioni con le tabelle gestite da Iceberg nello stesso modo in cui le utilizzi con le tabelle BigQuery standard. Le transazioni con più istruzioni sono di uso comune per eseguire mutazioni su più tabelle contemporaneamente o per eseguire mutazioni su una singola tabella in più fasi. Le transazioni con più istruzioni garantiscono le proprietà ACID e supportano l'isolamento degli snapshot.

Si applicano le limitazioni standard per le transazioni con più istruzioni.

Utilizza il partizionamento

Puoi utilizzare il partizionamento delle tabelle con le tabelle gestite di Iceberg in modo simile a come fai con le tabelle BigQuery standard. Puoi partizionare una tabella specificando una colonna di partizione, che viene utilizzata per segmentare la tabella. I seguenti tipi di colonne sono supportati per le tabelle gestite Iceberg:

  • DATE
  • DATETIME
  • TIMESTAMP

Il partizionamento di una tabella in base a una colonna DATE, DATETIME o TIMESTAMP è noto come partizionamento delle colonne per unità di tempo. Sei tu a scegliere se le partizioni hanno una granularità oraria, giornaliera, mensile o annuale.

Le tabelle gestite da Iceberg supportano anche il clustering e la combinazione di tabelle raggruppate e partizionate.

Limitazioni del partizionamento

Crea una tabella Iceberg gestita partizionata

Per creare una tabella Iceberg gestita partizionata, segui le istruzioni per creare una tabella Iceberg gestita standard e includi una delle seguenti opzioni, a seconda dell'ambiente:

Puoi impostare e aggiornare la scadenza della partizione nello stesso modo in cui faresti con le tabelle BigQuery standard. Le partizioni scadute vengono sottoposte a garbage collection dopo la finestra di tempo di spostamento cronologico. Se aggiungi dati a una partizione scaduta, i dati scadono immediatamente.

Modifica ed esegui query su tabelle Iceberg gestite partizionate

Le istruzioni e le query del data manipulation language (DML) di BigQuery per le tabelle gestite Iceberg partizionate sono le stesse delle tabelle gestite Iceberg standard. BigQuery definisce automaticamente l'ambito del job per le partizioni corrette, in modo simile al partizionamento nascosto di Iceberg. Inoltre, tutti i nuovi dati aggiunti alla tabella vengono partizionati automaticamente.

Puoi anche eseguire query su tabelle Iceberg gestite partizionate con altri motori nello stesso modo delle tabelle Iceberg gestite standard. Per un'esperienza ottimale, ti consigliamo di attivare gli snapshot dei metadati.

Per una maggiore sicurezza, le informazioni di partizionamento per le tabelle gestite da Iceberg sono separate dal percorso dei dati e sono gestite interamente dal livello dei metadati.

Prezzi

I prezzi delle tabelle gestite Iceberg si basano su archiviazione, ottimizzazione dello spazio di archiviazione, query e job.

Archiviazione

Le tabelle gestite Iceberg archiviano tutti i dati in Cloud Storage. Ti verranno addebitati tutti i dati archiviati, inclusi i dati storici della tabella. Potrebbero essere applicati anche i costi di trattamento e trasferimento dei dati di Cloud Storage. Alcune tariffe per le operazioni di Cloud Storage potrebbero essere esentate per le operazioni elaborate tramite BigQuery o l'API BigQuery Storage. Non sono previste tariffe di archiviazione specifiche per BigQuery. Per maggiori informazioni, consulta Prezzi di Cloud Storage.

Ottimizzazione archiviazione

Le tabelle gestite di Iceberg eseguono la gestione automatica delle tabelle, tra cui compattazione, clustering, garbage collection e generazione/aggiornamento dei metadati di BigQuery per ottimizzare le prestazioni delle query e ridurre i costi di archiviazione. L'utilizzo delle risorse di computing per la gestione delle tabelle viene fatturato in unità di calcolo dei dati (DCU) nel tempo, con incrementi al secondo. Per maggiori dettagli, consulta i prezzi delle tabelle gestite di Iceberg.

Le operazioni di esportazione dei dati che si verificano durante lo streaming tramite l'API Storage Write sono incluse nei prezzi dell'API Storage Write e non vengono addebitate come manutenzione in background. Per saperne di più, consulta Prezzi dell'acquisizione dei dati.

Per visualizzare i log e l'utilizzo del computing per queste operazioni in background, esegui una query sulla vista INFORMATION_SCHEMA.JOBS. Per esempi di query, consulta quanto segue:

Query e job

Analogamente alle tabelle BigQuery, ti vengono addebitati i costi per le query e i byte letti (per TiB) se utilizzi i prezzi on demand di BigQuery o il consumo di slot (per ora di slot) se utilizzi i prezzi di calcolo della capacità di BigQuery.

I prezzi di BigQuery si applicano anche all'API BigQuery Storage Read e all'API Storage Write.

Le operazioni di caricamento ed esportazione (come EXPORT METADATA) utilizzano gli slot con pagamento a consumo di Enterprise Edition. Questo è diverso dalle tabelle BigQuery, per le quali non vengono addebitati costi per queste operazioni. Se sono disponibili prenotazioni PIPELINE con slot Enterprise o Enterprise Plus, le operazioni di caricamento ed esportazione utilizzano preferibilmente questi slot di prenotazione.

Limitazioni

Le tabelle gestite da Iceberg presentano le seguenti limitazioni:

  • Le tabelle gestite di Iceberg non supportano le operazioni di ridenominazione o le istruzioni ALTER TABLE RENAME TO.
  • Le tabelle gestite da Iceberg non supportano le copie di tabelle o le istruzioni CREATE TABLE COPY.
  • Le tabelle gestite di Iceberg non supportano i cloni di tabelle o le istruzioni CREATE TABLE CLONE.
  • Le tabelle gestite di Iceberg non supportano gli snapshot delle tabelle o le istruzioni CREATE SNAPSHOT TABLE.
  • Le tabelle Iceberg Managed non supportano il seguente schema di tabella:
  • Le tabelle gestite Iceberg non supportano i seguenti casi di evoluzione dello schema:
    • Coercizioni di tipo da NUMERIC a FLOAT
    • Coercizioni di tipo da INT a FLOAT
    • Aggiunta di nuovi campi nidificati a colonne RECORD esistenti utilizzando istruzioni SQL DDL
  • Le tabelle gestite da Iceberg mostrano una dimensione di archiviazione di 0 byte quando vengono interrogate dalla console o dalle API.
  • Le tabelle gestite di Iceberg non supportano le viste materializzate.
  • Le tabelle gestite di Iceberg non supportano le viste autorizzate, ma è supportato il controllo dell'accesso a livello di colonna.
  • Le tabelle gestite da Iceberg non supportano il disaster recovery gestito
  • Le tabelle gestite Iceberg non supportano la sicurezza a livello di riga.
  • Le tabelle gestite Iceberg non supportano le finestre di sicurezza.
  • Le tabelle gestite Iceberg non supportano i job di estrazione.
  • La vista INFORMATION_SCHEMA.TABLE_STORAGE non include tabelle gestite da Iceberg.
  • Le tabelle gestite Iceberg non sono supportate come destinazioni dei risultati delle query. In alternativa, puoi utilizzare l'istruzione CREATE TABLE con l'argomento AS query_statement per creare una tabella come destinazione del risultato della query.
  • CREATE OR REPLACE non supporta la sostituzione di tabelle standard con tabelle gestite da Iceberg o di tabelle gestite da Iceberg con tabelle standard.
  • Solo il caricamento in batch e le istruzioni LOAD DATA supportano l'aggiunta di dati alle tabelle gestite Iceberg esistenti.
  • Il caricamento in batch e le istruzioni LOAD DATA non supportano gli aggiornamenti dello schema.
  • TRUNCATE TABLE non supporta le tabelle gestite Iceberg. Esistono due alternative:
    • CREATE OR REPLACE TABLE, utilizzando le stesse opzioni di creazione della tabella.
    • DELETE FROM tabella WHERE true
  • La funzione con valori di tabella (TVF) APPENDS non supporta le tabelle gestite da Iceberg.
  • I metadati Iceberg potrebbero non contenere dati che sono stati trasmessi in streaming a BigQuery dall'API Storage Write negli ultimi 90 minuti.
  • L'accesso impaginato basato su record utilizzando tabledata.list non supporta le tabelle gestite Iceberg.
  • Per ogni tabella Iceberg gestita viene eseguita una sola istruzione DML di mutazione simultanea (UPDATE, DELETE e MERGE). Le istruzioni DML di mutazione aggiuntive vengono messe in coda.