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à:
- Mutazioni di tabelle che utilizzano il linguaggio di manipolazione dei dati (DML) di GoogleSQL.
- Elaborazione batch unificata e streaming ad alto rendimento utilizzando l'API Storage Write tramite i connettori BigLake per Spark, Dataflow e molti 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 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 dello spazio di archiviazione, tra cui il ridimensionamento adattivo dei file, clustering automatico, garbage collection e ottimizzazione dei metadati.
- *Sicurezza a livello di riga, sicurezza a livello di colonna, e mascheramento dei dati.
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:
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 creare tabelle iceberg:
-
Proprietario dati BigQuery (
roles/bigquery.dataOwner
) del tuo progetto -
Amministratore connessione BigQuery (
roles/bigquery.connectionAdmin
) del tuo progetto
-
Proprietario dati BigQuery (
-
Per eseguire query sulle tabelle Iceberg:
-
Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) nel tuo progetto -
Utente BigQuery (
roles/bigquery.user
) del tuo progetto
-
Visualizzatore dati BigQuery (
-
Affinché l'account di servizio di connessione possa leggere e scrivere dati in Cloud Storage:
-
Storage Admin (
roles/storage.admin
) sul bucket -
Lettore oggetti legacy Storage (
roles/storage.legacyObjectReader
) nel bucket -
Autore bucket legacy Storage (
roles/storage.legacyBucketWriter
) sul 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
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
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 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:
- 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:GEOGRAPHY
tipi di dati- Tipi di dati
BIGNUMERIC
oNUMERIC
con una precisione superiore a 38 cifre.
- Le tabelle iceberg non supportano i seguenti casi di evoluzione dello schema:
- Coercizioni di tipo da
NUMERIC
aFLOAT
- Coercizioni di tipo da
INT
aFLOAT
- Aggiunta di nuovi campi nidificati a colonne
RECORD
esistenti utilizzando istruzioni DDL SQL
- Coercizioni di tipo da
- 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.