Tabelle BigQuery per Apache Iceberg
Per ricevere assistenza durante la versione di anteprima, invia un'email all'indirizzo 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 modificabili direttamente in BigQuery. Le tabelle esterne BigLake per Apache Iceberg sono tabelle di sola lettura generate da un altro motore di query, ad esempio Apache Spark, e possono essere sottoposte a query solo utilizzando BigQuery.
Le tabelle iceberg supportano le seguenti funzionalità:
- Mutazioni di tabelle che utilizzano data manipulation language (DML) di GoogleSQL.
- Elaborazione in batch unificata e streaming ad alto rendimento utilizzando l'API Storage Write tramite i connettori BigLake come Spark, Dataflow e altri motori.
- Evoluzione dello schema, che ti consente di aggiungere, eliminare e rinominare le colonne in base alle tue esigenze. Questa funzionalità ti consente inoltre di modificare il tipo di dati di una colonna esistente e la modalità della colonna. Per ulteriori informazioni, consulta Regole di conversione dei tipi.
- Ottimizzazione automatica dell'archiviazione, tra cui dimensionamento adattivo dei file, clustering automatico, garbage collection e ottimizzazione dei metadati.
- Sicurezza a livello di colonna e mascheramento dei dati.
Architettura
Le tabelle Iceberg offrono la praticità della gestione delle risorse BigQuery alle tabelle che si trovano nei tuoi bucket cloud. Le tabelle iceberg ti consentono di utilizzare BigQuery su queste tabelle senza spostare i dati dai bucket che controlli.
Il seguente diagramma mostra l'architettura delle tabelle gestite a un livello generale:
Questa gestione delle tabelle ha le seguenti implicazioni sul bucket:
- BigQuery crea nuovi file di dati nel bucket in risposta alle richieste di scrittura e alle ottimizzazioni dello spazio di archiviazione in background, ad esempio gli statement DML e lo 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 di BigQuery. Per ulteriori informazioni, consulta Fatturazione.
La creazione di una tabella Iceberg è simile alla creazione di tabelle BigQuery. Poiché archivia i dati in formati aperti su Cloud Storage, offre più opzioni per quanto riguarda:
- 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 il formato del file di 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
La modifica o l'aggiunta diretta di file al bucket al di fuori di BigQuery può comportare la perdita di dati o errori non recuperabili. La seguente tabella 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 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 un prefisso non vuoto. | Perdita di dati: i dati esistenti non vengono monitorati da BigQuery, pertanto questi file sono considerati non monitorati e vengono eliminati dalle procedure 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 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 è possibile eseguire il recupero self-service da questo punto. Contatta l'assistenza per ricevere assistenza per 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. |
Crea due tabelle BigQuery per Apache Iceberg negli stessi URI o in URI sovrapposti. | Perdita di dati: BigQuery non esegue il bridging di istanze URI identiche delle tabelle Iceberg. I processi di garbage collection in background per ogni tabella considereranno i file della tabella opposta come non monitorati ed li elimineranno, causando la perdita di dati. | Utilizza URI univoci per ogni tabella Iceberg. |
Fatturazione
Per le seguenti funzionalità viene addebitato l'importo in base ai prezzi pubblicati esistenti:
- Prezzi di Cloud Storage per tutti i dati archiviati nei bucket Cloud Storage, l'elaborazione dei dati eseguita da Cloud Storage e l'utilizzo della rete per la quantità di dati letti dal tuo bucket.
- Prezzi di BigQuery Compute per query, DML e ottimizzazione dello spazio di archiviazione in background (incluso il clustering, la coalescenza e garbage collection).
- 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 di lettura 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 i seguenti ruoli IAM:
-
Per creare tabelle Iceberg:
-
BigQuery Data Owner (
roles/bigquery.dataOwner
) nel tuo progetto -
Amministratore connessione BigQuery (
roles/bigquery.connectionAdmin
) nel tuo progetto
-
BigQuery Data Owner (
-
Per eseguire query sulle tabelle Iceberg:
-
Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) nel tuo progetto -
Utente BigQuery (
roles/bigquery.user
) nel tuo progetto
-
Visualizzatore dati BigQuery (
-
Affinché l'account di servizio di connessione possa leggere e scrivere dati in Cloud Storage:
-
Storage Object Admin (
roles/storage.objectAdmin
) nel bucket -
Storage Legacy Bucket Reader (
roles/storage.legacyBucketReader
) nel bucket
-
Storage Object Admin (
Per saperne di più sulla concessione dei ruoli, consulta Gestire 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 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
nel tuo progetto -
bigquery.tables.create
nel tuo progetto -
bigquery.tables.get
nel 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
nel 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 fino a quattro colonne. Devono essere colonne di primo livello non ripetute.
- CONNECTION_NAME: il nome della connessione. Ad esempio,
myproject.us.myconnection
. - STORAGE_URI: un URI Cloud Storage completamente qualificato.
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 fino a quattro colonne. Devono essere colonne di primo livello non ripetute.
- MANAGED_TABLE_NAME: il nome della tabella che stai creando.
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 URI Cloud Storage completamente qualificato.
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.
Importare i dati nella tabella Iceberg
Le sezioni seguenti descrivono come importare i dati da vari formati di tabelle 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 dei file Parquet, consulta Caricare i dati Parquet in una nuova tabella.
Per caricare rapidamente file Parquet a struttura piatta in una tabella Iceberg esistente, utilizza il
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
.
Caricamento standard dei dati da file di tipo flat
Le tabelle Iceberg utilizzano i job di caricamento BigQuery per caricare file esterni nelle tabelle Iceberg. Se hai già una tabella Iceberg, segui la guida all'interfaccia a riga di comando bq load
o la guida a SQL LOAD
per caricare i dati esterni. Dopo aver caricato i dati, i nuovi file Parquet vengono scritti
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 dello strumento di 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.
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
diload_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
diload_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 Hive
Puoi caricare file partizionati da Hive nelle tabelle Iceberg utilizzando i job di caricamento BigQuery standard. Per ulteriori informazioni, consulta 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 BigQuery Pub/Sub.
Esportare i dati dalle tabelle Iceberg
Le sezioni seguenti 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 saperne di più, consulta Esportazione di dati.
Leggere le tabelle Iceberg con i metadati Iceberg
Per leggere i dati dalle tabelle Iceberg in formato Iceberg:
Esporta i metadati nel formato Iceberg con l'istruzione SQL
EXPORT TABLE METADATA
.Configura e leggi i dati delle tabelle in Apache Spark con
HadoopCatalog
.Il seguente esempio configura l'ambiente per l'utilizzo di Spark SQL con Apache Iceberg ed 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 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 iceberg sono costituiti da tre componenti distinti:
Archiviazione
La tabella Iceberg archivia tutti i dati in Cloud Storage. Ti vengono addebitati tutti i dati memorizzati, 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, consulta la pagina 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 di pagamento a consumo della versione Enterprise
e non utilizzano le prenotazioni BACKGROUND
esistenti.
Le operazioni di esportazione dei dati che si verificano durante lo streaming tramite l'API BigQuery Storage Write sono incluse nei prezzi dell'API Storage Write e non vengono addebitate come 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 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 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 presentano le seguenti limitazioni:
- Le tabelle iceberg non supportano
operazioni di rinominazione o
istruzioni
ALTER TABLE RENAME TO
. - Le tabelle iceberg non supportano
copie di tabelle o
istruzioni
CREATE TABLE COPY
. - Le tabelle iceberg non supportano
i cloni di tabelle o
le istruzioni
CREATE TABLE CLONE
. - Le tabelle iceberg non supportano
gli snapshot della tabella o
le istruzioni
CREATE SNAPSHOT TABLE
. - Le tabelle iceberg non supportano lo schema di tabella seguente:
- Schema vuoto
- Schema con tipi di dati
INTERVAL
,JSON
,RANGE
oGEOGRAPHY
. - Schema con collation dei campi.
- Schema con espressioni di valore predefinito.
EXPORT METADATA
non supporta le tabelle contenenti tipi di datiBIGNUMERIC
oNUMERIC
con una precisione maggiore di 38 cifre.- Le tabelle iceberg non supportano i seguenti casi di evoluzione dello schema:
- Costrizioni di tipo da
NUMERIC
aFLOAT
- Costrizioni di tipo da
INT
aFLOAT
- Aggiunta di nuovi campi nidificati a colonne
RECORD
esistenti utilizzando istruzioni DDL SQL
- Costrizioni di tipo da
- 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 gli aggiornamenti di Change Data Capture (CDC).
- Quando importi i dati nelle tabelle Iceberg utilizzando l'API BigQuery Storage Write, devi prima disattivare la cache delle query.
- Le tabelle iceberg non supportano il disaster recovery gestito
- Le tabelle iceberg non supportano il partizionamento. Valuta la possibilità di utilizzare il clustering come alternativa.
- Le tabelle iceberg non supportano la sicurezza a livello di riga.
- Le tabelle iceberg non supportano il 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 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.- Il caricamento batch e le istruzione
LOAD DATA
supportano solo l'aggiunta di dati alle tabelle Iceberg esistenti. - Il caricamento collettivo e le istruzione
LOAD DATA
non supportano gli aggiornamenti dello schema. TRUNCATE TABLE
non supporta le tabelle Iceberg. Sono disponibili due alternative:CREATE OR REPLACE TABLE
, utilizzando le stesse opzioni di creazione delle tabelle.DELETE FROM
tabellaWHERE
true
- La
funzione con valore di tabella (FVT)
APPENDS
non supporta le tabelle Iceberg. - 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 i file con nomi di colonna flessibili.