Tabelle BigQuery per Iceberg Apache

Per ricevere assistenza durante l'anteprima, invia un'email bigquery-tables-for-apache-iceberg-help@google.com.

Le tabelle BigQuery per Apache Iceberg (di seguito tabelle Iceberg) forniscono la base per creare lakehouse in formato aperto su Google Cloud. Le tabelle Iceberg offrono la stessa esperienza completamente gestita delle tabelle BigQuery, ma archiviano i dati in bucket di archiviazione di proprietà del cliente utilizzando Parquet per essere interoperabili con i formati delle tabelle aperte Iceberg.

Le tabelle BigQuery per Apache Iceberg sono diverse dalle tabelle esterne BigLake per Apache Iceberg perché solo le tabelle BigQuery per Apache Iceberg sono scrivibili. Tabelle esterne BigLake per Apache Iceberg sono tabelle di sola lettura generate da un altro motore di query, come su Apache Spark e l'esecuzione di query può avvenire solo utilizzando BigQuery.

Le tabelle iceberg supportano le seguenti funzionalità:

Architettura

Le tabelle Iceberg offrono la comodità Risorsa BigQuery alle tabelle che risiedono nei tuoi bucket cloud. Le tabelle Iceberg consentono di utilizzare BigQuery queste tabelle senza spostare dai bucket controllati da te.

Il seguente diagramma mostra l'architettura delle tabelle gestite a un livello generale: Diagramma dell'architettura delle tabelle BigQuery per Iceberg.

La gestione di questa tabella ha le seguenti implicazioni sul tuo bucket:

  • BigQuery crea nuovi file di dati nel bucket in risposta a richieste di scrittura e ottimizzazioni dell'archiviazione in background, come le istruzioni DML e streaming.
  • Quando elimini una tabella gestita in BigQuery, BigQuery non elimina e i file di dati associati. Devi confermare l'eliminazione eliminando manualmente i file e gli eventuali metadati delle tabelle esportati dal bucket.
  • Le tabelle iceberg non comportano costi di archiviazione di BigQuery. Per ulteriori informazioni, consulta Fatturazione.

La creazione di una tabella Iceberg è simile alla seguente: creazione di tabelle BigQuery. Poiché archivia i dati in formati aperti su Cloud Storage, offre più opzioni per quanto riguarda:

  • Specifica Connessione alle risorse cloud con WITH CONNECTION per configurare le credenziali di connessione BigLake per accedere a Cloud Storage.
  • Specifica il formato del file di archiviazione dei dati con file_format. PARQUET è supportato in anteprima.
  • Specificare il formato delle tabelle di metadati open source con table_format. ICEBERG è supportato in anteprima.

Best practice

Modificare o aggiungere direttamente file al bucket all'esterno di BigQuery può causare perdita di dati o errori irreversibili. Nella tabella seguente sono descritti 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 raccolta del garbage.
Per evitare aggiunte accidentali e perdita di dati, ti consigliamo inoltre di limitare le autorizzazioni di scrittura degli strumenti esterni ai bucket contenenti le tabelle Iceberg.
Crea una nuova tabella Iceberg in una tabella non vuota . Perdita di dati: i dati esistenti non vengono monitorati da BigQuery, pertanto questi file sono considerati non monitorati e vengono eliminati dalle procedure di raccolta dei rifiuti in background. Crea solo nuove tabelle Iceberg vuote prefissi.
Modificare o sostituire i file di dati delle tabelle Iceberg. Perdita di dati: in caso di modifica o sostituzione esterna, la tabella non supera un controllo di coerenza e diventa illeggibile. Query della tabella.
A questo punto non è possibile recuperare autonomamente l'accesso. Contatta l'assistenza per ricevere assistenza per il recupero dei dati.
Modificare i dati esclusivamente tramite BigQuery. Ciò consente BigQuery monitora i file e ne impedisce l'esecuzione garbage collection.
Per evitare aggiunte accidentali e perdita di dati, ti consigliamo inoltre di limitare le autorizzazioni di scrittura degli strumenti esterni ai bucket contenenti le tabelle Iceberg.
Creare due tabelle BigQuery per Apache Iceberg sugli URI uguali o sovrapposti. Perdita di dati: BigQuery non esegue il bridge istanze URI identiche di tabelle Iceberg. garbage collection in background per ogni tabella prenderà in considerazione i file della tabella opposta non monitorati ed eliminarli, causando la perdita di dati. Utilizza URI univoci per ogni tabella Iceberg.

Fatturazione

Per le seguenti funzionalità viene addebitato il prezzo pubblicato esistente:

  • Prezzi di Cloud Storage per per tutti i dati archiviati nei bucket Cloud Storage, l'elaborazione dei dati viene eseguita Cloud Storage e l'utilizzo della rete per la quantità di dati letti del bucket.
  • Prezzi di BigQuery Compute per query, DML e ottimizzazione dello spazio di archiviazione in background (incluso il clustering, la coalescenza e la raccolta dei rifiuti).
    • Gli addebiti relativi all'utilizzo delle prenotazioni (slot) seguono i prezzi esistenti degli slot.
    • Gli addebiti che utilizzano gli SKU (codice identificativo dell'articolo) on demand rispettano i prezzi on demand esistenti. Per ulteriori informazioni, consulta Costi di BigLake.
  • Caricamento in batch e Estrai Le risorse di computing vengono addebitate tramite SKU on demand o prenotazioni (slot).
  • Prezzi dell'API Storage Scrivi per che legge da Spark tramite l'API Read.
  • Prezzi dell'API Storage Scrivi per lo streaming.

Flussi di lavoro tabella Iceberg

Le sezioni seguenti descrivono come creare, caricare, gestire e eseguire query sulle tabelle gestite.

Prima di iniziare

Prima di creare e utilizzare le tabelle Iceberg, assicurati di hai configurato connessione alle risorse cloud in un bucket Storage. La connessione deve disporre delle autorizzazioni di scrittura sullo spazio di archiviazione come specificato nella seguente sezione Ruoli obbligatori.

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 Gestire l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti le autorizzazioni necessarie per consentire a BigQuery di gestire le tabelle nel tuo progetto. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

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

  • bigquery.connections.delegate nel tuo progetto
  • bigquery.jobs.create nel tuo progetto
  • bigquery.readsessions.create del tuo progetto
  • bigquery.tables.create del tuo progetto
  • bigquery.tables.get del tuo progetto
  • bigquery.tables.getData del tuo progetto
  • storage.buckets.get del tuo progetto
  • storage.objects.create nel tuo progetto
  • storage.objects.delete nel tuo progetto
  • storage.objects.get nel tuo progetto
  • storage.objects.list del tuo progetto

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

Creazione tabelle Iceberg

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

SQL

CREATE TABLE [PROJECT_NAME.]DATASET_NAME.TABLE_NAME (
COLUMN DATA_TYPE[, ...]
)
CLUSTER BY CLUSTER_COLUMN_LIST
WITH CONNECTION CONNECTION_NAME
OPTIONS (
file_format = 'PARQUET',
table_format = 'ICEBERG',
storage_uri = 'STORAGE_URI');

Sostituisci quanto segue:

  • PROJECT_NAME: il progetto contenente il set di dati. Se non è definito, il comando presuppone il progetto predefinito.
  • DATASET_NAME: un set di dati esistente.
  • TABLE_NAME: il nome della tabella che stai creando.
  • DATA_TYPE: tipo di dati delle informazioni contenuto nella colonna.
  • CLUSTER_COLUMN_LIST: un elenco separato da virgole contenente al massimo e quattro colonne. Devono essere colonne di primo livello non ripetute.
  • CONNECTION_NAME: il nome della connessione. Ad esempio, myproject.us.myconnection.
  • STORAGE_URI: un nome completo URI Cloud Storage. Ad esempio: gs://mybucket/table.

bq

bq --project_id=PROJECT_NAME mk \
    --file_format=PARQUET \
    --table_format=ICEBERG \
    --connection_id=CONNECTION_NAME \
    --storage_uri=STORAGE_URI \
    --schema=COLUMN_NAME:DATA_TYPE[, ...] \
    --clustering_fields=CLUSTER_COLUMN_LIST \
    MANAGED_TABLE_NAME

Sostituisci quanto segue:

  • PROJECT_NAME: 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 completamente qualificato. 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: un elenco separato da virgole contenente al massimo e quattro colonne. Devono essere colonne di primo livello non ripetute.
  • MANAGED_TABLE_NAME: il nome della tabella che stai è in fase di creazione.

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 nome completo URI Cloud Storage. Caratteri jolly sono supportate. Ad esempio, gs://mybucket/table.
  • COLUMN_NAME: il nome della colonna.
  • DATA_TYPE: il tipo di dati delle informazioni contenute nella colonna.

Importare i dati nella tabella Iceberg

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

Caricamento rapido da file Parquet

L'opzione copy_files_only ti consente di caricare i dati più velocemente copiando i file Parquet esistenti, anziché leggere i contenuti e riscriverli come nuovi file. Il caricamento rapido utilizza meno capacità di calcolo rispetto a un normale caricamento di file. I file Parquet devono essere compatibili con la specifica Apache Iceberg e avere statistiche complete delle colonne. Il caricamento rapido non rileva valori non validi (ad esempio timestamp fuori intervallo) nei file perché i file non vengono letti e sottoposti a nuovo trattamento. Per ulteriori informazioni sul caricamento di file Parquet, vedi Caricamento di dati Parquet in una nuova tabella.

Caricamento rapido di file Parquet piatti in un Iceberg esistente utilizza la classe Comando bq load:

bq load \
    --copy_files_only \
    --source_format=PARQUET \
    DATASET_NAME.TABLE_NAME \
    PATH_TO_SOURCE

Sostituisci quanto segue:

  • DATASET_NAME: il set di dati contenente la tabella Iceberg.
  • TABLE_NAME: il nome della tabella Iceberg in cui carichi i dati.
  • PATH_TO_SOURCE: un URI Cloud Storage completo o un elenco di URI separati da virgole. Sono supportati anche i caratteri jolly. Ad esempio: gs://mybucket/mydata*.parquet.

Dati di caricamento standard da file flat

Le tabelle Iceberg utilizzano i job di caricamento BigQuery per caricare file esterni nelle tabelle Iceberg. Se disponi di un account Tabella Iceberg, segui La guida all'interfaccia a riga di comando di bq load o il Guida SQL LOAD per caricare dati esterni. Dopo aver caricato i dati, vengono scritti nuovi file Parquet nella cartella STORAGE_URI/data.

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

Di seguito sono riportati esempi di caricamenti batch specifici per lo strumento in tabelle:

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 Iceberg esistente.
  • STORAGE_URI: un nome completo URI Cloud Storage oppure un elenco di URI separati da virgole. Caratteri jolly sono supportate. Ad esempio, gs://mybucket/table.
  • FILE_FORMAT: il formato della tabella di origine. Per i formati supportati, vedi 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 Iceberg esistente.
  • STORAGE_URI: un nome completo URI Cloud Storage oppure un elenco di URI separati da virgole. Sono supportati anche i caratteri jolly. Ad esempio, gs://mybucket/table.

Caricamento standard da file partizionati in Hive

Puoi caricare file partizionati per Hive in tabelle Iceberg utilizzando job di caricamento standard di BigQuery. Per ulteriori informazioni, vedi Caricamento di dati partizionati esternamente.

Caricare i flussi di dati da Pub/Sub

Puoi caricare i dati in streaming nelle tabelle Iceberg utilizzando un abbonamento Pub/Sub BigQuery.

Esportare i dati dalle tabelle Iceberg

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

Esportare i dati in formati semplici

Per esportare una tabella Iceberg in un formato piatto, utilizza l'istruzione EXPORT DATA e seleziona un formato di destinazione. Per ulteriori informazioni, vedi Esportazione dei dati.

Esportare i metadati come tabella Iceberg

Per esportare i metadati di una tabella Iceberg come tabella Iceberg, seleziona uno dei seguenti metodi:

bq

Utilizza l'istruzione EXPORT TABLE METADATA.

L'esempio seguente esporta i metadati delle tabelle in formato Iceberg nella cartella metadata in storage_uri per la tabella:

bq query \
  --nouse_legacy_sql \
  --nouse_cache "EXPORT TABLE METADATA FROM TABLE_NAME"

Spark

In Apache Spark, puoi esportare i metadati delle tabelle con HadoopCatalog.

L'esempio seguente configura il tuo ambiente per utilizzare Spark SQL con Apache Iceberg, crea un catalogo per gestire tabelle Iceberg, quindi esegue una query per recuperare i dati da una tabella 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' \

# Queries the table
spark-sql> SELECT * FROM CATALOG_NAME.FOLDER_NAME;

Sostituisci quanto segue:

  • ICEBERG_VERSION_NUMBER: la versione corrente del runtime Apache Spark Iceberg. Scarica la versione più recente da Spark Releases.
  • CATALOG_NAME: il catalogo per fare riferimento alla tabella Iceberg.
  • BUCKET_PATH: il percorso del bucket contenente e tabelle. Ad esempio, gs://mybucket/.
  • FOLDER_NAME: la cartella contenente i file della tabella. Ad esempio, myfolder.

Modificare tabelle Iceberg

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

Prezzi

I prezzi delle tabelle iceberg sono costituiti da tre componenti distinti:

Archiviazione

La tabella Iceberg archivia tutti i dati in Cloud Storage. Ti vengono addebitati tutti i dati archiviati, inclusi i dati storici delle tabelle. Potrebbero essere applicati anche costi per l'elaborazione dei dati e i trasferimenti di Cloud Storage, a seconda dei casi. Non sono previste tariffe di archiviazione specifiche per BigQuery. Per maggiori informazioni le informazioni, vedi Prezzi di Cloud Storage.

Ottimizzazione dello spazio di archiviazione

Le tabelle Iceberg richiedono operazioni di ottimizzazione dello spazio di archiviazione, come la coalescenza dei file e riclustering. Queste operazioni di ottimizzazione utilizzano slot di pagamento a consumo di Enterprise Edition, e non utilizzano le prenotazioni BACKGROUND esistenti.

Le operazioni di esportazione dati che vengono eseguite durante il flusso di dati Le API BigQuery StorageWrite sono incluse nei prezzi dell'API Storage Writer né per la manutenzione in background. Per ulteriori informazioni, vedi Prezzi dell'importazione dati.

Query e job

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

I prezzi di BigQuery si applicano anche API BigQuery Storage Read e ai API BigQuery Storage Scrivi.

Le operazioni di caricamento ed esportazione (ad esempio EXPORT METADATA) utilizzano Slot con pagamento a consumo della versione Enterprise. Sono diverse dalle tabelle BigQuery, che non vengono addebitate queste operazioni. Se PIPELINE prenota con Enterprise o Enterprise Plus di slot machine sono disponibili, le operazioni di caricamento ed esportazione utilizzano preferenzialmente questi slot di prenotazione.

Limitazioni

Le tabelle Iceberg hanno le seguenti limitazioni:

  • Le tabelle Iceberg non supportano le operazioni di ridenominazione.
  • Le tabelle Iceberg non supportano il seguente schema di tabella:
  • EXPORT METADATA non supporta le tabelle contenenti quanto segue:
    • Tipi di dati di GEOGRAPHY
    • Tipi di dati BIGNUMERIC o NUMERIC con una precisione superiore a 38 luoghi.
  • Le tabelle Iceberg non supportano il seguente schema di evoluzione del settore:
    • Coercizioni di tipo da NUMERIC a FLOAT
    • Coercizioni di tipo da INT a FLOAT
    • Aggiunta di nuovi campi nidificati a colonne RECORD esistenti utilizzando il DDL SQL Estratti conto
  • Le tabelle iceberg mostrano una dimensione dello spazio di archiviazione pari a 0 byte quando vengono sottoposte a query dalla console o dalle API.
  • Le tabelle iceberg non supportano le viste materializzate.
  • Le tabelle iceberg non supportano le transazioni con più istruzioni.
  • Le tabelle Iceberg non supportano le copie, i cloni o gli snapshot delle tabelle.
  • Le tabelle Iceberg non supportano CDC (Change Data Capture) aggiornamenti.
  • Le tabelle Iceberg non supportano il ripristino di emergenza gestito
  • Le tabelle iceberg non supportano il partizionamento. Prendi in considerazione il clustering come alternativa.
  • Le tabelle iceberg non supportano la sicurezza a livello di riga.
  • Le tabelle Iceberg non supportano viaggio nel tempo.
  • Le tabelle iceberg non supportano le finestre di sicurezza.
  • Le tabelle iceberg non supportano i job di estrazione.
  • La visualizzazione INFORMATION_SCHEMA.TABLE_STORAGE non include tabelle Iceberg.
  • Le tabelle Iceberg non sono supportate come destinazioni dei risultati delle query.
  • CREATE OR REPLACE non supporta la sostituzione delle tabelle standard con Tavoli Iceberg o tavoli Iceberg con tavoli standard.
  • Le istruzione CREATE TABLE COPY non supportano le tabelle Iceberg.
  • Le istruzione ALTER TABLE RENAME TO non supportano le tabelle Iceberg.
  • LOAD DATA OVERWRITE non supporta le tabelle Iceberg come destinazione per l'overwriting.
  • TRUNCATE TABLE non supporta le tabelle Iceberg. Sono disponibili due alternative:
    • CREATE OR REPLACE TABLE, utilizzando le stesse opzioni di creazione della tabella.
    • Tabella DELETE FROM WHERE true
  • La APPENDS funzione con valore di tabella (TVF) non supporta le tabelle Iceberg.
  • Caricamento in batch nelle tabelle Iceberg non supporta:
    • Aggiunta di colonne a tabelle esistenti.
    • Allentamento delle modalità o dei tipi di colonna.
    • Creazione di nuove tabelle Iceberg.
    • Sovrascrittura di una tabella (operazione nota anche come writeDisposition WRITE_TRUNCATE).
  • Le esportazioni di Iceberg in Apache Spark non contengono i dati sottoposti a streaming di recente nello spazio di archiviazione ottimizzato per la scrittura.
  • Il caricamento rapido non supporta file con nomi delle colonne flessibili.