Créer des tables partitionnées
Cette page explique comment créer des tables partitionnées dans BigQuery. Pour une vue d'ensemble des tables partitionnées, consultez la page Présentation des tables partitionnées.
Avant de commencer
Attribuez aux utilisateurs des rôles IAM (Identity and Access Management) incluant les autorisations nécessaires pour effectuer l'ensemble des tâches du présent document.
Autorisations requises
Pour créer une table, vous devez disposer des autorisations IAM suivantes :
bigquery.tables.create
bigquery.tables.updateData
bigquery.jobs.create
En outre, vous pouvez avoir besoin de l'autorisation bigquery.tables.getData
pour accéder aux données que vous écrivez dans la table.
Chacun des rôles IAM prédéfinis suivants inclut les autorisations dont vous avez besoin pour créer une table :
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
(inclut l'autorisationbigquery.jobs.create
)roles/bigquery.user
(inclut l'autorisationbigquery.jobs.create
)roles/bigquery.jobUser
(inclut l'autorisationbigquery.jobs.create
)
En outre, si vous disposez de l'autorisation bigquery.datasets.create
, vous pouvez créer et mettre à jour des tables dans les ensembles de données que vous créez.
Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la page Rôles prédéfinis et autorisations.
Créer une table partitionnée vide
Les étapes permettant de créer une table partitionnée dans BigQuery sont semblables à la création d'une table standard, à la différence que vous spécifiez les options de partitionnement et d'autres options de table.
Créer une table partitionnée par colonne d'unité de temps
Pour créer une table partitionnée par colonne d'unité de temps vide avec une définition de schéma, procédez comme suit :
Console
Dans la console Google Cloud, accédez à la page BigQuery.
- Dans le volet Explorer, développez votre projet, puis sélectionnez un ensemble de données.
- Dans la section Informations sur l'ensemble de données, cliquez sur Créer une table.
- Dans le panneau Créer une table, spécifiez les détails suivants :
- Dans la section Source, sélectionnez Table vide dans la liste Créer une table à partir de.
- Dans la section Destination, spécifiez les détails suivants :
- Pour Ensemble de données, sélectionnez l'ensemble de données dans lequel vous souhaitez créer la table.
- Dans le champ Table, saisissez le nom de la table que vous souhaitez créer.
- Vérifiez que le champ Type de table est défini sur Table native.
- Dans la section Schéma, saisissez la définition du schéma.
Le schéma doit inclure une colonne
DATE
,TIMESTAMP
ouDATETIME
pour la colonne de partitionnement. Pour en savoir plus, consultez la section Spécifier un schéma. Vous pouvez saisir les informations de schéma manuellement à l'aide de l'une des méthodes suivantes :- Option 1 : Cliquez sur Modifier sous forme de texte et collez le schéma sous la forme d'un tableau JSON. Lorsque vous utilisez un tableau JSON, vous générez le schéma en utilisant le même processus que pour la création d'un fichier de schéma JSON.
Vous pouvez afficher le schéma d'une table existante au format JSON en saisissant la commande suivante :
bq show --format=prettyjson dataset.table
- Option 2 : Cliquez sur type et le mode de chaque champ. Ajouter un champ et saisissez le schéma de la table. Spécifiez le nom, le
- Option 1 : Cliquez sur Modifier sous forme de texte et collez le schéma sous la forme d'un tableau JSON. Lorsque vous utilisez un tableau JSON, vous générez le schéma en utilisant le même processus que pour la création d'un fichier de schéma JSON.
Vous pouvez afficher le schéma d'une table existante au format JSON en saisissant la commande suivante :
- Dans la section Paramètres de partitionnement et de clustering, dans la liste Partitionnement, sélectionnez Partition par champ, puis choisissez le partitionnement. Cette option n'est disponible que si le schéma contient une colonne
DATE
,TIMESTAMP
ouDATETIME
. - (Facultatif) Pour exiger un filtre de partitionnement sur toutes les requêtes de cette table, cochez la case Demander un filtre de partitionnement. Un filtre de partitionnement peut contribuer à réduire les coûts et à améliorer les performances. Pour en savoir plus, consultez la section Définir les exigences de filtrage des partitions.
- Sélectionnez le Type de partitionnement pour choisir le partitionnement quotidien, horaire, mensuel ou annuel.
- Facultatif : dans la section Options avancées si vous souhaitez utiliser une clé de chiffrement gérée par le client, sélectionnezUtiliser une clé de chiffrement gérée par le client (CMEK). Par défaut, BigQuery chiffre le contenu client stocké au repos à l'aide d'une clé appartenant à Google et gérée par Google.
- Cliquez sur Créer une table.
SQL
Pour créer une table partitionnée par colonnes d'unités de temps, utilisez l'instruction LDD CREATE TABLE
avec une clause PARTITION BY
.
L'exemple suivant crée une table avec des partitions quotidiennes basées sur la colonne transaction_date
:
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
Utilisez la clause
OPTIONS
pour définir les options de la table, telles que l'expiration de la partition et les exigences de filtrage des partitions.Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
Le type de partitionnement par défaut pour les colonnes DATE
est le partitionnement quotidien. Pour spécifier un type de partitionnement différent, incluez la fonction DATE_TRUNC
dans la clause PARTITION BY
. Par exemple, la requête suivante crée une table avec des partitions mensuelles :
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY DATE_TRUNC(transaction_date, MONTH) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
Vous pouvez également spécifier une colonne TIMESTAMP
ou DATETIME
en tant que colonne de partitionnement. Dans ce cas, incluez la fonction TIMESTAMP_TRUNC
ou DATETIME_TRUNC
dans la clause PARTITION BY
pour spécifier le type de partition. Par exemple, l'instruction suivante crée une table avec des partitions quotidiennes basées sur une colonne TIMESTAMP
:
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_ts TIMESTAMP) PARTITION BY TIMESTAMP_TRUNC(transaction_ts, DAY) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Exécutez la commande
bq mk
avec l'option--table
(ou le raccourci-t
) :bq mk \ --table \ --schema SCHEMA \ --time_partitioning_field COLUMN \ --time_partitioning_type UNIT_TIME \ --time_partitioning_expiration EXPIRATION_TIME \ --require_partition_filter=BOOLEAN PROJECT_ID:DATASET.TABLE
Remplacez les éléments suivants :
- SCHEMA : définition de schéma au format
column:data_type,column:data_type
ou chemin d'accès à un fichier de schéma JSON sur votre ordinateur local. Pour en savoir plus, consultez la section Spécifier un schéma. - COLUMN : nom de la colonne de partitionnement. Dans le schéma de la table, cette colonne doit être de type
TIMESTAMP
,DATETIME
ouDATE
. - UNIT_TIME : type de partitionnement. Valeurs autorisées :
DAY
,HOUR
,MONTH
ouYEAR
. - EXPIRATION_TIME : délai d'expiration des partitions de la table, en secondes. L'option
--time_partitioning_expiration
est facultative. Pour en savoir plus, consultez la section Définir le délai d'expiration de la partition. - BOOLEAN : si
true
, les requêtes de cette table doivent inclure un filtre de partition. L'option--require_partition_filter
est facultative ; Pour en savoir plus, consultez la section Définir les exigences de filtrage des partitions. - PROJECT_ID : ID du projet S'il est omis, votre projet par défaut est utilisé.
- DATASET : nom d'un ensemble de données dans votre projet.
- TABLE : nom de la table à créer.
Pour connaître les autres options de ligne de commande, consultez la section
bq mk
.L'exemple suivant crée une table nommée
mytable
qui est partitionnée sur la colonnets
, à l'aide du partitionnement horaire. Le délai d'expiration du partitionnement est défini sur 259 200 secondes (trois jours).bq mk \ -t \ --schema 'ts:TIMESTAMP,qtr:STRING,sales:FLOAT' \ --time_partitioning_field ts \ --time_partitioning_type HOUR \ --time_partitioning_expiration 259200 \ mydataset.mytable
- SCHEMA : définition de schéma au format
Terraform
Utilisez la ressource google_bigquery_table
.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
L'exemple suivant crée une table nommée mytable
qui est partitionnée par jour :
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
API
Appelez la méthode tables.insert
avec une ressource de table définie qui spécifie les propriétés timePartitioning
et schema
.
Accéder
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Node.js
Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Créer une table partitionnée par date d'ingestion
Pour créer une table partitionnée par date d'ingestion vide avec une définition de schéma, procédez comme suit :
Console
Ouvrez la page BigQuery dans la console Google Cloud.
Dans le panneau Explorer, développez votre projet et sélectionnez un ensemble de données.
Développez l'option
Actions puis cliquez sur Ouvrir.Dans le panneau de détails, cliquez sur Créer une table
.Dans la section Source de la page Créer une table, sélectionnez Table vide.
Dans la section Destination :
- Sous Dataset name (Nom de l'ensemble de données), sélectionnez l'ensemble de données approprié.
- Dans le champ Nom de la table, saisissez le nom de la table.
- Vérifiez que Type de table est défini sur Table native.
Dans la section Schema (Schéma), saisissez la définition du schéma.
Dans la section Paramètres de partitionnement et de clustering, pour le champ Partitionnement, cliquez sur Partitionner par date d'ingestion.
(Facultatif) Pour exiger un filtre de partitionnement sur toutes les requêtes de cette table, cochez la case Demander un filtre de partitionnement. Exiger un filtre de partitionnement peut contribuer à réduire les coûts et à améliorer les performances. Pour en savoir plus, consultez la section Définir les exigences de filtrage des partitions.
Cliquez sur Créer une table.
SQL
Pour créer une table partitionnée par date d'ingestion, utilisez l'instruction CREATE TABLE
avec une clause PARTITION BY
qui partitionne selon _PARTITIONDATE
.
L'exemple suivant crée une table avec des partitions quotidiennes :
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
CREATE TABLE mydataset.newtable (transaction_id INT64) PARTITION BY _PARTITIONDATE OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
Utilisez la clause
OPTIONS
pour définir les options de la table, telles que l'expiration de la partition et les exigences de filtrage des partitions.Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
Le type de partitionnement par défaut pour le partitionnement par date d'ingestion est le partitionnement quotidien. Pour spécifier un type de partitionnement différent, incluez la fonction DATE_TRUNC
dans la clause PARTITION BY
. Par exemple, la requête suivante crée une table avec des partitions mensuelles :
CREATE TABLE mydataset.newtable (transaction_id INT64) PARTITION BY DATE_TRUNC(_PARTITIONTIME, MONTH) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Exécutez la commande
bq mk
avec l'option--table
(ou le raccourci-t
) :bq mk \ --table \ --schema SCHEMA \ --time_partitioning_type UNIT_TIME \ --time_partitioning_expiration EXPIRATION_TIME \ --require_partition_filter=BOOLEAN \ PROJECT_ID:DATASET.TABLE
Remplacez les éléments suivants :
- SCHEMA : définition au format
column:data_type,column:data_type
ou chemin d'accès à un fichier de schéma JSON sur votre ordinateur local. Pour en savoir plus, consultez la section Spécifier un schéma. - UNIT_TIME : type de partitionnement. Valeurs autorisées :
DAY
,HOUR
,MONTH
ouYEAR
. - EXPIRATION_TIME : délai d'expiration des partitions de la table, en secondes. L'option
--time_partitioning_expiration
est facultative. Pour en savoir plus, consultez la section Définir le délai d'expiration de la partition. - BOOLEAN : si
true
, les requêtes de cette table doivent inclure un filtre de partition. L'option--require_partition_filter
est facultative ; Pour en savoir plus, consultez la section Définir les exigences de filtrage des partitions. - PROJECT_ID : ID du projet S'il est omis, votre projet par défaut est utilisé.
- DATASET : nom d'un ensemble de données dans votre projet.
- TABLE : nom de la table à créer.
Pour connaître les autres options de ligne de commande, consultez la section
bq mk
.L'exemple suivant crée une table partitionnée par date d'ingestion nommée
mytable
. La table est partitionnée par jour, avec un délai d'expiration de partitionnement défini sur 259 200 secondes (trois jours).bq mk \ -t \ --schema qtr:STRING,sales:FLOAT,year:STRING \ --time_partitioning_type DAY \ --time_partitioning_expiration 259200 \ mydataset.mytable
- SCHEMA : définition au format
Terraform
Utilisez la ressource google_bigquery_table
.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
L'exemple suivant crée une table nommée mytable
qui est partitionnée par date d'ingestion :
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
API
Appelez la méthode tables.insert
avec une ressource de table définie qui spécifie les propriétés timePartitioning
et schema
.
Créer une table partitionnée par plages d'entiers
Pour créer une table partitionnée par plages d'entiers vide avec une définition de schéma, procédez comme suit :
Console
Ouvrez la page BigQuery dans la console Google Cloud.
Dans le panneau Explorer, développez votre projet et sélectionnez un ensemble de données.
Développez l'option
Actions puis cliquez sur Ouvrir.Dans le panneau de détails, cliquez sur Créer une table
.Dans la section Source de la page Créer une table, sélectionnez Table vide.
Dans la section Destination :
- Sous Dataset name (Nom de l'ensemble de données), sélectionnez l'ensemble de données approprié.
- Dans le champ Nom de la table, saisissez le nom de la table.
- Vérifiez que Type de table est défini sur Table native.
Dans la section Schéma, saisissez la définition du schéma. Assurez-vous que le schéma inclut une colonne
INTEGER
pour la colonne de partitionnement. Pour en savoir plus, consultez la section Spécifier un schéma.Dans la section Paramètres de partitionnement et de clustering, dans la liste déroulante Partitionnement, sélectionnez Partitionner par champ, puis choisissez la colonne de partitionnement. Cette option n'est disponible que si le schéma contient une colonne
INTEGER
.Indiquez des valeurs pour Start, End et Interval :
- Start est le début de la première plage de partitions (inclusive).
- End est la fin de la dernière plage de partitions (exclusive).
- Interval est la largeur de chaque plage de partitions.
Les valeurs non comprises dans ces plages sont incluses dans une partition
__UNPARTITIONED__
spéciale.(Facultatif) Pour exiger un filtre de partitionnement sur toutes les requêtes de cette table, cochez la case Demander un filtre de partitionnement. Exiger un filtre de partitionnement peut contribuer à réduire les coûts et à améliorer les performances. Pour en savoir plus, consultez la section Définir les exigences de filtrage des partitions.
Cliquez sur Créer une table.
SQL
Pour créer une table partitionnée par plages d'entiers, utilisez l'instruction LDD CREATE TABLE
avec une clause PARTITION BY
.
L'exemple suivant crée une table partitionnée dans la colonne customer_id
avec les valeurs commençant par 0 et finissant par 100, avec un intervalle de 10 :
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
CREATE TABLE mydataset.newtable (customer_id INT64, date1 DATE) PARTITION BY RANGE_BUCKET(customer_id, GENERATE_ARRAY(0, 100, 10)) OPTIONS ( require_partition_filter = TRUE);
Utilisez la clause
OPTIONS
pour définir les options de la table, telles que les exigences de filtrage des partitions.Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Exécutez la commande
bq mk
avec l'option--table
(ou le raccourci-t
) :bq mk \ --schema schema \ --range_partitioning=COLUMN_NAME,START,END,INTERVAL \ --require_partition_filter=BOOLEAN \ PROJECT_ID:DATASET.TABLE
Remplacez les éléments suivants :
- SCHEMA : définition de schéma intégrée au format
column:data_type,column:data_type
ou le chemin d'accès à un fichier de schéma JSON sur votre machine locale. Pour en savoir plus, consultez la section Spécifier un schéma. - COLUMN_NAME : nom de la colonne de partitionnement. Dans le schéma de la table, cette colonne doit être de type
INTEGER
. - START : début de la première plage de partition (inclusive).
- END : fin de la dernière plage de partitions (exclusive).
- INTERVAL : largeur de chaque plage de partition.
- BOOLEAN : si
true
, les requêtes de cette table doivent inclure un filtre de partition. L'option--require_partition_filter
est facultative ; Pour en savoir plus, consultez la section Définir les exigences de filtrage des partitions. - PROJECT_ID : ID du projet S'il est omis, votre projet par défaut est utilisé.
- DATASET : nom d'un ensemble de données dans votre projet.
- TABLE : nom de la table à créer.
Les valeurs non comprises dans la plage de partitions sont incluses dans une partition
__UNPARTITIONED__
spéciale.Pour connaître les autres options de ligne de commande, consultez la section
bq mk
.L'exemple suivant crée une table nommée
mytable
qui est partitionnée en fonction de la colonnecustomer_id
.bq mk \ -t \ --schema 'customer_id:INTEGER,qtr:STRING,sales:FLOAT' \ --range_partitioning=customer_id,0,100,10 \ mydataset.mytable
- SCHEMA : définition de schéma intégrée au format
Terraform
Utilisez la ressource google_bigquery_table
.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
L'exemple suivant crée une table nommée mytable
qui est partitionnée par plages d'entiers :
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
API
Appelez la méthode tables.insert
avec une ressource de table définie qui spécifie les propriétés rangePartitioning
et schema
.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Node.js
Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Créer une table partitionnée à partir d'un résultat de requête
Vous pouvez créer une table partitionnée à partir d'un résultat de requête de plusieurs manières :
- En SQL, utiliser une instruction
CREATE TABLE ... AS SELECT
. Vous pouvez utiliser cette approche pour créer une table partitionnée par colonnes d'unités de temps ou par plages d'entiers, mais pas par date d'ingestion. - Utiliser l'outil de ligne de commande bq ou l'API BigQuery pour définir une table de destination pour une requête. Lorsque la requête s'exécute, BigQuery écrit les résultats dans la table de destination. Vous pouvez utiliser cette approche pour n'importe quel type de partitionnement.
Appelez la méthode API
jobs.insert
et spécifiez le partitionnement dans la propriététimePartitioning
ou la propriétérangePartitioning
.
SQL
Utilisez l'instruction CREATE TABLE
avec une clause SELECT AS
pour la requête. Incluez une clause PARTITION BY
pour configurer le partitionnement.
L'exemple suivant crée une table partitionnée dans la colonne transaction_date
:
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date AS ( SELECT transaction_id, transaction_date FROM mydataset.mytable );
Utilisez la clause
OPTIONS
pour définir les options de la table, telles que les exigences de filtrage des partitions.Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Pour créer une table partitionnée à partir d'une requête, exécutez la commande
bq query
avec l'option--destination_table
et l'option--time_partitioning_type
.Partitionnement par colonnes d'unités de temps :
bq query \ --use_legacy_sql=false \ --destination_table TABLE_NAME \ --time_partitioning_field COLUMN \ --time_partitioning_type UNIT_TIME \ 'QUERY_STATEMENT'
Partitionnement par date d'ingestion :
bq query \ --use_legacy_sql=false \ --destination_table TABLE_NAME \ --time_partitioning_type UNIT_TIME \ 'QUERY_STATEMENT'
Partitionnement par plages d'entiers :
bq query \ --use_legacy_sql=false \ --destination_table PROJECT_ID:DATASET.TABLE \ --range_partitioning COLUMN,START,END,INTERVAL \ 'QUERY_STATEMENT'
Remplacez les éléments suivants :
- PROJECT_ID : ID du projet. S'il est omis, votre projet par défaut est utilisé.
- DATASET : nom d'un ensemble de données dans votre projet.
- TABLE : nom de la table à créer.
- COLUMN : nom de la colonne de partitionnement.
- UNIT_TIME : type de partitionnement. Valeurs autorisées :
DAY
,HOUR
,MONTH
ouYEAR
. - START : valeur de début inclusive du partitionnement par plages.
- END : valeur de fin exclusive du partitionnement par plages.
- INTERVAL : largeur de chaque plage au sein de la partition.
- QUERY_STATEMENT : requête utilisée pour renseigner la table.
L'exemple suivant crée une table partitionnée suivant la colonne
transaction_date
, à l'aide du partitionnement mensuel.bq query \ --use_legacy_sql=false \ --destination_table mydataset.newtable \ --time_partitioning_field transaction_date \ --time_partitioning_type MONTH \ 'SELECT transaction_id, transaction_date FROM mydataset.mytable'
L'exemple suivant crée une table partitionnée suivant la colonne
customer_id
, à l'aide du partitionnement par plages d'entiers.bq query \ --use_legacy_sql=false \ --destination_table mydataset.newtable \ --range_partitioning customer_id,0,100,10 \ 'SELECT * FROM mydataset.ponies'
Pour les tables partitionnées par date d'ingestion, vous pouvez également charger des données dans une partition spécifique à l'aide d'un décorateur de partition. L'exemple suivant crée une table partitionnée par date d'ingestion et charge des données dans la partition
20180201
(1er février 2018) :bq query \ --use_legacy_sql=false \ --time_partitioning_type=DAY \ --destination_table='newtable$20180201' \ 'SELECT * FROM mydataset.mytable'
API
Pour enregistrer des résultats de requête dans une table partitionnée, appelez la méthode jobs.insert
.
Configurez une tâche query
. Spécifiez la table de destination dans destinationTable
. Spécifiez le partitionnement dans la propriété timePartitioning
ou dans la propriété rangePartitioning
.
Convertir des tables segmentées par date en tables partitionnées par date d'ingestion
Si vous avez déjà créé des tables segmentées par date, vous pouvez convertir l'ensemble des tables associées en une seule table partitionnée par date d'ingestion en exécutant la commande partition
dans l'outil de ligne de commande bq.
bq --location=LOCATION partition \ --time_partitioning_type=PARTITION_TYPE \ --time_partitioning_expiration INTEGER \ PROJECT_ID:SOURCE_DATASET.SOURCE_TABLE \ PROJECT_ID:DESTINATION_DATASET.DESTINATION_TABLE
Remplacez les éléments suivants :
- LOCATION : nom de votre emplacement. L'option
--location
est facultative. - PARTITION_TYPE : type de partition. Les valeurs possibles sont
DAY
,HOUR
,MONTH
ouYEAR
. - INTEGER : délai d'expiration de la partition, en secondes. Il n'y a pas de valeur minimale. Le délai d'expiration correspond à la date UTC de la partition plus la valeur entière. L'option
time_partitioning_expiration
est facultative. - PROJECT_ID : ID de votre projet.
- SOURCE_DATASET : ensemble de données contenant les tables segmentées par date.
- SOURCE_TABLE : préfixe de vos tables segmentées par date.
- DESTINATION_DATASET : ensemble de données pour la nouvelle table partitionnée.
- DESTINATION_TABLE : nom de la table partitionnée à créer.
La commande partition
ne fonctionne pas avec les options --label
, --expiration
, --add_tags
ou --description
. Vous pouvez ajouter des libellés, un délai d'expiration de la table, des tags et une description à la table après l'avoir créée.
Lorsque vous exécutez la commande partition
, BigQuery crée un job de copie qui génère des partitions à partir des tables segmentées.
L'exemple suivant crée une table partitionnée par date d'ingestion nommée mytable_partitioned
à partir d'un ensemble de tables segmentées par date avec le préfixe sourcetable_
. La nouvelle table est partitionnée quotidiennement, avec un délai d'expiration de partitionnement de 259 200 secondes (trois jours).
bq partition \
--time_partitioning_type=DAY \
--time_partitioning_expiration 259200 \
mydataset.sourcetable_ \
mydataset.mytable_partitioned
Si les tables segmentées par date sont sourcetable_20180126
et sourcetable_20180127
, cette commande crée les partitions suivantes : mydataset.mytable_partitioned$20180126
et mydataset.mytable_partitioned$20180127
.
Sécurité des tables partitionnées
Le contrôle d'accès des tables partitionnées est identique à celui des tables standards. Pour plus d'informations, consultez la page Présentation des contrôles d'accès aux tables.
Étapes suivantes
- Pour savoir comment gérer et mettre à jour des tables partitionnées, consultez la page Gérer des tables partitionnées.
- Pour en savoir plus sur l'interrogation des tables partitionnées, consultez la page Interroger des tables partitionnées.