2009-11-20 11 views
7

Por lo tanto, a menudo tengo que cargar datos en tablas de espera para ejecutar algunas comprobaciones de validación de datos y luego devolver los resultados. Normalmente, creo la tabla de espera, luego un archivo de control sqlldr y cargo los datos en la tabla, luego ejecuto mis consultas. ¿Hay alguna razón por la que debería usar tablas externas para cosas en su lugar? ¿De qué manera me harán la vida más fácil?Tablas externas vs SQLLoader

Respuesta

13

La gran ventaja de las tablas externas es que podemos consultarlas desde el interior de la base de datos utilizando SQL. Entonces podemos ejecutar las comprobaciones de validación como sentencias SELECT sin la necesidad de una tabla de espera. De manera similar, si necesitamos hacer alguna manipulación de los datos cargados, es casi siempre más fácil hacerlo con SQL en lugar de los comandos SQLLDR. También podemos administrar cargas de datos con rutinas DBMS_JOB/DBMS_SCHEDULER, lo que reduce aún más la necesidad de scripts de shell y trabajos de cron.

Sin embargo, si ya tiene un proceso maduro y estable utilizando SQLLDR, entonces reconozco que es poco probable que obtenga enormes beneficios de la migración a tablas externas.

También hay algunos casos, especialmente si está cargando millones de filas, donde el enfoque SQLLDR puede ser considerablemente más rápido. Sin embargo, la diferencia no será tan marcada con las versiones más recientes de la base de datos. Espero totalmente que SQLLDR eventualmente se desaproveche a favor de tablas externas.

+1

+1, todos son buenos puntos. – DCookie

3

Si nos fijamos en la sintaxis de la tabla externa, parece sospechosamente a SQL * sintaxis del archivo de control de la cargadora :-)

Si la tabla externa va a ser utilizado repetidamente en varias consultas que podría ser más rápido para cargar una tabla (como lo está haciendo ahora) en lugar de volver a explorar su tabla externa para cada consulta. Como señala @APC, Oracle está haciendo mejoras en ellos, por lo que depende de su versión de DB YMMV.

+1

Sospechosamente similar, aunque no equivalente. :) http://stackoverflow.com/questions/898872/oracle-external-tables-advanced-flat-file-layout –

+0

Buen punto. Me pregunto cuánto SQL * Loader código estaba detrás de al menos la inicial ir a tablas externas ... – DCookie

+0

@DCookie. Está desarrollado por el mismo equipo :) – BobC

3

Usaría tablas externas por su flexibilidad.

Es más fácil modificar la fuente de datos sobre ellos para ser un archivo diferente alter table ... location ('my_file.txt1','myfile.txt2')

Usted puede hacer inserciones multitable, fusiones, ejecutarlo a través de una función pipeline etc ...

consulta en paralelo es más fácil. ..

también establece dependencias mejor ...

el código se almacena en la base de datos por lo que automáticamente respaldado ...

0

Otra cosa que puede hacer con tablas externas es leer archivos comprimidos. Si sus archivos están comprimidos gzip, por ejemplo, puede usar la directiva PREPROCESSOR dentro de su definición de tabla externa, para descomprimir los archivos a medida que se leen.

Cuestiones relacionadas