Delta/Chargement Incrémentiel dans la Ruche
J'ai le cas d'utilisation ci-dessous :
Mon application dispose d'une table ayant pluriannuel de données dans SGBDR DB. Nous avons utilisé sqoop pour obtenir des données dans HDFS et ont chargé dans la ruche table partitionnée par l'année, le mois.
Maintenant, les mises à jour d'application, et permet d'insérer de nouveaux enregistrements dans la Table de SGBDR table de tous les jours ainsi. Ces enregistrements mis à jour peut s'étendre à travers l'histoire des mois. Dossiers mis à jour et nouvelles de l'insertion des enregistrements peut être déterminée par la mise à jour de champ timestamp (il aura jour en cours d'horodatage).
Maintenant le problème qui se pose ici est : comment faire delta/chargement incrémentiel tableau de la ruche quotidien à l'aide de ces enregistrements mis à jour.
-> je sais qu'il est un sqoop fonctionnalité qui permet d'incrémenter les importations. Mais, seuls les nouveaux importation incrémentielle est pas assez pour nous.
Parce -
-> je ne peux pas insérer directement ces documents (à l'aide d'insert into) dans le tableau de la ruche, car il en résultera des enregistrements en double (mise à jour des dossiers).
-> de la Même façon, je ne peux pas utiliser insert remplacer déclaration que ce sont juste des mise à jour et insérer des enregistrements s'étendant sur plusieurs mois. Insérez remplacer va supprimer plus tôt dossiers.
Bien sûr, l'option la plus facile est d'obtenir des données complètes à l'aide de sqoop tous les jours, mais nous ne voulons pas faire comme le volume de données est important.
Donc , fondamentalement, nous voulons pleinement charger uniquement les partitions pour lesquelles nous avons reçu de mise à jour/insérer des enregistrements.
Nous sommes ouverts à explorer l'option à la ruche ou de sqoop fin. Pouvez-vous s'il vous plaît laissez-nous savoir?
Merci d'avance.
OriginalL'auteur jigarshah | 2014-06-12
Vous devez vous connecter pour publier un commentaire.
Les mises à jour sont notoirement difficile problème pour toute la Ruche.
Une approche typique est un processus en deux étapes
La deuxième étape est potentiellement douloureux, mais il n'y a vraiment aucun moyen de contourner cela. À un certain niveau, vous devez écraser, depuis Ruche de ne pas faire la mise à jour. En fonction de vos données, vous pourriez être en mesure de partitionner les tables assez habilement pour éviter de faire plein écrase, si. Par exemple, si l'étape 1 n'insère dans une poignée de partitions, alors que les partitions doivent être remplacés dans la seconde table.
Également, selon le modèle de l'accès, il peut être judicieux d'avoir juste le deuxième "dupliqué" table une vue, et de ne pas se matérialiser. Habituellement, cette juste des retards de la douleur au moment de la requête, si.
La seule inverse de ce que j'ai vu est à l'aide d'un très personnalisée d'entrée et le format de sortie. Plutôt que d'expliquer tout cela, vous pouvez lire à ce sujet ici: http://pkghosh.wordpress.com/2012/07/08/making-hive-squawk-like-a-real-database/
Owen O'Malley a également travaillé sur l'ajout d'une version de cette idée à la norme de la Ruche, mais qui est encore en cours de développement: https://issues.apache.org/jira/browse/HIVE-5317
OriginalL'auteur Joe K
Vous pouvez utiliser directement la Carte de Réduire approche pour vrac, en médaillon, update et delete. Les détails sont ici. Il s'agit essentiellement d'une opération de fusion et l'opération de compactage. Un tri secondaire est effectuée sur le temps de timbre ou d'une séquence de champ, soit dans le dossier ou codé dans HDFS les noms de fichier. La dernière version de un record depuis le réducteur de jointure côté est émis en sortie.
https://pkghosh.wordpress.com/2015/04/26/bulk-insert-update-and-delete-in-hadoop-data-lake/
OriginalL'auteur Pranab
Nous avons eu des problèmes similaires de l'insertion des données en bloc dans notre datalake.
Comme nous n'étions pas dans le contrôle des données, nous avons eu un moment difficile en gardant le lac nettoyer les doublons.
Remarquez que ce n'est pas sur la mise à jour des enregistrements dans la ruche, mais sur la manière d'éviter les duplications d'un même enregistrement une fois de plus.
J'ai créé un script pig pour cette tâche:
Il crée la différence.
Apache DataFu SetDifference fait la même chose, mais nous n'avons pas été en mesure de l'utiliser à l'interne.
OriginalL'auteur crazzle
J'ai fait une solution pour le delta de la charge qui contient un script shell, et vous avez juste à planifier votre travail qui vous donne progressivement ajouté des lignes dans votre base de données hive. Pour le compelete solution, vous devez suivre ce lien -
https://bigdata-analytix.blogspot.com/2018/10/hive-incrementaldelta-load.html
OriginalL'auteur Anmol Kankariya