Comment dupliquer une table en SQL ?
À retenir
- Pour dupliquer une table en SQL, utilisez
CREATE TABLE ... AS SELECT * FROM ...
- Avec BigQuery, vous pouvez également utiliser
CREATE TABLE ... LIKE ...
puisINSERT INTO ... SELECT * FROM ...
- Les contraintes (clés primaires, index) ne sont pas copiées automatiquement avec ces méthodes
- Vous pouvez choisir de copier uniquement la structure, uniquement les données, ou les deux
- Surveillez les quotas et coûts associés à la duplication de tables volumineuses dans BigQuery
Introduction
La duplication de tables en SQL est une opération courante mais essentielle dans l'arsenal de tout data engineer. Elle consiste à créer une copie exacte ou partielle d'une table existante, soit en conservant uniquement sa structure, soit en incluant également ses données. Cette technique s'avère particulièrement utile pour créer des environnements de test, sauvegarder des données avant modifications importantes, ou encore préparer des jeux de données pour des analyses spécifiques.
Dans cet article, nous allons explorer les différentes méthodes pour dupliquer une table en SQL standard et en BigQuery, avec des exemples concrets qui vous permettront de maîtriser cette opération fondamentale.
Cas concrets d'utilisation
Environnement de test pour le retail
Imaginez que vous travaillez pour une chaîne de magasins et que vous devez modifier la structure d'une table de transactions. Avant d'appliquer ces modifications en production, vous créez une copie de la table pour tester vos changements sans risquer d'endommager les données originales.
Sauvegarde avant nettoyage de données pour l'e-commerce
Dans le contexte d'une plateforme e-commerce, vous pourriez avoir besoin de nettoyer une table de produits en supprimant les articles obsolètes. Pour garder une trace de l'état initial, vous dupliquez la table avant d'effectuer vos opérations de nettoyage.
Analyses marketing segmentées
Pour réaliser des analyses marketing spécifiques, vous pouvez créer une copie d'une table clients contenant uniquement un segment particulier (par exemple, les clients premium), permettant ainsi des analyses plus rapides sur un sous-ensemble de données.
Migration de données
Lors de la refonte d'un système, vous devrez souvent dupliquer des tables pour les migrer vers une nouvelle structure tout en conservant les données originales intactes.
Méthodes pour dupliquer une table
En SQL Standard
1. Copier la structure et les données
La méthode la plus courante pour dupliquer entièrement une table est d'utiliser CREATE TABLE ... AS SELECT
:
CREATE TABLE newTable AS
SELECT * FROM originalTable;
Cette commande crée une nouvelle table avec la même structure et les mêmes données que la table d'origine.
2. Copier uniquement la structure
Si vous souhaitez uniquement copier la structure sans les données:
CREATE TABLE newTable AS
SELECT * FROM originalTable
WHERE 1 = 0;
La condition WHERE 1 = 0
étant toujours fausse, aucune ligne n'est sélectionnée, mais la structure est conservée.
3. Copier la structure avec des conditions sur les données
Pour créer une copie partielle avec seulement certaines lignes:
CREATE TABLE newCustomerSegment AS
SELECT * FROM customers
WHERE customerType = 'Premium';
En BigQuery
BigQuery offre plusieurs approches pour dupliquer des tables:
1. Copier la structure et les données (méthode SQL standard)
CREATE TABLE `myProject.myDataset.newTable` AS
SELECT * FROM `myProject.myDataset.originalTable`;
2. Utiliser LIKE pour copier la structure puis INSERT pour les données
-- Copier uniquement la structure
CREATE TABLE `myProject.myDataset.newTable`
LIKE `myProject.myDataset.originalTable`;
-- Copier les données dans un second temps
INSERT INTO `myProject.myDataset.newTable`
SELECT * FROM `myProject.myDataset.originalTable`;
Cette approche en deux étapes vous donne plus de flexibilité.
3. Copier une table entre datasets ou projets
CREATE TABLE `destinationProject.destinationDataset.newTable` AS
SELECT * FROM `sourceProject.sourceDataset.originalTable`;
4. Utiliser les commandes BigQuery spécifiques (via l'interface ou CLI)
Bien que nous nous concentrons sur SQL, notez que BigQuery propose aussi des commandes spécifiques comme bq cp
pour copier des tables.
Exemple complet pas à pas : cas d'un détaillant
Imaginons un détaillant qui souhaite préparer une analyse de ses ventes. Nous allons créer des tables de test puis les dupliquer de différentes façons.
Étape 1 : Création des tables initiales
-- Création de la table des produits
CREATE TABLE `retailProject.salesAnalysis.products` (
productId INT64,
productName STRING,
category STRING,
price FLOAT64,
stockQuantity INT64
);
-- Insertion de données dans la table des produits
INSERT INTO `retailProject.salesAnalysis.products`
VALUES
(1, 'Téléviseur 4K', 'Électronique', 799.99, 45),
(2, 'Machine à café', 'Électroménager', 129.99, 78),
(3, 'Ordinateur portable', 'Informatique', 1299.99, 23),
(4, 'Casque audio', 'Électronique', 149.99, 112),
(5, 'Tablette tactile', 'Informatique', 399.99, 56);
-- Création de la table des ventes
CREATE TABLE `retailProject.salesAnalysis.sales` (
saleId INT64,
productId INT64,
saleDate DATE,
quantity INT64,
totalAmount FLOAT64,
storeId INT64
);
-- Insertion de données dans la table des ventes
INSERT INTO `retailProject.salesAnalysis.sales`
VALUES
(101, 1, '2025-08-15', 2, 1599.98, 5),
(102, 3, '2025-08-15', 1, 1299.99, 5),
(103, 2, '2025-08-16', 3, 389.97, 7),
(104, 4, '2025-08-17', 2, 299.98, 5),
(105, 1, '2025-08-18', 1, 799.99, 8),
(106, 5, '2025-08-19', 2, 799.98, 7),
(107, 4, '2025-08-20', 5, 749.95, 8);
Étape 2 : Duplication complète d'une table
Pour créer une copie complète de la table des ventes pour des tests:
CREATE TABLE `retailProject.salesAnalysis.salesBackup` AS
SELECT * FROM `retailProject.salesAnalysis.sales`;
Étape 3 : Duplication de la structure uniquement
Pour préparer une nouvelle table des ventes pour l'année prochaine:
CREATE TABLE `retailProject.salesAnalysis.sales2026` AS
SELECT * FROM `retailProject.salesAnalysis.sales`
WHERE 1 = 0;
Étape 4 : Duplication avec filtrage des données
Pour créer une table spécifique aux ventes d'électronique:
CREATE TABLE `retailProject.salesAnalysis.electronicsSales` AS
SELECT s.*
FROM `retailProject.salesAnalysis.sales` s
JOIN `retailProject.salesAnalysis.products` p
ON s.productId = p.productId
WHERE p.category = 'Électronique';
Étape 5 : Duplication avec transformation des données
Pour créer une table d'analyse avec des champs calculés:
CREATE TABLE `retailProject.salesAnalysis.salesPerformance` AS
SELECT
s.saleId,
p.productName,
p.category,
s.saleDate,
s.quantity,
s.totalAmount,
(s.totalAmount / s.quantity) AS unitPrice,
s.storeId,
EXTRACT(MONTH FROM s.saleDate) AS saleMonth
FROM `retailProject.salesAnalysis.sales` s
JOIN `retailProject.salesAnalysis.products` p
ON s.productId = p.productId;
Étape 6 : Duplication avec la méthode en deux temps de BigQuery
-- Copie de la structure
CREATE TABLE `retailProject.salesAnalysis.salesArchive`
LIKE `retailProject.salesAnalysis.sales`;
-- Copie des données du premier semestre uniquement
INSERT INTO `retailProject.salesAnalysis.salesArchive`
SELECT * FROM `retailProject.salesAnalysis.sales`
WHERE saleDate BETWEEN '2025-01-01' AND '2025-06-30';
Points importants à retenir
Bonnes pratiques
- Surveillez l'espace de stockage disponible avant de dupliquer des tables volumineuses
- Dans BigQuery, soyez conscient des coûts associés aux requêtes de duplication sur de grandes tables
- Documentez vos tables dupliquées avec des métadonnées appropriées (description, commentaires)
- Utilisez des noms clairs pour les tables dupliquées, indiquant leur finalité
Limites et pièges à éviter
- Les contraintes (clés primaires, clés étrangères, index) ne sont généralement pas copiées avec
CREATE TABLE AS SELECT
- Les permissions sur la table originale ne sont pas automatiquement transférées à la nouvelle table
- Les partitionnements et regroupements (clustering) ne sont pas automatiquement reproduits en SQL standard
- Dans BigQuery, veillez à respecter les quotas de votre projet lors de la duplication de tables volumineuses
Spécificités BigQuery
- BigQuery facture selon la quantité de données traitées lors des requêtes SELECT; dupliquer de très grandes tables peut donc avoir un impact sur vos coûts
- Utilisez la commande
LIKE
pour préserver les schémas de partitionnement et de clustering - Pour les tables très volumineuses, envisagez d'utiliser les commandes administratives BigQuery plutôt que SQL
Conclusion
La duplication de tables en SQL est une compétence fondamentale qui offre flexibilité et sécurité dans la gestion des données. Que vous cherchiez à créer un environnement de test, à sauvegarder des données avant modifications, ou à préparer des analyses spécifiques, les techniques présentées dans cet article vous permettront de réaliser ces opérations efficacement.
En maîtrisant les différentes approches de duplication en SQL standard et BigQuery, vous pourrez adapter votre stratégie selon vos besoins spécifiques : copier uniquement la structure, dupliquer les données complètes, ou créer des sous-ensembles filtrés pour des analyses ciblées.
Quelle que soit votre situation, gardez toujours à l'esprit les considérations de performance et de coût, particulièrement dans un environnement cloud comme BigQuery où le traitement de données massives peut engendrer des frais significatifs.
Merci de votre lecture !