2017-07-26 1 views
0

Ma table d'entrée dans MySQL a 20 millions d'enregistrements et la table cible dans Oracle est vide. J'ai besoin de charger la table entière de MySQL dans Oracle. J'utilise simplement une étape Table Input et Table Output.Pentaho Entrée de table pour la sortie de table par lots

PentahoProcessing

Mon intention est de ne pas verrouiller la table source pendant longtemps tout en lisant. Y at-il un problème avec la charge (nombre d'enregistrements) que j'essaie d'atteindre? Je pouvais voir l'option Use batch update for inserts dans la sortie de la table. Je ne pouvais pas voir quelque chose de similaire dans l'entrée de table. Existe-t-il un moyen d'effectuer un traitement par lots à Pentaho?

Répondre

3

Ne vous inquiétez pas, 20 millions d'enregistrements sont un petit nombre pour PDI, et vous ne verrouillerez pas la table si elle est ouverte pour l'entrée. C'est pourquoi le Bulk load est pour la table de sortie et non pour les tables d'entrée.

Cependant, un piège classique est l'option Truncate table sur la table de sortie. Si vous exécutez (par inadvertance ou pour un traitement parallèle) deux fois l'étape de sortie, chacun verrouille l'autre. Pour toujours. Pour accélérer: Vous pouvez utiliser la case à cocher Lazy conversion en entrée, afin que les données restent au format octet jusqu'à leur utilisation. Mais je ne suis pas sûr que vous gagniez quelque chose sur une simple table d'entrée/sortie. Si quelque chose de mal se produit avec des dates ou des blobs sur l'écriture sur le fichier de sortie, le message d'erreur sera assez cryptique.

Vous pouvez également augmenter la vitesse de la sortie en augmentant la taille de commit (pire quelques essais dans Oracle), et en augmentant le number of rows in row set qui augmentera le nombre de lignes lues par le table input. Pour ce faire, faites un clic droit n'importe où puis Properties/Miscelanous.

Quelque chose que je conseille vraiment de faire, est d'augmenter la taille de la mémoire JVM. Utilisez un éditeur (bloc-notes ou mieux) pour modifier le fichier nommé spoon.bat. Vous trouverez autour de la ligne 94-96 une ligne contenant quelque chose comme "-Xmx256K". Changez-le en "-Xmx4096M" (où 4096 est la moitié de la taille de la RAM de votre machine).

Effectuer un "traitement par lots" a plusieurs significations. L'un d'eux étant Make the transformation database transactional. Ce que vous pouvez faire avec la case à cocher juste en dessous de Number of row in rowset mentionné ci-dessus (et buggily orthographié comme Make the transformation database dans la dernière version de PDI). Si cette case est cochée, si quelque chose ne va pas, l'état des bases de données est annulé comme si la transformation n'avait jamais été exécutée. Mais je ne conseille pas de le faire dans votre cas.