2017-09-24 1 views
1

J'ai une table de redshift et il stocke beaucoup de données. Tous les week-ends, je vais utiliser manuellement Workbench TRUNCATE la semaine dernière des données dont je n'ai plus besoin. je manuellement pour exécuterAutomatiser redshift tronquer/supprimer des données après une période de rétention

DELETE FROM tableName WHERE created_date BETWEEN timeStamp1 AND timeStamp2; 

Est-il possible d'avoir un moyen de dire à la table ou avoir une politique d'expiration qui supprime les données tous les dimanches pour moi?
Sinon, existe-t-il un moyen d'automatiser le processus de suppression tous les 7 jours? Une sorte de script shell ou de travail cron dans nodeJS qui le fait.

Répondre

3

Non, il n'existe aucune capacité intégrée permettant d'exécuter régulièrement des commandes sur Amazon Redshift . Vous pouvez cependant exécuter un script sur un autre système qui se connecte à Redshift et exécute la commande.

Par exemple, un travail cron appelant psql pour se connecter à Redshift et exécuter la commande. Cela pourrait être fait dans un script d'une ligne.

Vous pouvez également configurer une fonction AWS Lambda pour vous connecter à Redshift et exécuter la commande. (Vous devez écrire la fonction vous-même, mais il existe des bibliothèques qui facilitent cela.) Ensuite, vous devez configurer Amazon CloudWatch Events pour déclencher la fonction Lambda selon le calendrier souhaité (par exemple, une fois par semaine).

Une stratégie commune consiste à stocker les données dans des tables séparées par période de temps (par exemple un mois, mais dans votre cas ce serait une semaine). Ensuite, définissez un affichage qui combine plusieurs tables. Pour supprimer une semaine de données, supprimez simplement la table qui contient cette semaine de données, créez une nouvelle table pour les données de cette semaine, puis mettez à jour la vue pour qu'elle pointe vers la nouvelle table mais pas vers l'ancienne.

Soit dit en passant ...

Votre exemple utilise la commande DELETE, qui est pas la même chose que la commande TRUNCATE.

TRUNCATE supprime toutes les données d'une table. C'est un moyen efficace de vider complètement une table.

DELETE est bon pour supprimer une partie d'une table mais elle marque simplement les lignes comme effacées. Les données occupent toujours l'espace sur le disque. Par conséquent, il est recommandé que vous VACUUM le tableau après la suppression d'une quantité importante de données.

+0

Grande réponse. Explique très bien le scénario et les options disponibles. Merci beaucoup. Très appréciée. –