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à:
- Mutazioni delle tabelle con data manipulation language di GoogleSQL (DML).
- 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 consente di aggiungere, rilasciare e rinominare le colonne in base alle esigenze per soddisfare le tue esigenze. Questa funzionalità ti consente inoltre modificare il tipo di dati di una colonna esistente e modalità a colonne. Per ulteriori informazioni, vedi digita regole di conversione.
- Ottimizzazione automatica dello spazio di archiviazione, tra cui il ridimensionamento 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 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:
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 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
) del tuo progetto -
Utente BigQuery (
roles/bigquery.user
) del tuo progetto
-
Visualizzatore dati BigQuery (
-
Per consentire all'account di servizio di connessione di leggere e scrivere dati in Cloud Storage:
-
Storage Admin (
roles/storage.admin
) sul bucket -
Lettore oggetti legacy Storage (
roles/storage.legacyObjectReader
) nel bucket -
Storage Legacy Bucket Writer (
roles/storage.legacyBucketWriter
) nel bucket -
Amministratore oggetti Storage (
roles/storage.objectAdmin
) nel bucket
-
Storage Admin (
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
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 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:
- Schema vuoto
- Schema con tipi di dati
INTERVAL
,JSON
,RANGE
oGEOGRAPHY
. - Schema con collation dei campi.
- Schema con espressioni di valori predefiniti.
EXPORT METADATA
non supporta le tabelle contenenti quanto segue:- Tipi di dati di
GEOGRAPHY
- Tipi di dati
BIGNUMERIC
oNUMERIC
con una precisione superiore a 38 luoghi.
- Tipi di dati di
- Le tabelle Iceberg non supportano il seguente schema
di evoluzione del settore:
- Coercizioni di tipo da
NUMERIC
aFLOAT
- Coercizioni di tipo da
INT
aFLOAT
- Aggiunta di nuovi campi nidificati a colonne
RECORD
esistenti utilizzando il DDL SQL Estratti conto
- Coercizioni 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 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.