2017-09-07 1 views
0

J'ai une table de commande dans le système OLTP. Chaque enregistrement de commande possède un champ OrderStatus.Refléter les modifications sur les grandes tables dans hdfs

  • Lorsque les utilisateurs finaux ont créé un ordre, le champ OrderStatus défini comme "Open".

  • Quand quelqu'un annule l'ordre, le champ OrderStatus défini comme "Annulée".

  • Lorsqu'un processus de commande terminée (transformée en facture), le champ OrderStatus réglé sur "Fermer".

Il y a plus de cent millions enregistrement de la table dans le système OLTP. Je veux concevoir et remplir des entrepôts de données et des data marts sur une couche HDFS. Afin de concevoir des martres de données, j'ai besoin d'importer la table de commande entière à hdfs et puis j'ai besoin de refléter les changements sur la table en continu. Tout d'abord, je peux importer la table entière dans hdfs dans le processus de chargement initial en utilisant SQoop. Je peux prendre beaucoup de temps mais je le ferai une fois.

Lorsqu'un enregistrement de commande est mis à jour ou qu'un nouvel enregistrement de commande est entré, je dois refléter les modifications apportées à hdfs. Comment puis-je obtenir cela dans hdfs pour une telle table de transactions?

Merci

Répondre

-2

Une des façons plus facile est de travailler avec la base de données déclenche dans votre source OLTP db et chaque changement une mise à jour arrive l'utilisation qui déclenchent pour pousser un événement de mise à jour à votre environnement Hadoop. D'autre part (cela dépend des besoins de vos utilisateurs de données), il peut être suffisant de recharger l'intégralité du vidage de données tous les soirs.

En outre, s'il existe un type d'horodatage modifié pour la dernière fois, il est possible de charger uniquement les données les plus récentes et de procéder à une sorte de vérification delta.

Tout dépend de votre structure de données, de vos besoins et de vos ressources.

Il existe plusieurs autres façons de le faire, mais généralement, cela implique la messagerie, le développement et de nouveaux serveurs et je suppose que dans votre cas, cette infrastructure ou ces ressources ne sont pas disponibles.

EDIT

Puisque vous avez une date de dernière modification, vous pourriez être en mesure de tirer les données avec une déclaration comme

SELECT columns FROM table WHERE lastchangedate < (now - 24 hours) 

ou quel que soit votre intervalle pour le chargement pourrait être.

Ensuite, traitez les données avec des outils sqoop ou ETL ou similaires. Si les enregistrements sont déjà disponibles dans votre environnement Hadoop, vous voulez le UPDATE.Si les enregistrements ne sont pas disponibles, utilisez-les avec votre mécanisme approprié. Ceci est également appelé UPSERTING parfois.

+0

Oui, le dernier champ d'horodatage a été modifié dans la table source. Pourriez-vous donner des détails sur: "il pourrait être un moyen possible de charger uniquement les données les plus récentes et faire une sorte de vérification delta." – Omer

+1

Merci pour votre commentaire, est l'amélioration d'une option disponible dans l'environnement hadoop? Comme je sais, hdfs est en lecture seule. Il se peut donc que je doive écraser toute la table dans la couche hdfs. – Omer

+0

C'est juste un mot pour les actions nécessaires. Cela dépend en fait de votre infrastructure, des composants que vous utilisez et des exigences données. HDFS n'est pas seulement en lecture, vous êtes déjà en train de pousser des données avec Sqoop. Les changements peuvent créer de nouveaux fichiers, mais encore une fois: cela dépend de la façon dont vous lisez les données après les avoir poussé dans Hadoop. En outre, vous devriez rechercher des composants qui utilisent HDFS comme Hive, HBASE et généralement l'architecture de Hadoop. HDFS n'est qu'une partie de l'ensemble de l'écosphère. – tobi6