Pourquoi Amazon Redshift exécute-t-il le processus COPY ANALYZE lorsque STATUPDATE est désactivé ?

Date de la dernière mise à jour : 25/03/2020

J'ai essayé d'utiliser la commande COPY pour charger des données dans une nouvelle table dans Amazon Redshift. J'ai même ajouté le paramètre COMPUPDATE OFF. Pourquoi la commande COPY ANALYZE est-elle toujours exécutée ?

Brève description

Avant de créer une table dans Amazon Redshift, sélectionnez le style de distribution de votre table. Si une table ne spécifie pas de style de distribution, elle utilise par défaut la distribution AUTO. La fonction de distribution AUTO d'Amazon Redshift utilise ensuite le processus COPY ANALYZE pour déterminer si la table doit utiliser la distribution EVEN ou ALL.

Remarque : le paramètre COMPUPDATE OFF exécute toujours la commande COPY ANALYZE sur les tables à l'aide d'un style de distribution AUTO. Le paramètre STATUPDATE OFF ne désactive pas ou ne réprime pas la commande COPY ANALYZE .

Solution

1.    Vérifiez le style de distribution actuel d'une table en exécutant une requête dans la vue PG_CLASS_INFO :

select relname, releffectivediststyle from PG_CLASS_INFo where relname = 'rs_example_test'

2.    Vérifiez si votre style de distribution est défini sur la distribution AUTO :

select relname, releffectivediststyle from PG_CLASS_INFo where relname = 'rs_test2'
relname | releffectivediststyle
rs_test2 | 10

Remarque : si la valeur releffectivediststyle est de 10 ou 11, la table a été créée sans spécifier de style de distribution. Amazon Redshift attribue ensuite le style de distribution à la distribution AUTO. Par défaut, Amazon Redshift applique la distribution AUTO si un style de distribution n'est pas spécifié dans l'instruction CREATE TABLE.

3.    Si la distribution AUTO est activée, créez une table avec un style de distribution défini. La spécification d'un style de distribution empêche l'exécution de la commande COPY ANALYZE.

L'exemple suivant spécifie un style de distribution EVEN :

create table rs_example_test (id int)diststyle even;

Pour plus d'informations sur les styles de distribution, consultez Choisir un style de distribution de données.

4.    Utilisez la commande COPY pour charger les données dans votre table, puis ajoutez-les avec les paramètres STATUPDATE OFF.

Remarque : une bonne pratique consiste à utiliser la commande COPY pour charger de grandes quantités de données, au lieu d'utiliser des instructions INSERT individuelles. Cela réduit le risque de problèmes de performances.

5.    Exécutez une requête sur la table système SVL_STATEMENTTEXT, puis filtrez par ID de processus (PID) associé à votre session :

select userid, xid, pid, trim(label) as label, starttime, endtime, sequence, trim(type) as type, left(text,60) text from svl_statementtext where pid = 26815 order by xid, starttime, sequence;

La syntaxe ci-dessus vérifie si la commande COPY ANALYZE a été exécutée dans le cadre de la transaction COPY.

La sortie doit ressembler à ce qui suit :

userid  xid	    pid	    label	  starttime	            endtime	           sequence	 type	  text
100	   78915	26815   default	  2019-03-19  14:06:19	2019-03-19 14:06:21	  0	     QUERY	  copy rs_test3 from 's3://xxxxx-rs-log/AWSLogs/rs_test2.csv'\
100	   78915	26815   default	  2019-03-19  14:06:21	2019-03-19 14:06:21	  0	     UTILITY  COMMIT

Cela confirme que la commande COPY ANALYZE ne s'exécute plus dans le cadre de la transaction COPY.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?