Eseguire query sui formati di tabelle aperti con manifest

Questo documento descrive come utilizzare i file manifest per eseguire query sui dati archiviati in formati di tabelle 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. Grazie al supporto dei manifest in BigQuery, puoi eseguire query e caricare i dati archiviati in formati di tabella aperti.

Prima di iniziare

Ruoli obbligatori

Per eseguire query sulle tabelle BigLake in base ai dati 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 su 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:

  • Visualizzatore dati BigQuery (roles/bigquery.dataViewer)
  • Utente BigQuery (roles/bigquery.user)
  • Storage Object Viewer (roles/storage.objectViewer)

A seconda delle tue autorizzazioni, puoi concederti questi ruoli 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

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Esegui query sui workload Hudi

Per eseguire query sui dati Hudi, segui questi passaggi:

  1. Crea una tabella esterna basata sui dati Hudi.
  2. 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 basato sui 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:

  1. Per creare una tabella esterna Hudi, invia un job a un cluster Dataproc esistente. Quando crei il connettore Hudi-BigQuery, attiva il flag use-bq-manifest-file per passare all'approccio basato sui 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, specifica hudi-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 creare la tabella BigLake Hudi

    • DATASET: il set di dati in cui vuoi creare la tabella BigLake Hudi

    • LOCATION: la località in cui vuoi creare la tabella BigLake Hudi

    • TABLE: il nome della tabella che vuoi creare

      Se esegui la transizione dalla versione precedente del connettore Hudi-BigQuery (0.13.0 e versioni precedenti) che creava viste 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 Hudi

      Questo URI punta alla partizione di primo livello; assicurati di includere la chiave di partizione. Ad esempio, gs://mybucket/hudi/mydataset/EventDate=*

    • URI_PREFIX: il prefisso del percorso URI di Cloud Storage, di solito è il percorso delle tabelle Hudi

    • BASE_PATH: il percorso di base per le tabelle Hudi

      Ad esempio, gs://mybucket/hudi/mydataset/

    • PARTITION_BY: il valore della partizione

      Ad esempio, EventDate

    Per ulteriori informazioni sulla configurazione del connettore, consulta la sezione Connettore Hudi-BigQuery.

  2. Per impostare controlli granulari appropriati o per accelerare le prestazioni attivando la memorizzazione nella cache dei metadati, consulta Esegui l'upgrade delle tabelle BigLake.

Query sui workload Delta

Le tabelle Delta sono ora supportate in modo nativo. Ti consigliamo di creare tabelle BigLake Delta per i carichi di lavoro Delta. Le tabelle BigLake Delta Lake supportano tabelle Delta Lake più avanzate, incluse quelle con il remapping delle colonne e i vettori di eliminazione. Inoltre, le tabelle BigLake Delta leggono direttamente l'ultimo snapshot, quindi gli aggiornamenti sono disponibili immediatamente.

Per interrogare i carichi di lavoro Delta, segui questi passaggi:

  1. Genera un file manifest.
  2. Crea una tabella BigLake in base al file manifest.
  3. 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 formato SymLinkTextInputFormat, che è un elenco di URI delimitati 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 il seguente comando su una tabella Delta nella posizione 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 nella posizione 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 nella posizione 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 nella posizione path-to-delta-table:

deltaTable = DeltaTable.forPath(<path-to-delta-table>)
deltaTable.generate("symlink_format_manifest")

Crea tabelle BigLake Delta

Per creare una tabella BigLake Delta, utilizza l'istruzione CREATE EXTERNAL TABLE con il campo file_set_spec_type impostato su NEW_LINE_DELIMITED_MANIFEST:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. 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 creato
    • TABLE_NAME: il nome che vuoi assegnare a questa tabella
    • REGION: la posizione in cui si trova la connessione (ad esempio us-east1)
    • CONNECTION_NAME: il nome della connessione che hai creato
    • DATA_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 partizionamento
    • STALENESS_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 li utilizzi. Per ulteriori informazioni sulle considerazioni relative alla memorizzazione nella cache dei metadati, vedi 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 HOUR per un intervallo di obsolescenza 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, vedi Memorizzazione nella cache dei metadati per il rendimento.

      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 determini. In questo caso, puoi chiamare la procedura di sistema BQ.REFRESH_EXTERNAL_METADATA_CACHE per aggiornare la cache.

      Devi impostare CACHE_MODE se STALENESS_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'
    );

Esegui l'upgrade delle tabelle BigLake

Puoi anche migliorare 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 per questa operazione contemporaneamente. Per ottenere i dettagli della tabella, come il formato e l'URI dell'origine, consulta Recuperare 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:

  1. Nella console Trusted Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. 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 tabella
    • DATASET: il nome del set di dati che contiene la tabella
    • EXTERNAL_TABLE_NAME: il nome della tabella
    • REGION: la regione che contiene la connessione
    • CONNECTION_ID: il nome della connessione da utilizzare

      Per utilizzare una connessione predefinita, specifica DEFAULT anziché la stringa di connessione contenente REGION.CONNECTION_ID.

    • TABLE_FORMAT: il formato utilizzato dalla tabella

      Non puoi modificare questa impostazione durante l'aggiornamento della 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 uris fornendo più percorsi.

      I seguenti esempi 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 li utilizzi

      Per ulteriori informazioni sulle considerazioni relative alla memorizzazione nella cache dei metadati, vedi 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 HOUR per un intervallo di obsolescenza 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 manualmente

      Per ulteriori informazioni sulle considerazioni relative alla memorizzazione nella cache dei metadati, vedi Memorizzazione nella cache dei metadati per il rendimento.

      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 determini. In questo caso, puoi chiamare la procedura di sistema BQ.REFRESH_EXTERNAL_METADATA_CACHE per aggiornare la cache.

      Devi impostare CACHE_MODE se STALENESS_INTERVAL è impostato su un valore maggiore di 0.

  3. Fai clic su Esegui.

Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

bq

Utilizza i comandi bq mkdef e bq update per aggiornare una tabella:

  1. Genera una definizione di 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 connessione
    • REGION: la regione che contiene la connessione
    • CONNECTION_ID: il nome della connessione da utilizzare
    • TABLE_FORMAT: il formato utilizzato dalla tabella. Non puoi modificare questa impostazione durante l'aggiornamento della 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 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 determini. In questo caso, puoi chiamare la procedura di sistema BQ.REFRESH_EXTERNAL_METADATA_CACHE per aggiornare la cache.

      Devi impostare CACHE_MODE se STALENESS_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 formato gs://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 uris fornendo più percorsi.

      I seguenti esempi 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.

    • DEFINITION_FILE: il nome del file di definizione della tabella che stai creando.

  2. 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 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 formato Y-M D H:M:S descritto nella documentazione del tipo di dati INTERVAL. Ad esempio, specifica 0-0 0 4:0:0 per un intervallo di obsolescenza 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 tabella

    • DATASET: il nome del set di dati che contiene la tabella

    • EXTERNAL_TABLE_NAME: il nome della tabella

Eseguire query su tabelle BigLake ed esterne

Dopo aver creato una tabella BigLake, puoi eseguire query utilizzando la sintassi GoogleSQL, come se fosse una tabella BigQuery standard. Ad esempio, SELECT field1, field2 FROM mydataset.my_cloud_storage_table;.

Limitazioni

  • BigQuery supporta solo le query sulle tabelle Delta Lake Reader v1.

  • L'integrazione di Hudi e BigQuery funziona solo per le tabelle copy-on-write partizionate in stile Hive.

Passaggi successivi