Utilizza dati partizionati esternamente

Puoi utilizzare le tabelle esterne BigQuery per eseguire query su dati partizionati nei seguenti datastore:

I dati partizionati esterni devono utilizzare un layout di partizionamento Hive predefinito ed essere in uno dei seguenti formati:

  • Avro
  • CSV
  • JSON
  • ORC
  • Parquet

Per eseguire query su dati partizionati esternamente, devi creare una tabella BigLake o una tabella esterna. Ti consigliamo di utilizzare le tabelle BigLake perché consentono di applicare una sicurezza granulare a livello di tabella. Per informazioni su BigLake e le tabelle esterne, consulta Introduzione alle tabelle BigLake e Introduzione alle tabelle esterne.

Puoi abilitare il supporto del partizionamento Hive impostando le opzioni appropriate nel file di definizione della tabella. Per istruzioni sull'esecuzione di query sulle tabelle partizionate gestite, consulta Introduzione alle tabelle partizionate.

Schema di partizione

Le sezioni seguenti spiegano il layout predefinito di Hive partizionato e le modalità di rilevamento dello schema supportate da BigQuery.

Per evitare di leggere file superflui e per migliorare le prestazioni, puoi utilizzare filtri predicati sulle chiavi di partizione nelle query.

Layout dei dati supportati

Le chiavi di partizione Hive vengono visualizzate come normali colonne quando esegui query sui dati di Cloud Storage. I dati devono seguire un layout partizionato di Hive predefinito. Ad esempio, i seguenti file seguono il layout predefinito: le coppie chiave-valore sono configurate come directory con il segno uguale (=) come separatore e le chiavi di partizione hanno sempre lo stesso ordine:

gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/dt=2018-10-31/lang=fr/my_filename

Il prefisso dell'URI di origine comune in questo esempio è gs://my_bucket/my_table.

Layout dei dati non supportati

Se i nomi delle chiavi di partizione non sono codificati nel percorso della directory, il rilevamento dello schema di partizione non va a buon fine. Ad esempio, considera il percorso seguente, che non codifica i nomi delle chiavi di partizione:

gs://my_bucket/my_table/2019-10-31/en/my_filename

Anche i file in cui lo schema non è nell'ordine coerente non vengono rilevati. Ad esempio, considera i seguenti due file con codifiche delle chiavi di partizione invertite:

gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/lang=fr/dt=2018-10-31/my_filename

Modalità di rilevamento

BigQuery supporta tre modalità di rilevamento dello schema di partizione Hive:

  • AUTO: nomi e tipi di chiavi vengono rilevati automaticamente. È possibile rilevare i seguenti tipi: STRING, INTEGER, DATE e TIMESTAMP.
  • STRINGS: i nomi della chiave vengono convertiti automaticamente in tipo STRING.
  • CUSTOM: lo schema della chiave di partizione è codificato come specificato nel prefisso dell'URI di origine.

Schema della chiave di partizione personalizzata

Per utilizzare uno schema CUSTOM, devi specificare lo schema nel campo del prefisso dell'URI di origine. L'uso di uno schema CUSTOM consente di specificare il tipo di ogni chiave di partizione. I valori devono essere analizzati in modo valido come il tipo specificato, altrimenti la query non va a buon fine.

Ad esempio, se imposti il flag source_uri_prefix su gs://my_bucket/my_table/{dt:DATE}/{val:STRING}, BigQuery considera val come STRING, dt come DATA e utilizza gs://my_bucket/my_table come prefisso dell'URI di origine per i file corrispondenti.

Eliminazione delle partizioni

BigQuery elimina le partizioni, se possibile, utilizzando predicati di query sulle chiavi di partizione. Questo consente a BigQuery di evitare di leggere file non necessari e di migliorare le prestazioni.

Filtri predicati sulle chiavi di partizione nelle query

Quando crei una tabella partizionata esternamente, puoi richiedere l'uso di filtri di predicato sulle chiavi di partizione abilitando l'opzione requirePartitionFilter in HivePartitioningOptions.

Quando questa opzione è abilitata, i tentativi di eseguire query sulla tabella partizionata esternamente senza specificare una clausola WHERE generano il seguente errore: Cannot query over table <table_name> without a filter over column(s) <partition key names> that can be used for partition elimination.

Limitazioni

  • Il supporto per il partizionamento Hive è basato su un prefisso dell'URI di origine comune per tutti gli URI che termina immediatamente prima della codifica delle partizioni, come segue: gs://BUCKET/PATH_TO_TABLE/.
  • Si presume che la struttura di directory di una tabella partizionata Hive mostri le stesse chiavi di partizionamento nello stesso ordine, con un massimo di dieci chiavi di partizione per tabella.
  • I dati devono seguire un layout di partizionamento Hive predefinito.
  • Le chiavi di partizionamento Hive e le colonne nei file sottostanti non possono sovrapporsi.
  • L'assistenza è disponibile solo per GoogleSQL.

  • Si applicano tutte le limitazioni per l'esecuzione di query su origini dati esterne archiviate in Cloud Storage.

Passaggi successivi