Eseguire query su formati di tabelle aperte con manifest
Questo documento descrive come utilizzare i file manifest per eseguire query sui dati archiviati in formati di tabella aperti come Apache Hudi e Delta Lake.
Alcuni formati di tabelle aperte, come Hudi e Delta Lake, esportano il loro stato attuale come uno o più file manifest. Un file manifest contiene un elenco di file di dati che formano tabelle. Con il supporto del manifest in BigQuery, puoi eseguire query e caricare i dati archiviati in formati di tabelle aperte.
Prima di iniziare
Enable the BigQuery Connection, BigQuery Reservation, and BigLake APIs.
Per creare tabelle BigLake, puoi: esegui i comandi Spark utilizzando uno dei seguenti metodi:
Crea un cluster Dataproc. Per eseguire query sulle tabelle Hudi, imposta il campo
--optional-components
suHUDI
. Per eseguire query sulle tabelle Delta, imposta--optional-components
suPresto
.Utilizza una stored procedure per Spark in BigQuery. Per farlo, segui questi passaggi:
Per archiviare il file manifest in Cloud Storage, crea un bucket Cloud Storage. Tu connettiti al tuo bucket Cloud Storage per accedere al file manifest. Per farlo, segui questi passaggi:
Ruoli obbligatori
Per eseguire query sulle tabelle BigLake in base ai dati di Hudi e Delta Lake, assicurati di disporre dei seguenti ruoli:
- Utente connessione BigQuery (
roles/bigquery.connectionUser
) - Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) - Utente BigQuery (
roles/bigquery.user
)
Puoi anche eseguire query sulle tabelle esterne Hudi. Tuttavia, ti consigliamo di eseguire l'upgrade della tabella esterna a BigLake. Per eseguire query su tabelle esterne Hudi, assicurati di avere ruoli:
- Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) - Utente BigQuery (
roles/bigquery.user
) - Visualizzatore oggetti Storage (
roles/storage.objectViewer
)
In base alle tue autorizzazioni, puoi concediti questi ruoli o chiedi all'amministratore per concederteli. Per ulteriori informazioni sulla concessione dei ruoli, consulta Visualizzazione dei ruoli assegnabili nelle risorse.
Per visualizzare le autorizzazioni esatte necessarie per eseguire query Per le tabelle BigLake, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
bigquery.connections.use
bigquery.jobs.create
bigquery.readsessions.create
(obbligatorio solo se leggi i dati con l'API BigQuery Storage Read)bigquery.tables.get
bigquery.tables.getData
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Esegui query sui carichi di lavoro Hudi
Per eseguire query sui dati Hudi, segui questi passaggi:
- Crea una tabella esterna basata su Dati Hudi.
- Esegui l'upgrade della tabella esterna a BigLake.
Creazione di tabelle esterne Hudi
Quando sincronizzi le tabelle utilizzando lo strumento di sincronizzazione per Hudi e
BigQuery, attiva il flag use-bq-manifest-file
per eseguire la transizione
all'approccio del file manifest. Questo flag esporta anche un file manifest in un formato supportato da BigQuery e lo utilizza per creare una tabella esterna con il nome specificato nel parametro --table
.
Per creare una tabella esterna Hudi, segui questi passaggi:
Per creare una tabella esterna Hudi: invia un'offerta di lavoro a un modello esistente di un cluster Dataproc. Quando crei Connettore Hudi-BigQuery, attiva il flag
use-bq-manifest-file
per passare all'approccio basato su file manifest. Questo flag esporta un file manifest in un formato supportato da BigQuery e lo utilizza per creare una tabella esterna con il nome specificato nel parametro--table
.spark-submit \ --master yarn \ --packages com.google.cloud:google-cloud-bigquery:2.10.4 \ --class org.apache.hudi.gcp.bigquery.BigQuerySyncTool \ JAR \ --project-id PROJECT_ID \ --dataset-name DATASET \ --dataset-location LOCATION \ --table TABLE \ --source-uri URI \ --source-uri-prefix URI_PREFIX \ --base-path BASE_PATH \ --partitioned-by PARTITION_BY \ --use-bq-manifest-file
Sostituisci quanto segue:
JAR
: se utilizzi il connettore Hudi-BigQuery, specificahudi-gcp-bundle-0.14.0.jar
. Se utilizzi il componente Hudi in Dataproc 2.1, specifica/usr/lib/hudi/tools/bq-sync-tool/hudi-gcp-bundle-0.12.3.1.jar
PROJECT_ID
: l'ID progetto in cui vuoi crea la tabella Hudi BigLakeDATASET
: il set di dati in cui vuoi creare la tabella Hudi BigLakeLOCATION
: la posizione in cui vuoi creare la tabella Hudi BigLakeTABLE
: il nome della tabella che vuoi creareSe stai eseguendo la transizione dalla versione precedente del connettore Hudi-BigQuery (0.13.0 e versioni precedenti) che ha creato visualizzazioni nei file manifest, assicurati di utilizzare lo stesso nome della tabella, in quanto ti consente di mantenere il codice della pipeline a valle esistente.
URI
: l'URI Cloud Storage che hai creato per archiviare il file manifest HudiQuesto URI punta alla partizione di primo livello; assicurati di includere di partizione. Ad esempio,
gs://mybucket/hudi/mydataset/EventDate=*
URI_PREFIX
: il prefisso per Cloud Storage Percorso URI, di solito è il percorso delle tabelle HudiBASE_PATH
: il percorso di base per Hudi tabelleAd esempio,
gs://mybucket/hudi/mydataset/
PARTITION_BY
: il valore della partizioneAd esempio,
EventDate
Per ulteriori informazioni sulla configurazione del connettore, consulta Connettore Hudi-BigQuery.
Per impostare controlli granulari appropriati o per accelerare il rendimento attivando la memorizzazione nella cache dei metadati, consulta Eseguire l'upgrade delle tabelle BigLake.
Esegui query sui carichi di lavoro Delta
Le tabelle Delta sono ora supportate in modo nativo. Ti consigliamo di creare tabelle Delta BigLake per i carichi di lavoro Delta. Le tabelle BigLake Delta Lake supportano tabelle Delta Lake più avanzate, incluse quelle con vettori per la rimappatura delle colonne e l'eliminazione. Inoltre, le tabelle Delta BigLake leggono direttamente l'ultimo snapshot, quindi gli aggiornamenti sono disponibili immediatamente.
Per eseguire una query sui carichi di lavoro Delta, segui questi passaggi:
- Genera un file manifest.
- Crea una tabella BigLake in base al file manifest.
- Imposta controlli granulari appropriati o accelera le prestazioni attivando la memorizzazione nella cache dei metadati. Per farlo, consulta Eseguire l'upgrade delle tabelle BigLake.
Generare un file manifest
BigQuery supporta il file manifest in un
SymLinkTextInputFormat
, che è un
elenco di URI delimitato da una nuova riga. Per ulteriori informazioni sulla generazione di un file manifest, consulta Configurare l'integrazione di Presto con Delta Lake ed eseguire query sulle tabelle Delta.
Per generare un file manifest, invia un job a un cluster Dataproc esistente:
SQL
Utilizzando Spark, esegui questo comando su una tabella delta nella località path-to-delta-table
:
GENERATE symlink_format_manifest FOR TABLE delta.`<path-to-delta-table>`
Scala
Utilizzando Spark, esegui questo comando su una tabella delta nella località path-to-delta-table
:
val deltaTable = DeltaTable.forPath(<path-to-delta-table>) deltaTable.generate("symlink_format_manifest")
Java
Utilizzando Spark, esegui questo comando su una tabella delta nella località path-to-delta-table
:
DeltaTable deltaTable = DeltaTable.forPath(<path-to-delta-table>); deltaTable.generate("symlink_format_manifest");
Python
Utilizzando Spark, esegui questo comando su una tabella delta nella località path-to-delta-table
:
deltaTable = DeltaTable.forPath(<path-to-delta-table>) deltaTable.generate("symlink_format_manifest")
Creazione di tabelle Delta BigLake
Per creare una tabella Delta BigLake, utilizza il metodo
CREATE EXTERNAL TABLE
con la
Campo file_set_spec_type
impostato su NEW_LINE_DELIMITED_MANIFEST
:
Vai alla pagina BigQuery.
Nell'editor query, esegui l'istruzione
CREATE EXTERNAL TABLE
:CREATE EXTERNAL TABLE PROJECT_ID.DATASET_NAME.TABLE_NAME WITH PARTITION COLUMNS( `PARTITION_COLUMN PARTITION_COLUMN_TYPE`,) WITH CONNECTION `PROJECT_IDREGION.CONNECTION_NAME` OPTIONS ( format = "DATA_FORMAT", uris = ["URI"], file_set_spec_type = 'NEW_LINE_DELIMITED_MANIFEST', hive_partition_uri_prefix = "PATH_TO_DELTA_TABLE" max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
Sostituisci quanto segue:
DATASET_NAME
: il nome del set di dati che hai creatoTABLE_NAME
: il nome che vuoi assegnare a questa tabellaREGION
: la posizione in cui si trova la connessione (ad esempious-east1
)CONNECTION_NAME
: il nome della connessione che creatoDATA_FORMAT
: uno dei formati supportati (ad esempioPARQUET
)URI
: il percorso del file manifest (ad esempio,gs://mybucket/path
)PATH_TO_DELTA_TABLE
: un prefisso comune per tutti gli URI di origine prima dell'inizio della codifica della chiave di partizioneSTALENESS_INTERVAL
: specifica se I metadati memorizzati nella cache vengono utilizzati dalle operazioni su BigLake e il grado di attualità dei metadati memorizzati nella cache per per utilizzarlo. Per ulteriori informazioni sulle considerazioni relative alla memorizzazione nella cache dei metadati, consulta Memorizzazione nella cache dei metadati per il rendimento.Per disattivare la memorizzazione nella cache dei metadati, specifica 0. Questa è l'impostazione predefinita.
Per attivare la memorizzazione nella cache dei metadati, specifica un valore di letterale intervallo compreso tra 30 minuti e 7 giorni. Ad esempio, specifica
INTERVAL 4 HOUR
per un intervallo di inattività di 4 ore. Con questo valore, le operazioni sulla tabella utilizzano i metadati memorizzati nella cache se è stato aggiornato nelle ultime 4 ore. Se i metadati memorizzati nella cache precedente, l'operazione recupera i metadati Delta Lake.CACHE_MODE
: specifica se i metadati la cache viene aggiornata automaticamente o manualmente. Per ulteriori informazioni sulle considerazioni sulla memorizzazione nella cache dei metadati, Memorizzazione nella cache dei metadati per migliorare le prestazioni.Imposta su
AUTOMATIC
per aggiornare la cache dei metadati a un intervallo definito dal sistema, in genere tra 30 e 60 minuti.Imposta
MANUAL
se vuoi aggiornare la cache dei metadati in base a una pianificazione che hai stabilito. In questo caso, puoi chiamare la procedura di sistema diBQ.REFRESH_EXTERNAL_METADATA_CACHE
per aggiornare la cache.Devi impostare
CACHE_MODE
seSTALENESS_INTERVAL
è impostato su un valore maggiore di 0.
Esempio:
CREATE EXTERNAL TABLE mydataset.mytable WITH CONNECTION `us-east1.myconnection` OPTIONS ( format="PARQUET", uris=["gs://mybucket/path/partitionpath=*"], file_set_spec_type = 'NEW_LINE_DELIMITED_MANIFEST' hive_partition_uri_prefix = "gs://mybucket/path/" max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
Eseguire l'upgrade delle tabelle BigLake
Puoi anche accelerare le prestazioni dei tuoi carichi di lavoro sfruttando la memorizzazione nella cache dei metadati e le viste materializzate. Se vuoi utilizzare la memorizzazione nella cache dei metadati, puoi specificare le impostazioni contemporaneamente. Per ottenere dettagli della tabella come il formato e l'URI di origine, consulta Recuperare informazioni sulla tabella.
Per aggiornare una tabella esterna in una tabella BigLake o aggiornare un BigLake esistente, seleziona una delle seguenti opzioni:
SQL
Utilizza l'istruzione DDL CREATE OR REPLACE EXTERNAL TABLE
per aggiornare una tabella:
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, inserisci la seguente istruzione:
CREATE OR REPLACE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH CONNECTION `REGION.CONNECTION_ID` OPTIONS( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
Sostituisci quanto segue:
PROJECT_ID
: il nome del progetto che contiene la tabellaDATASET
: il nome del set di dati che contiene la tabellaEXTERNAL_TABLE_NAME
: il nome del tavolaREGION
: la regione che contiene connessioneCONNECTION_ID
: il nome della connessione da utilizzareTABLE_FORMAT
: il formato utilizzato dalla tabellaNon puoi modificare questa impostazione durante l'aggiornamento della tabella.
BUCKET_PATH
: il percorso del bucket Cloud Storage contenente i dati della tabella esterna, nel formato['gs://bucket_name/[folder_name/]file_name']
.Puoi selezionare più file dal bucket specificando un carattere jolly asterisco (
*
) nel percorso. Ad esempio,['gs://mybucket/file_name*']
. Per maggiori informazioni le informazioni, vedi Supporto dei caratteri jolly per gli URI Cloud Storage.Puoi specificare più bucket per l'opzione
uris
fornendo più percorsi.Gli esempi seguenti mostrano valori
uris
validi:['gs://bucket/path1/myfile.csv']
['gs://bucket/path1/*.csv']
['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
Quando specifichi valori
uris
che hanno come target più file, tutti questi file devono condividere uno schema compatibile.Per ulteriori informazioni sull'utilizzo degli URI Cloud Storage in BigQuery, consulta Percorso della risorsa Cloud Storage.
STALENESS_INTERVAL
: specifica se i metadati memorizzati nella cache vengono utilizzati dalle operazioni sulla tabella e quanto devono essere aggiornati i metadati memorizzati nella cache affinché l'operazione possa utilizzarliPer ulteriori informazioni sulle considerazioni relative alla memorizzazione nella cache dei metadati, consulta Memorizzazione nella cache dei metadati per il rendimento.
Per disattivare la memorizzazione nella cache dei metadati, specifica 0. Questa è l'impostazione predefinita.
Per abilitare la memorizzazione nella cache dei metadati, specifica valore letterale intervallo compreso tra 30 minuti e 7 giorni. Ad esempio, specifica
INTERVAL 4 HOUR
per un intervallo di inattività di 4 ore. Con questo valore, le operazioni sulla tabella utilizzano i metadati memorizzati nella cache se è stato aggiornato nelle ultime 4 ore. Se i metadati memorizzati nella cache sono precedenti a questa data, l'operazione recupera i metadati da Cloud Storage.CACHE_MODE
: specifica se la cache dei metadati viene aggiornata automaticamente o manualmentePer ulteriori informazioni considerazioni sulla memorizzazione nella cache dei metadati, Memorizzazione nella cache dei metadati per migliorare le prestazioni.
Imposta il valore
AUTOMATIC
affinché la cache dei metadati venga vengono aggiornati a un intervallo definito dal sistema, solitamente compreso tra 30 e 60 minuti.Imposta
MANUAL
se vuoi aggiornare la cache dei metadati in base a una pianificazione che hai stabilito. In questo caso, puoi chiamare la procedura di sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
per aggiornare la cache.Devi impostare
CACHE_MODE
seSTALENESS_INTERVAL
è impostato su un valore maggiore di 0.
Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire le query, consulta Eseguire una query interattiva.
bq
Utilizza i comandi bq mkdef
e
bq update
per aggiornare una tabella:
Genera una definizione della tabella esterna, che descrive gli aspetti della tabella da modificare:
bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \ --source_format=TABLE_FORMAT \ --metadata_cache_mode=CACHE_MODE \ "BUCKET_PATH" > /tmp/DEFINITION_FILE
Sostituisci quanto segue:
PROJECT_ID
: il nome del progetto che contiene la connessioneREGION
: la regione che contiene connessioneCONNECTION_ID
: il nome della connessione per utilizzareTABLE_FORMAT
: il formato utilizzato tabella. Non puoi modificare questa impostazione durante l'aggiornamento della tabella.CACHE_MODE
: specifica se i metadati la cache viene aggiornata automaticamente o manualmente. Per ulteriori informazioni considerazioni sulla memorizzazione nella cache dei metadati, Memorizzazione nella cache dei metadati per migliorare le prestazioni.Impostato su
AUTOMATIC
per aggiornare la cache dei metadati a un intervallo definito dal sistema, in genere tra 30 e 60 minuti.Imposta su
MANUAL
se desideri aggiornare la cache dei metadati su una il piano di controllo da te determinato. In questo caso, puoi chiamare il metodo Procedura di sistema diBQ.REFRESH_EXTERNAL_METADATA_CACHE
per aggiornare nella cache.Devi impostare
CACHE_MODE
se Il campoSTALENESS_INTERVAL
è impostato su un valore maggiore di 0.BUCKET_PATH
: il percorso bucket Cloud Storage che contiene i dati per una tabella esterna, nel formatogs://bucket_name/[folder_name/]file_name
.Puoi limitare i file selezionati dal bucket specificando un carattere jolly asterisco (
*
) nel percorso. Ad esempio,gs://mybucket/file_name*
. Per maggiori informazioni le informazioni, vedi Supporto dei caratteri jolly per gli URI Cloud Storage.Puoi specificare più bucket per l'opzione
uris
fornendo più percorsi.Gli esempi seguenti mostrano valori
uris
validi:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.csv
gs://bucket/path1/*,gs://bucket/path2/file00*
Quando specifichi valori
uris
che hanno come target più file, tutti questi file devono condividere uno schema compatibile.Per ulteriori informazioni sull'utilizzo degli URI Cloud Storage in BigQuery, vedi Percorso della risorsa di Cloud Storage.
DEFINITION_FILE
: il nome della tabella di definizione del file che stai creando.
Aggiorna la tabella utilizzando la nuova definizione della tabella esterna:
bq update --max_staleness=STALENESS_INTERVAL \ --external_table_definition=/tmp/DEFINITION_FILE \ PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME
Sostituisci quanto segue:
STALENESS_INTERVAL
: specifica se I metadati memorizzati nella cache vengono utilizzati dalle operazioni e il livello di attualità dei metadati memorizzati nella cache per l'operazione per utilizzarlo. Per ulteriori informazioni sui metadati considerazioni sulla memorizzazione nella cache, consulta Memorizzazione nella cache dei metadati per migliorare le prestazioni.Per disabilitare la memorizzazione nella cache dei metadati, specifica 0. Questa è l'impostazione predefinita.
Per abilitare la memorizzazione nella cache dei metadati, specifica un valore di intervallo compreso tra 30 minuti e 7 giorni, utilizzando
Y-M D H:M:S
descritto in Tipo di datiINTERVAL
documentazione. Ad esempio, specifica0-0 0 4:0:0
per un intervallo di inattività di 4 ore. Con questo valore, le operazioni sulla tabella utilizzano i metadati memorizzati nella cache se è stato aggiornato nelle ultime 4 ore. Se i metadati memorizzati nella cache sono precedenti a questa data, l'operazione recupera i metadati da Cloud Storage.DEFINITION_FILE
: il nome del file di definizione della tabella che hai creato o aggiornato.PROJECT_ID
: il nome del progetto che contiene la tabellaDATASET
: il nome del set di dati che contiene la tabellaEXTERNAL_TABLE_NAME
: il nome della tabella
Eseguire query su BigLake e su tabelle esterne
Dopo aver creato una tabella BigLake, puoi
eseguire query con la sintassi GoogleSQL,
come se si trattasse di una tabella BigQuery standard.
Ad esempio, SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
.
Limitazioni
BigQuery supporta solo le query su Lettore Delta Lake v1 tabelle.
L'integrazione di Hudi e BigQuery funziona solo per le tabelle
copy-on-write
partizionate in stile Hive.
Passaggi successivi
- Scopri di più sull'utilizzo di SQL in BigQuery.
- Scopri di più sulle tabelle BigLake.
- Scopri di più sulle quote di BigQuery.