Eseguire query sui formati di tabella aperti con i 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 tabella aperti, 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 compongono le tabelle. Con il supporto dei manifest in BigQuery, puoi eseguire query e caricare i dati archiviati in formati di tabella aperti.
Prima di iniziare
Abilita le API BigQuery Connection, BigQuery Reservation e BigLake.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.Per creare tabelle BigLake, puoi eseguire i comandi Spark utilizzando uno dei seguenti metodi:
Crea un cluster Managed Service for Apache Spark. Per eseguire query sulle tabelle Hudi, imposta il campo
--optional-componentssuHUDI. Per eseguire query sulle tabelle Delta, imposta--optional-componentssuPresto.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. Devi connetterti al bucket Cloud Storage per accedere al file manifest. Per farlo, segui questi passaggi:
Ruoli obbligatori
Per eseguire query sulle tabelle BigLake basate sui dati Hudi e Delta Lake, assicurati di disporre dei seguenti ruoli:
- BigQuery Connection User (
roles/bigquery.connectionUser) - BigQuery Data Viewer (
roles/bigquery.dataViewer) - BigQuery User (
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 sulle tabelle esterne Hudi, assicurati di disporre dei seguenti ruoli:
- BigQuery Data Viewer (
roles/bigquery.dataViewer) - BigQuery User (
roles/bigquery.user) - Storage Object Viewer (
roles/storage.objectViewer)
A seconda delle tue autorizzazioni, puoi concedere questi ruoli a te stesso o chiedere all'amministratore di concederteli. Per ulteriori informazioni sulla concessione dei ruoli, consulta Visualizzazione dei ruoli assegnabili sulle risorse.
Per vedere quali sono esattamente le autorizzazioni richieste per eseguire query sulle tabelle BigLake, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
bigquery.connections.usebigquery.jobs.createbigquery.readsessions.create(richiesta solo se stai leggendo i dati con l' API BigQuery Storage Read)bigquery.tables.getbigquery.tables.getData
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Eseguire query sui workload Hudi
Per eseguire query sui dati Hudi, seguire questi passaggi:
- Crea una tabella esterna basata sui dati Hudi.
- Esegui l'upgrade della tabella esterna a BigLake.
Creare tabelle esterne Hudi
Quando sincronizzi le tabelle utilizzando lo strumento di sincronizzazione per Hudi e BigQuery, attiva il flag use-bq-manifest-file per passare 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:
Per creare una tabella esterna Hudi, invia un job a un cluster Managed Service for Apache Spark esistente. Quando crei il connettore Hudi-BigQuery, attiva il flag
use-bq-manifest-fileper passare all'approccio del 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 Managed Service for Apache Spark 2.1, specifica/usr/lib/hudi/tools/bq-sync-tool/hudi-gcp-bundle-0.12.3.1.jarPROJECT_ID: l'ID progetto in cui vuoi creare la tabella Hudi BigLakeDATASET: il set di dati in cui vuoi creare la tabella Hudi BigLakeLOCATION: la località 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 precedenti) che creava visualizzazioni sui file manifest, assicurati di utilizzare lo stesso nome della tabella, in modo da mantenere il codice della pipeline downstream esistente.
URI: l'URI Cloud Storage che hai creato per archiviare il file manifest HudiQuesto URI rimanda alla partizione di primo livello; assicurati di includere la chiave di partizione. Ad esempio,
gs://mybucket/hudi/mydataset/EventDate=*URI_PREFIX: il prefisso per il percorso URI Cloud Storage, in genere è il percorso delle tabelle HudiBASE_PATH: il percorso di base per le tabelle HudiAd 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 abilitando la memorizzazione nella cache dei metadati, consulta Eseguire l'upgrade delle tabelle BigLake.
Eseguire query sui workload Delta
Le tabelle Delta sono ora supportate in modo nativo. Ti consigliamo di creare tabelle Delta BigLake per i workload Delta. Le tabelle Delta Lake BigLake supportano tabelle Delta Lake più avanzate Delta Lake, incluse le tabelle con rimappatura delle colonne e vettori di eliminazione. Inoltre, le tabelle Delta BigLake leggono direttamente l'ultimo snapshot, quindi gli aggiornamenti sono disponibili immediatamente.
Per eseguire query sui workload Delta, seguire questi passaggi:
- Genera un file manifest.
- Crea una tabella BigLake basata sul file manifest.
- Imposta controlli granulari appropriati o accelera il rendimento abilitando 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 formato
SymLinkTextInputFormat, che è un elenco di URI
delimitato da nuove righe. Per ulteriori informazioni sulla generazione di un file manifest, consulta Configurare l'integrazione di Presto in Delta Lake ed eseguire query sulle tabelle Delta.
Per generare un file manifest, invia un job a un cluster Managed Service for Apache Spark esistente:
SQL
Utilizzando Spark, esegui il seguente comando su una tabella Delta nel percorso path-to-delta-table:
GENERATE symlink_format_manifest FOR TABLE delta.`<path-to-delta-table>`
Scala
Utilizzando Spark, esegui il seguente comando su una tabella Delta nel percorso path-to-delta-table:
val deltaTable = DeltaTable.forPath(<path-to-delta-table>)
deltaTable.generate("symlink_format_manifest")
Java
Utilizzando Spark, esegui il seguente comando su una tabella Delta nel percorso path-to-delta-table:
DeltaTable deltaTable = DeltaTable.forPath(<path-to-delta-table>);
deltaTable.generate("symlink_format_manifest");
Python
Utilizzando Spark, esegui il seguente comando su una tabella Delta nel percorso path-to-delta-table:
deltaTable = DeltaTable.forPath(<path-to-delta-table>)
deltaTable.generate("symlink_format_manifest")
Creare tabelle Delta BigLake
Per creare una tabella Delta BigLake, utilizza l'
CREATE EXTERNAL TABLE istruzione con il campo
file_set_spec_type impostato su NEW_LINE_DELIMITED_MANIFEST:
Vai alla pagina BigQuery.
Nell'editor di 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 località in cui si trova la connessione (ad esempio,us-east1)CONNECTION_NAME: il nome della connessione che hai creatoDATA_FORMAT: uno dei formati supportati (ad esempio,PARQUET)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 sulla tabella BigLake e quanto devono essere aggiornati i metadati memorizzati nella cache affinché l'operazione possa utilizzarli. 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 letterale di intervallo compreso tra 30 minuti e 7 giorni. Ad esempio, specifica
INTERVAL 4 HOURper un intervallo di aggiornamento di 4 ore. Con questo valore, le operazioni sulla tabella utilizzano i metadati memorizzati nella cache se sono stati aggiornati nelle ultime 4 ore. Se i metadati memorizzati nella cache sono più vecchi, l'operazione recupera i metadati da Delta Lake.CACHE_MODE: specifica se la cache dei metadati viene aggiornata automaticamente o manualmente. Per ulteriori informazioni sulle considerazioni relative alla memorizzazione nella cache dei metadati, consulta Memorizzazione nella cache dei metadati per il rendimento.Imposta su
AUTOMATICper aggiornare la cache dei metadati a un intervallo definito dal sistema, in genere tra 30 e 60 minuti.Imposta su
MANUALse vuoi aggiornare la cache dei metadati in base a una pianificazione che hai stabilito. In questo caso, puoi chiamare laBQ.REFRESH_EXTERNAL_METADATA_CACHEprocedura di sistema per aggiornare la cache.Devi impostare
CACHE_MODEseSTALENESS_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 il rendimento dei tuoi workload 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 i dettagli della tabella, come il formato di origine e l'URI di origine, consulta Ottenere informazioni sulla tabella.
Per aggiornare una tabella esterna a una tabella BigLake o aggiornare una tabella BigLake esistente, seleziona una delle seguenti opzioni:
SQL
Utilizza l'istruzione DDL
CREATE OR REPLACE EXTERNAL TABLE
per aggiornare una tabella:
Nella Google Cloud console, 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` | DEFAULT} 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 della tabellaREGION: la regione che contiene la connessioneCONNECTION_ID: il nome della connessione da utilizzarePer utilizzare una connessione predefinita, specifica
DEFAULTanziché la stringa di connessione contenenteREGION.CONNECTION_ID.TABLE_FORMAT: il formato utilizzato dalla tabellaNon puoi modificare questa impostazione quando aggiorni la tabella.
BUCKET_PATH: il percorso del bucket Cloud Storage che contiene i dati per la 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 ulteriori informazioni, consulta Supporto dei caratteri jolly per gli URI Cloud Storage.Puoi specificare più bucket per l'opzione
urisfornendo più percorsi.I seguenti esempi mostrano valori
urisvalidi:['gs://bucket/path1/myfile.csv']['gs://bucket/path1/*.csv']['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
Quando specifichi valori
urische fanno riferimento a più file, tutti questi file devono condividere uno schema compatibile.Per ulteriori informazioni sull'utilizzo degli URI Cloud Storage in BigQuery, consulta Percorso delle risorse 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 attivare la memorizzazione nella cache dei metadati, specifica un valore letterale di intervallo compreso tra 30 minuti e 7 giorni. Ad esempio, specifica
INTERVAL 4 HOURper un intervallo di aggiornamento di 4 ore. Con questo valore, le operazioni sulla tabella utilizzano i metadati memorizzati nella cache se sono stati aggiornati nelle ultime 4 ore. Se i metadati memorizzati nella cache sono più vecchi, l'operazione recupera i metadati da Cloud Storage.CACHE_MODE: specifica se la cache dei metadati viene aggiornata automaticamente o manualmentePer ulteriori informazioni sulle considerazioni relative alla memorizzazione nella cache dei metadati, consulta Memorizzazione nella cache dei metadati per il rendimento.
Imposta su
AUTOMATICper aggiornare la cache dei metadati a un intervallo definito dal sistema, in genere tra 30 e 60 minuti.Imposta su
MANUALse 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_CACHEper aggiornare la cache.Devi impostare
CACHE_MODEseSTALENESS_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 bq mkdef e
bq update comandi
per aggiornare una tabella:
Genera una definizione di tabella esterna, che descriva 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 la connessioneCONNECTION_ID: il nome della connessione da utilizzareTABLE_FORMAT: il formato utilizzato dalla tabella. Non puoi modificare questa impostazione quando aggiorni la tabella.CACHE_MODE: specifica se la cache dei metadati viene aggiornata automaticamente o manualmente. Per ulteriori informazioni sulle considerazioni relative alla memorizzazione nella cache dei metadati, consulta Memorizzazione nella cache dei metadati per il rendimento.Imposta su
AUTOMATICper aggiornare la cache dei metadati a un intervallo definito dal sistema, in genere tra 30 e 60 minuti.Imposta su
MANUALse vuoi aggiornare la cache dei metadati in base a una pianificazione che hai stabilito. In questo caso, puoi chiamare laBQ.REFRESH_EXTERNAL_METADATA_CACHEprocedura di sistema per aggiornare la cache.Devi impostare
CACHE_MODEseSTALENESS_INTERVALè impostato su un valore maggiore di 0.BUCKET_PATH: il percorso del bucket Cloud Storage che contiene i dati per la 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 ulteriori informazioni, consulta Supporto dei caratteri jolly per gli URI Cloud Storage.Puoi specificare più bucket per l'opzione
urisfornendo più percorsi.I seguenti esempi mostrano valori
urisvalidi:gs://bucket/path1/myfile.csvgs://bucket/path1/*.csvgs://bucket/path1/*,gs://bucket/path2/file00*
Quando specifichi valori
urische fanno riferimento a più file, tutti questi file devono condividere uno schema compatibile.Per ulteriori informazioni sull'utilizzo degli URI Cloud Storage in BigQuery, consulta Percorso delle risorse Cloud Storage.
DEFINITION_FILE: il nome del file di definizione della tabella che stai creando.
Aggiorna la tabella utilizzando la nuova definizione di 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 sulla tabella e quanto devono essere aggiornati i metadati memorizzati nella cache affinché l'operazione possa utilizzarli. 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 intervallo compreso tra 30 minuti e 7 giorni, utilizzando il
Y-M D H:M:Sformato descritto nellaINTERVALdocumentazione del tipo di dati. Ad esempio, specifica0-0 0 4:0:0per un intervallo di aggiornamento di 4 ore. Con questo valore, le operazioni sulla tabella utilizzano i metadati memorizzati nella cache se sono stati aggiornati nelle ultime 4 ore. Se i metadati memorizzati nella cache sono più vecchi, 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 sulle tabelle BigLake ed esterne
Dopo aver creato una tabella BigLake, puoi
eseguirne query utilizzando la sintassi GoogleSQL, lo
stesso come se fosse una tabella BigQuery standard.
Ad esempio, SELECT field1, field2 FROM mydataset.my_cloud_storage_table;.
Limitazioni
BigQuery supporta solo l'esecuzione di query sulle tabelle Delta Lake Reader v1.
L'integrazione di Hudi e BigQuery funziona solo per le tabelle
copy-on-writepartizionate 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.