Gestire i dati partizionati esternamente di Hive
Puoi utilizzare le tabelle esterne di BigQuery per eseguire query sui dati partizionati nei seguenti datastore:
I dati partizionati esternamente devono utilizzare un layout di partizionamento Hive predefinito ed essere in uno dei seguenti formati:
- Avro
- CSV
- JSON
- ORC
- Parquet
Per eseguire query sui dati partizionati esternamente, devi creare una tabella BigLake o una tabella esterna. Ti consigliamo di utilizzare le tabelle BigLake perché ti consentono di applicare una sicurezza granulare a livello di tabella. Per informazioni sulle tabelle BigLake ed esterne, consulta Introduzione alle tabelle BigLake e Introduzione alle tabelle esterne.
Per abilitare il supporto del partizionamento Hive, imposta le opzioni appropriate nel file di definizione della tabella. Per istruzioni su come eseguire query sulle tabelle partizionate gestite, consulta Introduzione alle tabelle partizionate.
Schema di partizione
Le sezioni seguenti descrivono il layout di partizionamento Hive predefinito e le modalità di rilevamento dello schema supportate da BigQuery.
Per evitare di leggere file non necessari e migliorare il rendimento, puoi utilizzare i filtri dei predicati sulle chiavi di partizione nelle query.
Layout dei dati supportati
Quando esegui query sui dati da Cloud Storage, le chiavi di partizione Hive vengono visualizzate come colonne normali. I dati devono seguire un layout di partizionamento Hive predefinito. Ad esempio, i seguenti file seguono il layout predefinito: le coppie chiave-valore sono configurate come directory con un segno di uguale (=) come separatore e le chiavi di partizione sono sempre nello 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 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 riesce. Ad esempio, considera il seguente percorso, 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 è in un 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: i nomi e i tipi delle chiavi vengono rilevati automaticamente. È possibile rilevare i seguenti tipi:STRINGS: i nomi delle chiavi vengono convertiti automaticamente nel tipoSTRING.CUSTOM: lo schema delle chiavi di partizione viene codificato come specificato nel prefisso URI di origine.
Schema delle chiavi di partizione personalizzato
Per utilizzare uno schema CUSTOM, devi specificarlo nel campo del prefisso URI di origine. L'utilizzo di uno schema CUSTOM ti consente di specificare il tipo per ogni chiave di partizione.
I valori devono essere analizzati in modo valido come tipo specificato, altrimenti la query non riesce.
Ad esempio, se imposti il flag source_uri_prefix su
gs://my_bucket/my_table/{dt:DATE}/{val:STRING},
BigQuery tratta val come STRING, dt come DATE e
utilizza gs://my_bucket/my_table come prefisso URI di origine per i file corrispondenti.
Eliminazione delle partizioni
BigQuery elimina le partizioni quando possibile utilizzando i predicati delle query sulle chiavi di partizione. In questo modo, BigQuery evita di leggere file non necessari, il che contribuisce a migliorare il rendimento.
Filtri dei predicati sulle chiavi di partizione nelle query
Quando crei una tabella partizionata esternamente, puoi richiedere l'utilizzo di
filtri dei predicati 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 del partizionamento Hive è basato sul presupposto di un prefisso URI di origine comune per
tutti gli URI che termina immediatamente prima della codifica della partizione, come segue:
gs://BUCKET/PATH_TO_TABLE/. - Si presuppone che la struttura delle directory di una tabella partizionata Hive abbia le stesse chiavi di partizionamento nello stesso ordine, con un massimo di dieci chiavi di partizionamento 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.
Il supporto è disponibile solo per GoogleSQL.
Si applicano tutte le limitazioni per l'esecuzione di query sulle origini dati esterne archiviate in Cloud Storage.
Passaggi successivi
- Scopri di più sulle tabelle partizionate.
- Scopri come utilizzare SQL in BigQuery.