Copier des données à partir d'Amazon S3 pour Redshift et d'éviter les doublons
Je copie des données à partir d'Amazon S3 pour Redshift. Au cours de ce processus, j'ai besoin d'éviter que les mêmes fichiers chargés à nouveau. Je n'ai pas de contraintes d'unicité sur mon Décalage vers le rouge de la table. Est-il un moyen de mettre en œuvre ce à l'aide de la commande copier?
http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html
J'ai essayé d'ajouter la contrainte unique et réglage de la colonne comme clé primaire avec pas de chance. Redshift ne semblent pas soutenir unique/les contraintes de clé primaire.
OriginalL'auteur Rupesh Nangalia | 2013-03-29
Vous devez vous connecter pour publier un commentaire.
Ma solution est de lancer un "supprimer" commande "copier" sur la table. Dans mon cas d'utilisation, chaque fois que j'ai besoin de copier les enregistrements d'une image quotidienne de décalage vers le rouge de la table, donc je peux utiliser le "supprimer" de commande pour s'assurer dupliqué enregistrements sont supprimés, puis exécuter la 'copie' de la commande.
preemptying les tables est toujours une bonne pratique
OriginalL'auteur ciphor
Comme user1045047 mentionné, Amazon Redshift ne prend pas en charge les contraintes unique, donc je cherche le moyen de supprimer les doublons d'une table avec une instruction delete.
Enfin, j'ai trouvé un moyen raisonnable.
Amazon Redshift prend en charge la création d'une colonne d'IDENTITÉ qui est stocké dans une auto-généré numéro unique.
http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html
Le sql suivant est pour PostgreSQL pour supprimer des enregistrements dupliqués avec OID c'est-à colonne unique, et vous pouvez l'utiliser sql par le remplacement de l'OID avec la colonne d'identité.
Voici un exemple que j'ai testé sur mon Amazon Redshift cluster.
Aussi il fonctionne avec la commande de COPIE de ce genre.
auto_id_table.csv
copie sql
L'avantage de cette voie est que vous n'avez pas besoin d'exécuter des instructions DDL. Cependant il ne fonctionne pas avec les tables existantes qui n'ont pas une colonne d'identité en raison d'une colonne d'identité ne peut pas être ajouté à une table existante. La seule façon de supprimer des enregistrements dupliqués avec des tables existantes est la migration de tous les dossiers de ce genre. (même que user1045047 réponse)
copy sql
indique qu'il gère les doublons correctement. Pour le jeu de données que vous êtes en train de charger,audo_id_table.csv
, il a simplement 3 lignes uniques, non?Le point est que vous pouvez supprimer des enregistrements dupliqués facilement. Même si vous exécutez
copy auto_id_table
trois fois et obtenir trois enregistrements dupliqués, ceux dupliqué enregistrements seront supprimés avec le ci-dessusdelete from auto_id_table....
requête.Avec cette approche, vous avez besoin pour exécuter le VIDE commande? J'ai lu ici:
If you use multiple concurrent COPY commands to load one table from multiple files, Amazon Redshift is forced to perform a serialized load, which is much slower and requires a VACUUM at the end if the table has a sort column defined
De VIDE et d'ANALYSER est préférable, mais pas nécessaire parce que le VIDE prend de certains coûts. Dans mon cas, puisque le nombre de doublons sont petits, j'ai l'annexe de VIDE une fois par jour, donc je n'ai pas l'exécuter avec cette requête.
OriginalL'auteur Masashi Miyazaki
Mmm..
Ce sujet juste jamais le chargement de données dans votre maîtrise de la table directement.
Des mesures pour éviter la duplication:
c'est aussi
superun peu rapide, et recommandé par redshift docs.Je suppose que super rapide est tout à fait subjective. J'ai seulement travaillé dans les millions de lignes, pas beaucoup de milliards...mais il n'y a pas un processus plus rapide que cela pour s'assurer qu'aucun des enregistrements en double que j'ai encore entendu parler. (Intéressé à entendre, si vous avez quelque chose)
Problème avec ceci est que lors de la mise en scène de la table a des enregistrements en double.
Ouais, si la mise de table obtient des lignes en double vous pouvez insérer des doublons. Ce que nous faisons est d'écrire notre fusion sql avec cela à l'esprit,...plus ou moins
group by
la clé composite et faire tout le nécessaire agrégats oufirst_value
pour éviter les doublons lors de l'insertion.OriginalL'auteur Kyle Gobel
Actuellement, il n'existe aucun moyen de supprimer les doublons de redshift. Redshift ne supporte pas de clé primaire/clé unique contraintes, et aussi à supprimer les doublons en utilisant le numéro de ligne n'est pas une option (suppression de lignes avec une ligne nombre plus grand que 1) l'opération de suppression sur redshift ne permet pas d'instructions complexes (Également le concept de numéro de ligne n'est pas présente dans le redshift).
Le meilleur moyen de supprimer les doublons est d'écrire un cron/quartz de travail qui permettrait de sélectionner toutes les lignes distinctes, les mettre dans une table séparée et puis renommez la table à votre table d'origine.
Insert into temp_originalTable (Select Distinct from originalTable)
Drop table originalTable
Alter table temp_originalTable rename to originalTable
Avez-vous songé à l'aide d'une transaction?
OriginalL'auteur user1045047