2009-11-20 5 views
7

Ainsi, je dois souvent charger des données dans des tables de stockage pour exécuter des vérifications de validation de données, puis renvoyer les résultats. Normalement, je crée la table de maintien, puis un fichier de contrôle sqlldr et charge les données dans la table, puis je lance mes requêtes. Y a-t-il une raison pour laquelle je devrais plutôt utiliser des tables externes? En quoi vont-ils me faciliter la vie?Tables externes vs SQLLoader

Répondre

13

Le grand avantage des tables externes est que nous pouvons les interroger depuis l'intérieur de la base de données en utilisant SQL. Nous pouvons donc simplement exécuter les vérifications de validation sous forme d'instructions SELECT sans avoir besoin d'une table d'attente. De même, si nous avons besoin de manipuler les données chargées, il est presque toujours plus facile de le faire avec SQL plutôt qu'avec les commandes SQLLDR. Nous pouvons également gérer les charges de données avec les routines DBMS_JOB/DBMS_SCHEDULER, ce qui réduit encore le besoin de scripts shell et de tâches cron.

Cependant, si vous avez déjà un processus mature et stable utilisant SQLLDR, je concède qu'il est peu probable que vous réalisiez d'énormes avantages en termes de portage vers des tables externes.

Il y a aussi quelques cas - en particulier si vous chargez des millions de lignes - où l'approche SQLLDR peut être considérablement plus rapide. Cependant, la différence ne sera pas aussi marquée avec les versions plus récentes de la base de données. Je m'attends à ce que SQLLDR soit finalement abandonné au profit des tables externes.

+1

+1, tous les bons points. – DCookie

3

Si vous regardez la syntaxe de table externe, il ressemble étrangement à SQL * syntaxe du fichier de contrôle du chargeur :-)

Si votre table externe va être utilisé à plusieurs reprises dans plusieurs requêtes, il peut être plus rapide pour charger une table (comme vous le faites maintenant) plutôt que de rescanner votre table externe pour chaque requête. Comme l'indique @APC, Oracle y apporte des améliorations, en fonction de votre version de base de données YMMV.

+1

Similairement suspect, mais pas équivalent. :) http://stackoverflow.com/questions/898872/oracle-external-tables-advanced-flat-file-layout –

+0

Bon point. Je me demande combien de code SQL * Loader était derrière au moins le départ initial aux tables externes ... – DCookie

+0

@DCookie. Il est développé par la même équipe :) – BobC

3

J'utiliserais des tables externes pour leur flexibilité.

Il est plus facile de modifier la source de données sur eux pour être un fichier différent alter table ... location ('my_file.txt1','myfile.txt2')

Vous pouvez effectuer des insertions multitable, se confond, exécutez par une fonction pipe-line, etc ...

requête parallèle est plus facile. ..

il établit également des dépendances mieux ...

le code est stocké dans la base de données il est automatiquement sauvegardé ...

0

Une autre chose que vous pouvez faire avec les tables externes est de lire les fichiers compressés. Si vos fichiers sont compressés par gzip par exemple, vous pouvez utiliser la directive PREPROCESSOR dans votre définition de table externe, pour décompresser les fichiers à mesure qu'ils sont lus.

Questions connexes