Nvidal’s Blog

Just another WordPress.com weblog

TABLAS EXTERNAS Oracle 10G

Tablas Externas

Sabias que oracle tiene la forma de manejar archivos que están en el filesystem, fuera de la base de datos, como si fueran tablas normales de oracle. Si, puedes tener un archivo de texto y puedes leerlo con un SELECT, o pudes copiarlos a la base del datos con un INSERT … SELECT. También puedes hacer lo inverso, bajar datos de la base de datos a un archivo de texto.

Manejando Tablas Externa

La base de dato oracle permite acceso de read-only a data en tablas externas. Las tablas externas son definidas como tablas que residen en la base de datos, y pueden estar en cualquier formato para el cual es provista por un manejador de acceso.

Proveyendo la base de datos con metadata describiendo una tabla externa, la base de datos es capaz de exponer la data en tabla externa como si esta fueran data residiendo en una tabla regular de la base de datos. La data externa puede ser buscada directamente y en paralelo usando SQL.

Puedes, por ejemplo, select, join or sort data de tabla externa. También puedes crear vistas y sinónimos. Sin embargo, no se puede ejecutar operación DML (UPDATE,INSERT, o DELETE), y no se pude crear índices sobre tablas externas.

La base de datos Oracle provee dos forma de acceso a las tablas externas. El acceso por defecto es ORACLE_LOADER, el cual permite la lectura de la data de archivos externos usando la tecnologia de oracle loader. El manejador ORACLE_LOADER provee un mapeo de la data los cuales son un sub juego del archivo de control del utilitario SQL*Loader.

El segundo manejador, ORACLE_DATAPUMP, permite descargar data, que es, leer data desde la base de datos e insertarla en una tabla externa, representado por uno o mas archivos externos.

Las tablas externas de Oracle proveen un invaluable significado para ejecutar operaciones basicas de extracion, transformacion y cargado (ETL) que son muy comunes para data warehouse.

EXAMPLE: Creando una tabla externa y cargando data.

The file empxt1.dat contains the following sample data:

360,Jane,Janus,ST_CLERK,121,17-MAY-2001,3000,0,50,jjanus
361,Mark,Jasper,SA_REP,145,17-MAY-2001,8000,.1,80,mjasper
362,Brenda,Starr,AD_ASST,200,17-MAY-2001,5500,0,10,bstarr
363,Alex,Alda,AC_MGR,145,17-MAY-2001,9000,.15,80,aalda

The file empxt2.dat contains the following sample data:
401,Jesse,Cromwell,HR_REP,203,17-MAY-2001,7000,0,40,jcromwel
402,Abby,Applegate,IT_PROG,103,17-MAY-2001,9000,.2,60,aapplega
403,Carol,Cousins,AD_VP,100,17-MAY-2001,27000,.3,90,ccousins
404,John,Richardson,AC_ACCOUNT,205,17-MAY-2001,5000,0,110,jrichard

The following hypothetical SQL statements create an external table in the hr schema
named admin_ext_employees and load its data into the hr.employees table.

CONNECT / AS SYSDBA;

– Set up directories and grant access to hr
CREATE OR REPLACE DIRECTORY admin_dat_dir AS ‘/flatfiles/data';
CREATE OR REPLACE DIRECTORY admin_log_dir AS ‘/flatfiles/log';
CREATE OR REPLACE DIRECTORY admin_bad_dir AS ‘/flatfiles/bad';
GRANT READ ON DIRECTORY admin_dat_dir TO hr;
GRANT WRITE ON DIRECTORY admin_log_dir TO hr;
GRANT WRITE ON DIRECTORY admin_bad_dir TO hr;
— hr connects
CONNECT hr/hr
— create the external table

CREATE TABLE admin_ext_employees
(employee_id NUMBER(4),
first_name VARCHAR2(20),
last_name VARCHAR2(25),
job_id VARCHAR2(10),
manager_id NUMBER(4),
hire_date DATE,
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
department_id NUMBER(4),
email VARCHAR2(25)
)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER DEFAULT DIRECTORY admin_dat_dir ACCESS PARAMETERS
(
records delimited by newline
badfile admin_bad_dir:’empxt%a_%p.bad’
logfile admin_log_dir:’empxt%a_%p.log’
fields terminated by ‘,’
missing field values are null
(employee_id, first_name, last_name, job_id, manager_id,hire_date char date_format date mask “dd-mon-yyyy”,salary, commission_pct, department_id, email)
)
LOCATION (‘empxt1.dat’, ‘empxt2.dat’)
)
PARALLEL
REJECT LIMIT UNLIMITED;

– enable parallel for loading (good if lots of data to load)
ALTER SESSION ENABLE PARALLEL DML;

– load the data in hr employees table
INSERT INTO employees (employee_id, first_name, last_name, job_id, manager_id,hire_date, salary, commission_pct, department_id, email)
SELECT * FROM admin_ext_employees;

About these ads

septiembre 16, 2009 - Posted by | Database

1 Comentario »


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: