-1

J'ai mon entrepôt de données construit sur Amazon Redshift. Le problème que je suis actuellement confronté est, j'ai une énorme table de faits (avec environ 500M lignes) dans mon schéma avec des données pour environ 10 clients. J'ai des processus qui périodiquement (la plupart du temps quotidiennement) génère des données pour cette table de faits et nécessite une actualisation, ce qui signifie - supprimer les anciennes données et insérer les données nouvellement générées. Le problème est que cette opération de suppression/insertion en bloc laisse des trous dans ma table de faits avec un besoin de VACUUM qui prend du temps et ne peut donc pas être fait immédiatement. Et cette table de faits (avec des trous énormes dus aux données supprimées) a un impact dramatique sur le temps d'instantané qui consomme des données des tables de faits et de dimensions et les actualise dans la zone de présentation en aval. Comment puis-je optimiser une telle actualisation de données en masse dans un environnement DWH?Redshift - DataWarehouse Data Refresh

Je crois que ceci devrait être un problème bien connu dans DWH avec quelques manières recommandées de résoudre. Quelqu'un peut-il s'il vous plaît signaler la solution recommandée? P.: Une solution peut être de créer une table par client et d'avoir une vue par-dessus qui réalise une union de toutes les tables sous-jacentes. Dans ce cas, si je casse la table de faits par client, il est assez petit et peut être aspiré rapidement après suppression-insertion, mais recherche de solutions avec une meilleure maintenabilité.

+0

question trop large, cela dépend de la nature des données et combien exactement avez-vous rafraîchir (la table entière ou une partie de celui-ci) – AlexYes

+0

@AlexYes considérer J'ai données pour 10 clients dans la table. Certains emplois génèrent des données pour ces clients selon différents calendriers (certains fonctionnent quotidiennement et d'autres hebdomadairement). Et quand ils génèrent des données, je fais un "replace" sur cette table qui est delete-insert. Selon le client, les données que je remplace en une fois peuvent varier entre 10% et 30% de la taille de la table. Vous ne savez pas ce que vous entendez par nature des données? –

+0

Par nature de données, je veux dire: si vos entités sont immuables (par exemple vous comptez le N de pages vues par jour) les agrégats produits pour le jour N seront les mêmes lorsque vous le calculez le jour suivant N + 1 et quand vous le calculez le jour N + 10, vous pouvez arrêter d'actualiser la totalité de la table et ne pouvez faire que l'ajouter. Si vos entités ne sont pas complètement immuables mais sont stabilisées après une certaine période (par exemple conversion des ventes par cohorte principale qui se produira probablement dans les 30 jours), vous pouvez traiter les données avec une fenêtre de fin, c'est-à-dire les X derniers jours seulement à chaque fois – AlexYes

Répondre

0

Vous pouvez essayer de jouer avec différents types de vide, il y a "VACUUM DELETE ONLY", qui va récupérer l'espace, mais ne pas recourir à des lignes, pas sûr si c'est applicable à votre cas d'utilisation.

Plus d'infos ici: http://docs.aws.amazon.com/redshift/latest/dg/t_Reclaiming_storage_space202.html

Ou je approche profonde de la copie quand je me battais avec des tables passer l'aspirateur avec trop de colonnes. Le problème avec ceci pourrait être que vous aurez besoin de beaucoup d'espace pour l'étape intermédiaire.

Plus d'infos ici: http://docs.aws.amazon.com/redshift/latest/dg/performing-a-deep-copy.html