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

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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. Nous vous recommandons d’effectuer des mises à jour simultanées dans le cadre d’une opération de copie complète seulement si vous pouvez en assurer le suivi. Une fois le processus terminé, déplacez les mises à jour delta dans la nouvelle table. Une VACUUM opération 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 le tableau d'origineDDL.

    Si elle CREATE TABLE DDL est disponible, il s'agit de la méthode la plus rapide et la plus recommandée. 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. Vous pouvez retrouver l'original DDL en utilisant la SHOW TABLE fonction.

  • Utiliser CREATE TABLELIKE.

    Si l'original n'DDLest pas disponible, vous pouvez l'utiliser CREATE TABLE LIKE pour recréer le tableau 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. Si la table parent comporte des dépendances, vous pouvez utiliser CREATETABLE... AS (CTAS) pour créer une table temporaire. Tronquez ensuite la table d’origine et remplissez-la à 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. TRUNCATEcommet immédiatement, même s'il se trouve à l'intérieur d'un bloc de transaction. Si l'INSERTopération TRUNCATE réussit mais que la session s'arrête avant la fin des opérations suivantes, 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 pouvez être amené à accorder l’accès à la nouvelle table. Vous pouvez utiliser GRANT pour définir les privilèges d’accès. Pour consulter et octroyer tous les privilèges d’accès d’une table, vous devez être l’une des personnes suivantes :

  • Un super-utilisateur.

  • Le propriétaire de la table que vous souhaitez copier.

  • Un utilisateur ayant le ACCESS SYSTEM TABLE privilège de voir les privilèges de la table et disposant du privilège d'octroi pour toutes les autorisations pertinentes.

En outre, vous pouvez être amené à octroyer une autorisation d’utilisation pour le schéma dans lequel se trouve votre copie complète. L’octroi d’une autorisation d’utilisation est nécessaire si le schéma de votre copie complète est différent du schéma de la table d’origine, et s’il ne s’agit pas non plus du schéma public. Pour consulter et octroyer des privilèges d’utilisation, vous devez être l’une des personnes suivantes :

  • Un super-utilisateur.

  • Un utilisateur qui peut accorder l'USAGEautorisation pour le schéma de la copie profonde.

Pour effectuer une copie approfondie à l'aide du tableau d'origine DDL
  1. (Facultatif) Recréez la table DDL en exécutant un script appelév_generate_tbl_ddl.

  2. Créez une copie du tableau en utilisant l'original CREATE TABLEDDL.

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

  4. Vérifiez les autorisations octroyées pour l’ancienne table. Vous pouvez voir ces autorisations dans la vue PRIVILEGES système SVV RELATION _ _.

  5. Si nécessaire, accordez les autorisations de l’ancienne table à la nouvelle.

  6. Accordez l’autorisation d’utilisation à tous les groupes et utilisateurs qui disposent de privilèges dans la table d’origine. Cette étape n’est pas nécessaire si la table de la copie complète se trouve dans le schéma public ou dans le même schéma que la table d’origine.

  7. Supprimez la table d’origine.

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

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

--Create a copy of the original table in the sample_namespace namespace using the original CREATE TABLE DDL. create table sample_namespace.sample_copy ( … ); --Populate the copy with data from the original table in the public namespace. insert into sample_namespace.sample_copy (select * from public.sample); --Check SVV_RELATION_PRIVILEGES for the original table's privileges. select * from svv_relation_privileges where namespace_name = 'public' and relation_name = 'sample' order by identity_type, identity_id, privilege_type; --Grant the original table's privileges to the copy table. grant DELETE on table sample_namespace.sample_copy to group group1; grant INSERT, UPDATE on table sample_namespace.sample_copy to group group2; grant SELECT on table sample_namespace.sample_copy to user1; grant INSERT, SELECT, UPDATE on table sample_namespace.sample_copy to user2; --Grant usage permission to every group and user that has privileges in the original table. grant USAGE on schema sample_namespace to group group1, group group2, user1, user2; --Drop the original table. drop table public.sample; --Rename the copy table to match the original table's name. alter table sample_namespace.sample_copy rename to sample;
Pour effectuer une copie complète à l'aide de CREATE TABLE LIKE
  1. Créez une nouvelle table à l'aide de CREATE TABLELIKE.

  2. Utilisez une SELECT instruction INSERTINTO... pour copier les lignes de la table actuelle vers la nouvelle table.

  3. Vérifiez les autorisations octroyées pour l’ancienne table. Vous pouvez voir ces autorisations dans la vue PRIVILEGES système SVV RELATION _ _.

  4. Si nécessaire, accordez les autorisations de l’ancienne table à la nouvelle.

  5. Accordez l’autorisation d’utilisation à tous les groupes et utilisateurs qui disposent de privilèges dans la table d’origine. Cette étape n’est pas nécessaire si la table de la copie complète se trouve dans le schéma public ou dans le même schéma que la table d’origine.

  6. Supprimez la table actuelle.

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

L'exemple suivant effectue une copie complète de la SAMPLE table à l'aide de CREATE TABLELIKE.

--Create a copy of the original table in the sample_namespace namespace using CREATE TABLE LIKE. create table sameple_namespace.sample_copy (like public.sample); --Populate the copy with data from the original table. insert into sample_namespace.sample_copy (select * from public.sample); --Check SVV_RELATION_PRIVILEGES for the original table's privileges. select * from svv_relation_privileges where namespace_name = 'public' and relation_name = 'sample' order by identity_type, identity_id, privilege_type; --Grant the original table's privileges to the copy table. grant DELETE on table sample_namespace.sample_copy to group group1; grant INSERT, UPDATE on table sample_namespace.sample_copy to group group2; grant SELECT on table sample_namespace.sample_copy to user1; grant INSERT, SELECT, UPDATE on table sample_namespace.sample_copy to user2; --Grant usage permission to every group and user that has privileges in the original table. grant USAGE on schema sample_namespace to group group1, group group2, user1, user2; --Drop the original table. drop table public.sample; --Rename the copy table to match the original table's name. alter table sample_namespace.sample_copy rename to sample;
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 SELECT instruction INSERTINTO... 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 de la SALES table en créant une table temporaire et en tronquant la table d'origine. Comme la table d’origine est conservée, vous n’avez pas besoin d’accorder d’autorisations à la table de copie.

--Create a temp table copy using CREATE TABLE AS. create temp table salestemp as select * from sales; --Truncate the original table. truncate sales; --Copy the rows from the temporary table to the original table. insert into sales (select * from salestemp); --Drop the temporary table. drop table salestemp;