2017-05-17 1 views
0

Je souhaite surveiller l'état d'obsolescence de nos données en configurant une requête qui recrée la dernière écriture dans chaque table de Redshift. Chaque table a un champ created_at, et je peux tirer tous les noms de table via pg_table_def, mais il n'y a aucun moyen de mettre en place sql dynamique Redshift (par exemple SELECT max(created_at) FROM {table}).Obtenir l'horodatage de la dernière mise à jour des tables redshift

Je l'ai fait une plongée à travers les autres tables d'administration et des vues, mais rien Je suis sûr que c'est un problème résolu, quelqu'un a un conseil pour la façon dont ils l'ont mis ensemble?

+0

Vous auriez besoin d'écrire une application pour interroger une liste de noms de tables, puis de les parcourir et de créer une requête pour chaque table. Ce ne serait que quelques lignes de code en Python. –

+0

Avez-vous besoin de le faire dynamiquement? S'il s'agit d'une liste fixe de tables, vous pouvez regrouper plusieurs instructions select dans une vue. – Nathan

+0

@Nathan c'est corrigé dès maintenant, mais notre équipe ajoutera/supprimera sans aucun doute des tables à l'avenir et je préférerais ne pas constamment mettre à jour cette liste. – ScottieB

Répondre

0

J'avais une exigence similaire pour mettre à jour les derniers temps d'accès pour les tables en utilisant une colonne LAST_UPDATED dans chaque Voici comment je l'ai accompli:

UPDATE UPDATION_RECORD_TABLE SET LAST_MODIFIED = (SELECT MAX(LAST_UPDATED) FROM %s) WHERE TABLE_NAME = '%s'; 

Ici, UPDATION_RECORD_TABLE est une table comportant deux colonnes, le nom des tables et leurs dernières dates de mise à jour. La requête SQL ci-dessus lorsqu'il est exécuté en utilisant le code Python (en utilisant pyscopg2), les valeurs %s peut être remplacé par le nom de la table, après une boucle à travers une liste de tables, que j'allé chercher déjà à l'aide SELECT table_name FROM information_schema.tables

Hope this helps.