Exécution d'une copie complète - Amazon Redshift

Exécution d'une copie complète

Une copie recrée et remplit une table à l'aide d'une insertion en bloc, qui trie automatiquement la table. Si une table possède une grande région non triée, une copie complète est beaucoup plus rapide qu'une opération VACUUM. L'inconvénient réside dans le fait que vous ne pouvez pas effectuer de mises à jour simultanées lors d'une opération de copie complète sauf si vous pouvez la suivre et déplacer les mises à jour delta dans la nouvelle table à la fin du processus. Une opération VACUUM prend automatiquement en charge les mises à jour simultanées.

Vous pouvez choisir l'une des quatre méthodes pour créer une copie de la table d'origine :

  • Utilisez la table DDL d'origine.

    Si la commande CREATE TABLE DDL est disponible, il s'agit de la méthode préférée et la plus rapide. Si vous créez une nouvelle table, vous pouvez spécifier tous les attributs de table et de colonne, y compris la clé primaire et les clés étrangères.

    Note

    Si le DDL d'origine n'est pas disponible, vous pouvez recréer le DDL en exécutant un script appelé v_generate_tbl_ddl. Vous pouvez télécharger le script depuis amazon-redshift-utils, qui fait partie du référentiel GitHub Amazon Web Services - Labs.

  • Utilisez CREATE TABLE LIKE.

    Si le DDL d'origine n'est pas disponible, vous pouvez utiliser CREATE TABLE LIKE pour recréer la table d'origine. La nouvelle table hérite des attributs encoding, distribution key, sort key et not-null de la table parent. La nouvelle table n'hérite pas de la clé primaire et des attributs de clés étrangères de la table parent, mais vous pouvez les ajouter avec ALTER TABLE.

  • Créez une table temporaire et tronquez la table d'origine.

    Si vous devez conserver les attributs de clé primaire et de clé étrangère de la table parent, ou si la table parent comporte des dépendances, vous pouvez utiliser CREATE TABLE ... AS (CTAS) pour créer une table temporaire, puis tronquer la table d'origine et la remplir à partir de la table temporaire.

    L'utilisation d'une table temporaire améliore les performances de façon significative par rapport à l'utilisation d'une table permanente, mais il existe un risque de perte des données. Une table temporaire est automatiquement supprimée à la fin de la séance dans laquelle elle a été créée. TRUNCATE valide immédiatement, même à l'intérieur d'un bloc de transaction. Si l'opération TRUNCATE réussit, mais que la séance se termine avant la fin de l'opération INSERT suivante, les données sont perdues. Si la perte de données n'est pas acceptable, utilisez une table permanente.

Après avoir créé une copie d'une table, vous devrez peut-être accorder l'accès à la nouvelle table. Vous pouvez utiliser GRANT pour définir les privilèges d'accès.

Pour exécuter une copie complète à l'aide de la table DDL d'origine

  1. (Facultatif) Recréez la table DDL en exécutant un script appelé v_generate_tbl_ddl.

  2. Créer une copie de la table à l'aide du CREATE TABLE DDL d'origine.

  3. Utilisez une instruction INSERT INTO … SELECT pour remplir la copie avec les données de la table d'origine.

  4. Supprimez la table d'origine.

  5. Utilisez une instruction ALTER TABLE pour renommer la copie avec le nom d'origine de la table.

L'exemple suivant effectue une copie complète de la table SALES à l'aide d'un doublon de SALES nommé SALESCOPY.

create table salescopy ( … ); insert into salescopy (select * from sales); drop table sales; alter table salescopy rename to sales;

Pour effectuer une copie complète à l'aide de CREATE TABLE LIKE

  1. Créez une table à l'aide de CREATE TABLE LIKE.

  2. Utilisez une instruction INSERT INTO … SELECT pour copier les lignes de la table en cours vers la nouvelle table.

  3. Supprimez la table actuelle.

  4. Utilisez une instruction ALTER TABLE pour renommer la nouvelle table avec le nom d'origine de la table.

L'exemple suivant effectue une copie complète sur la table SALES à l'aide de CREATE TABLE LIKE.

create table likesales (like sales); insert into likesales (select * from sales); drop table sales; alter table likesales rename to sales;

Pour effectuer une copie en créant une table temporaire et en tronquant la table d'origine

  1. Utilisez CREATE TABLE AS pour créer une table temporaire avec les lignes de la table d'origine.

  2. Tronquez la table en cours.

  3. Utilisez une instruction INSERT INTO … SELECT pour copier les lignes de la table temporaire vers la table d'origine.

  4. Suppression de la table temporaire.

L'exemple suivant effectue une copie complète sur la table SALES en créant une table temporaire et en tronquant la table d'origine :

create temp table salestemp as select * from sales; truncate sales; insert into sales (select * from salestemp); drop table salestemp;