Eseguire query su formati di tabelle aperte con manifest

Questo documento descrive come utilizzare i file manifest per eseguire query sui dati archiviati in come Apache Hudi e Delta Lake.

Alcuni formati di tabelle aperte, come Hudi e Delta Lake esportare lo stato corrente come uno o più file manifest. Un file manifest contiene un elenco di file di dati che creano tabelle. Con il supporto del file manifest BigQuery, puoi eseguire query e caricare i dati archiviati in formati di tabelle aperte.

Prima di iniziare

Ruoli obbligatori

Per eseguire query su tabelle BigLake basate su Hudi e Per i dati 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 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

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

Esegui query sui carichi di lavoro Hudi

Per eseguire una query sui dati Hudi, segui questi passaggi:

  1. Crea una tabella esterna basata su Dati Hudi.
  2. 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, abilita il flag use-bq-manifest-file per la transizione all'approccio basato su file manifest. Questo flag consente di esportare anche un file manifest in un supportato da BigQuery e lo utilizza per creare un con il nome specificato nel parametro --table.

Per creare una tabella esterna Hudi, segui questi passaggi:

  1. 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 consente di esportare un un file manifest in un formato supportato da BigQuery e lo utilizza per crea 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 crea la tabella Hudi BigLake

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

    • LOCATION: la posizione in cui vuoi creare la tabella Hudi BigLake

    • TABLE: il nome della tabella che vuoi creare

      Se stai passando dalla versione precedente Hudi-BigQuery (0.13.0 e precedenti) che ha creato viste sui dei file manifest, assicurati di utilizzare lo stesso nome di tabella che ti consente di conservare il codice downstream esistente della pipeline.

    • 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 di partizione. Ad esempio, gs://mybucket/hudi/mydataset/EventDate=*

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

    • BASE_PATH: il percorso di base per Hudi tabelle

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

    • PARTITION_BY: il valore della partizione

      Ad esempio, EventDate

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

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

Query sui carichi di lavoro delta

Le tabelle delta sono ora supportate in modo nativo. Consigliamo di creare tabelle Delta BigLake per 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 lo snapshot più recente, quindi gli aggiornamenti sono subito disponibili.

Per eseguire una query sui 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 adeguati o accelera le prestazioni abilitando la memorizzazione nella cache dei metadati. A questo scopo, 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 manifest consulta Configurare l'integrazione di Presto su 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:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. 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 creato
    • TABLE_NAME: il nome che vuoi assegnare a questa tabella
    • REGION: la posizione in cui viene stabilita la connessione si trova (ad esempio, us-east1)
    • CONNECTION_NAME: il nome della connessione che creato
    • DATA_FORMAT: uno dei formati supportati formati (ad esempio PARQUET)
    • URI: il percorso del file manifest (ad esempio, gs://mybucket/path)
    • PATH_TO_DELTA_TABLE: un prefisso comune per tutti URI di origine prima dell'inizio della codifica della chiave di partizione
    • STALENESS_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 sulla memorizzazione nella cache dei metadati considerazioni, vedi 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 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 sia 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 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 su MANUAL se vuoi aggiornare dei metadati in base a una pianificazione determinata da te. In questo caso, puoi chiamare la procedura di sistema di BQ.REFRESH_EXTERNAL_METADATA_CACHE per aggiornare la cache.

      Devi impostare CACHE_MODE se STALENESS_INTERVAL è impostato su un valore maggiore 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 accelerare le prestazioni dei tuoi carichi di lavoro, sfruttando memorizzazione nella cache dei metadati e viste materializzate. Se vuoi utilizzare per la memorizzazione nella cache dei metadati, puoi specificare le relative 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 la CREATE OR REPLACE EXTERNAL TABLE Istruzione DDL per aggiornare una tabella:

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

    Vai a BigQuery

  2. Nell'editor 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 tabella
    • DATASET: il nome del set di dati che contiene la tabella
    • EXTERNAL_TABLE_NAME: il nome del tavola
    • REGION: la regione che contiene connessione
    • CONNECTION_ID: il nome della connessione per utilizzare
    • TABLE_FORMAT: il formato utilizzato dalla tabella

      Non puoi modificare questa impostazione durante l'aggiornamento della tabella.

    • BUCKET_PATH: il percorso bucket Cloud Storage che contiene i dati per una tabella esterna, nel formato ['gs://bucket_name/[folder_name/]file_name'].

      Puoi selezionare più file dal bucket specificando un asterisco (*) carattere jolly 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 di addestramento.

      I seguenti esempi mostrano valori uris validi:

      • ['gs://bucket/path1/myfile.csv']
      • ['gs://bucket/path1/*.csv']
      • ['gs://bucket/path1/*', 'gs://bucket/path2/file00*']

      Se specifichi i valori uris che hanno come target più file, questi i file devono condividere uno schema compatibile.

      Per ulteriori informazioni sull'utilizzo degli URI Cloud Storage in per BigQuery, consulta Percorso della risorsa di Cloud Storage.

    • STALENESS_INTERVAL: specifica se i metadati memorizzati nella cache vengono utilizzati dalle operazioni sulla tabella e l'aggiornamento dei metadati memorizzati nella cache affinché l'operazione usalo

      Per ulteriori informazioni sulle considerazioni sulla memorizzazione nella cache dei metadati, 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 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 sia precedente, l'operazione recupera i metadati Cloud Storage.

    • 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.

      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 su MANUAL se vuoi aggiornare dei metadati in base a una pianificazione determinata da te. In questo caso, puoi chiamare la procedura di sistema BQ.REFRESH_EXTERNAL_METADATA_CACHE per aggiornare nella cache.

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

  3. Fai clic su Esegui.

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

bq

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

  1. Genera un definizione di una 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 connessione
    • CONNECTION_ID: il nome della connessione per utilizzare
    • TABLE_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.

      Imposta AUTOMATIC per aggiornare la cache dei metadati in un definito dal sistema, di solito 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 di BQ.REFRESH_EXTERNAL_METADATA_CACHE per aggiornare nella cache.

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

    • BUCKET_PATH: il percorso bucket Cloud Storage che contiene i dati per una tabella esterna, nel formato gs://bucket_name/[folder_name/]file_name.

      Puoi limitare i file selezionati dal bucket specificando un asterisco (*) carattere jolly 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 di addestramento.

      I seguenti esempi mostrano valori uris validi:

      • gs://bucket/path1/myfile.csv
      • gs://bucket/path1/*.csv
      • gs://bucket/path1/*,gs://bucket/path2/file00*

      Se specifichi i valori uris che hanno come target più file, questi i file devono condividere uno schema compatibile.

      Per ulteriori informazioni sull'utilizzo degli URI Cloud Storage in per BigQuery, consulta Percorso della risorsa di Cloud Storage.

    • DEFINITION_FILE: il nome della tabella di definizione del file 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 e il grado 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 intervallo di valori compreso tra 30 minuti e 7 giorni, utilizzando Y-M D H:M:S descritto in Tipo di dati INTERVAL documentazione. Ad esempio, specifica 0-0 0 4:0:0 per un 4 di inattività di ora. 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 sia precedente, l'operazione recupera i metadati Cloud Storage.

    • DEFINITION_FILE: il nome della tabella di definizione 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 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.

  • Solo integrazione Hudi e BigQuery funziona per le tabelle copy-on-write partizionate in stile hive.

Passaggi successivi