Utiliser des données partitionnées en externe
Vous pouvez utiliser les tables externes BigQuery pour interroger des données partitionnées dans les datastores suivants :
Les données partitionnées externes doivent utiliser une configuration de partitionnement Hive par défaut et être dans l'un des formats suivants :
- Avro
- CSV
- JSON
- ORC
- Parquet
Pour interroger des données partitionnées en externe, vous devez créer une table BigLake ou une table externe. Nous vous recommandons d'utiliser les tables BigLake, car elles vous permettent d'appliquer une sécurité ultraprécise au niveau de la table. Pour plus d'informations sur les tables BigLake et externes, consultez les sections Présentation des tables BigLake et Présentation des tables externes.
Pour activer l'assistance de partitionnement Hive, définissez les options appropriées dans le fichier de définition de table. Pour obtenir des instructions sur l'interrogation de tables partitionnées gérées, consultez la page Présentation des tables partitionnées.
Schéma de partition
Les sections suivantes décrivent la configuration de partitionnement Hive par défaut et les modes de détection de schéma compatibles avec BigQuery.
Pour éviter de lire des fichiers inutiles et améliorer les performances, vous pouvez utiliser des filtres de prédicat sur les clés de partitionnement dans les requêtes.
Configurations de données compatibles
Les clés de partitionnement Hive s'affichent comme des colonnes normales lorsque vous interrogez des données depuis Cloud Storage. Les données doivent suivre une configuration de partitionnement Hive par défaut. Par exemple, les fichiers suivants suivent la configuration par défaut (les paires clé/valeur sont configurées en tant que répertoires avec un signe "égal" (=) en tant que séparateur), et les clés de partitionnement sont toujours dans le même ordre :
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
Le préfixe d'URI source commun utilisé dans cet exemple est gs://my_bucket/my_table
.
Configurations de données non compatibles
Si les noms des clés de partitionnement ne sont pas encodés dans le chemin d'accès au répertoire, la détection du schéma de partition échoue. Par exemple, considérons le chemin d'accès suivant, qui n'encode pas les noms des clés de partitionnement :
gs://my_bucket/my_table/2019-10-31/en/my_filename
Les fichiers dans lesquels le schéma n'est pas dans un ordre cohérent ne vont pas être détectés. Par exemple, considérons les deux fichiers suivants qui contiennent des encodages de clés de partitionnement inversés :
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
Modes de détection
BigQuery accepte trois modes de détection de schéma de partition Hive :
AUTO
: les noms et types de clés sont détectés automatiquement. Les types suivants peuvent être détectés:STRINGS
: les noms de clés sont automatiquement convertis en typeSTRING
.CUSTOM
: le schéma de clé de partitionnement est encodé comme spécifié dans le préfixe d'URI source.
Schéma de clé de partitionnement personnalisé
Pour utiliser un schéma CUSTOM
, vous devez le spécifier dans le champ du préfixe d'URI source. L'utilisation d'un schéma CUSTOM
vous permet de spécifier le type de chaque clé de partitionnement.
Les valeurs doivent être valablement analysées en tant que type spécifié, sinon la requête échoue.
Par exemple, si vous définissez l'option source_uri_prefix
sur gs://my_bucket/my_table/{dt:DATE}/{val:STRING}
, BigQuery traite val
comme une CHAÎNE, dt
comme une DATE, et utilise gs://my_bucket/my_table
comme préfixe d'URI source pour les fichiers correspondants.
Éliminer des partitions
BigQuery élimine les partitions lorsque cela est possible en utilisant des prédicats de requête sur les clés de partitionnement. Cela permet à BigQuery d'éviter la lecture de fichiers inutiles, ce qui permet d'améliorer les performances.
Filtres de prédicat sur les clés de partitionnement dans les requêtes
Lorsque vous créez une table partitionnée en externe, vous pouvez exiger l'utilisation de filtres de prédicat sur les clés de partitionnement en activant l'option requirePartitionFilter
sous HivePartitioningOptions.
Lorsque cette option est activée, toute tentative d'interrogation de la table partitionnée en externe sans spécifier de clause WHERE
génère l'erreur suivante : Cannot query over table <table_name> without a filter over column(s)
<partition key names> that can be used for partition elimination
.
Limites
- La compatibilité avec le partitionnement Hive est basée sur un préfixe d'URI source commun à tous les URI, qui se termine immédiatement avant l'encodage de partition, comme suit :
gs://BUCKET/PATH_TO_TABLE/
. - La structure du répertoire d'une table partitionnée Hive est supposée contenir des clés de partitionnement identiques s'affichant dans le même ordre, avec maximum dix clés de partitionnement par table.
- Les données doivent respecter une configuration de partitionnement Hive par défaut.
- Les clés de partitionnement Hive et les colonnes des fichiers sous-jacents ne peuvent pas se chevaucher.
L'assistance n'est fournie que pour GoogleSQL.
Toutes les limites d'interrogation des sources de données externes stockées dans Cloud Storage s'appliquent.
Étapes suivantes
- Apprenez-en plus sur les tables partitionnées.
- Découvrez comment utiliser SQL dans BigQuery.