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. Tavoli Iceberg offrono la stessa esperienza completamente gestita delle tabelle BigQuery, ma nei bucket di archiviazione di proprietà dell'organizzazione utilizzando Parquet per l'interoperabilità Formati tabella aperta Iceberg.

Le tabelle iceberg supportano le seguenti funzionalità:

Architettura

Le tabelle Iceberg offrono la comodità delle risorse BigQuery alle tabelle che risiedono nei tuoi bucket cloud. Le tabelle Iceberg consentono di utilizzare BigQuery su 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.

Questa gestione delle tabelle ha le seguenti implicazioni sul 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 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 in 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, per le seguenti operazioni:

  • Specifica la connessione alla risorsa cloud con WITH CONNECTION per configurare le credenziali di connessione per consentire a BigLake di accedere a Cloud Storage.
  • Specifica del formato file dell'archiviazione dei dati con file_format. PARQUET è supportato in Anteprima.
  • Specifica il formato della tabella dei metadati open source con table_format. ICEBERG è supportato in anteprima.

Best practice

È fondamentale modificare le tabelle Iceberg esclusivamente tramite in BigQuery. Eventuali modifiche dirette o aggiunte al bucket che provochino la perdita di dati o errori irreversibili. La tabella seguente illustra i possibili scenari:

Operazione Conseguenze Prevenzione
Aggiungi nuovi file al bucket al di fuori di BigQuery. Perdita di dati: nuovi file o oggetti aggiunti all'esterno di BigQuery non viene monitorato da BigQuery. I file non monitorati vengono eliminati dalla garbage collection in background i processi di machine learning. 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 anche se limiti le autorizzazioni di scrittura degli strumenti esterni sui bucket contenenti Tavoli con Iceberg.
Crea una nuova tabella Iceberg in un prefisso non vuoto. Perdita di dati: i dati esistenti non vengono monitorati da BigQuery, pertanto questi file sono considerati non monitorati e eliminati dai processi di garbage collection in background. Crea nuove tabelle Iceberg solo in prefissi vuoti.
Modificare o sostituire i file di dati delle tabelle Iceberg. Perdita di dati:in caso di modifiche o sostituzioni esterne, la tabella non supera un controllo di coerenza e diventa illeggibile. Le query sulla tabella non vanno a buon fine.
Non è possibile eseguire il recupero in modalità self-service da questo punto. Contatto assistenza per assistenza con il recupero dei dati.
Modificare i 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.
Creare due tabelle BigQuery per Apache Iceberg sugli URI uguali o sovrapposti. Perdita di dati: BigQuery non esegue il bridging di istanze URI identiche delle 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

I costi per le seguenti funzionalità si basano sui prezzi pubblicati esistenti:

  • 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.
  • I costi di calcolo per caricamenti batch e estrazione vengono addebitati utilizzando SKU on demand o prenotazioni (slot).
  • Prezzi dell'API Storage Write per la lettura da Spark tramite l'API Read.
  • Prezzi dell'API Storage Write per lo streaming.

Flussi di lavoro delle tabelle 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 aver configurato una connessione a una risorsa cloud a un bucket di archiviazione. La connessione richiede autorizzazioni di scrittura sul bucket di archiviazione, come specificato nella sezione Ruoli richiesti di seguito.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per consentire a BigQuery di gestire le tabelle nel tuo progetto, chiedi all'amministratore di concederti 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 del tuo progetto
  • bigquery.readsessions.create nel tuo progetto
  • bigquery.tables.create del tuo progetto
  • bigquery.tables.get del tuo progetto
  • bigquery.tables.getData nel tuo progetto
  • storage.buckets.get nel tuo progetto
  • storage.objects.create nel tuo progetto
  • storage.objects.delete nel tuo progetto
  • storage.objects.get del tuo progetto
  • storage.objects.list nel tuo progetto

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

Creare 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: 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.
  • 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 nome completo URI Cloud Storage. Ad esempio: gs://mybucket/table.
  • COLUMN_NAME: il nome della colonna.
  • 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.
  • 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 al 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. Sono supportati anche i caratteri jolly. Ad esempio: gs://mybucket/table.
  • COLUMN_NAME: il nome della colonna.
  • DATA_TYPE: tipo di dati delle informazioni contenuto 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 dati esistenti File Parquet, invece di leggere i contenuti e riscriverli come nuovi . Il caricamento rapido utilizza meno capacità di calcolo rispetto a un normale caricamento di file. I file Parquet devono essere compatibili con Specifica di Apache Iceberg e disporre di statistiche di colonna complete. 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.

Per caricare rapidamente i file flat Parquet in una tabella Iceberg esistente, utilizza il metodo 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 stai caricando i dati.
  • PATH_TO_SOURCE: un nome completo URI Cloud Storage oppure un elenco di URI separati da virgole. Caratteri jolly sono supportate. 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 hai già delle tabelle 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 specifici di strumenti per i caricamenti batch nelle tabelle gestite:

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 URI Cloud Storage completo o 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, 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 Iceberg esistente.
  • STORAGE_URI: un URI Cloud Storage completo o 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 flussi di dati in tabelle Iceberg utilizzando un Abbonamento BigQuery per Pub/Sub

Esportare i dati dalle tabelle Iceberg

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

Esporta i dati in formati flat

Per esportare una tabella Iceberg in formato piatto, utilizza il metodo Dichiarazione EXPORT DATA e seleziona un formato di destinazione. Per saperne di più, consulta Esportazione di dati.

Esporta 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 attuale di Apache Spark Tempo di esecuzione Iceberg. Scarica l'ultima versione da Release di Spark.
  • CATALOG_NAME: il catalogo a cui fare riferimento per la tabella Iceberg.
  • BUCKET_PATH: il percorso del bucket contenente i file delle tabelle. Ad esempio, gs://mybucket/.
  • FOLDER_NAME: la cartella contenente i file della tabella. Ad esempio, myfolder.

Modificare le tabelle Iceberg

Per modificare una tabella Iceberg, segui la procedura descritta in Modifica degli schemi delle tabelle.

Prezzi

I prezzi delle tabelle di Iceberg sono costituiti da tre componenti distinti:

Archiviazione

La tabella Iceberg archivia tutti i dati storage_name. 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 l'unione di file e il ricoinvolgimento. Queste operazioni di ottimizzazione utilizzano Slot con pagamento a consumo della versione Enterprise, e non utilizzare 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 StorageWrite né per la manutenzione in background. Per ulteriori informazioni, consulta Prezzi dell'importazione dati.

Query e job

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

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

Le operazioni di caricamento ed esportazione (ad esempio EXPORT METADATA) utilizzano Slot con pagamento a consumo della versione Enterprise. Ciò è diverso dalle tabelle BigQuery, per le quali non vengono addebitate queste operazioni. Se sono disponibili prenotazioni PIPELINE con Enterprise o Enterprise Plus, le operazioni di caricamento ed esportazione utilizzeranno 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:
    • GEOGRAPHY tipi di dati
    • Tipi di dati BIGNUMERIC o NUMERIC con una precisione superiore a 38 cifre.
  • Le tabelle 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 DDL SQL
  • Le tabelle Iceberg visualizzano una dimensione di archiviazione di 0 byte quando viene interrogato dal nella console Cloud o alle API.
  • Le tabelle Iceberg non supportano viste materializzate.
  • Le tabelle Iceberg non supportano transazioni con più dichiarazioni.
  • Le tabelle Iceberg non supportano le tabelle copie, cloni o snapshot.
  • 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 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 finestre di sicurezza per gli errori.
  • Le tabelle iceberg non supportano i job di estrazione.
  • La visualizzazione INFORMATION_SCHEMA.TABLE_STORAGE non include le 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 le tabelle Iceberg o delle tabelle Iceberg con le tabelle 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 sovrascrittura destinazione.
  • TRUNCATE TABLE non supporta le tabelle Iceberg. Esistono due metodi alternative:
    • CREATE OR REPLACE TABLE, utilizzando le stesse opzioni di creazione delle tabelle.
    • Tabella DELETE FROM WHERE true
  • La APPENDS funzione con valore di tabella (TVF) non supporta le tabelle Iceberg.
  • Il caricamento collettivo 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.