Tablas Externas

Anuncio
®
Tablas Externas
Informix Dynamic Server 11.50.xC6
Edgar D. Sanchez - [email protected]
Informix Advanced Support
Nota: Esta presentación esta basada en la conferencia dictada por
Khaled Bentebal, Director General de la firma ConsultiX, durante el
IIUG 2010 en Kansas City
© 2010 IBM Corporation
IBM Software Group | Information Management
Agenda
Que son Tablas Externas
Porque utilizar Tablas Externas
Como crear tablas externas
Uso de Tablas Externas
Otras herramientas de IDS para cargar/descargar datos
Comparaciones de Performance
Manipulando datos fuera del motor utilizando funciones SQL
XML y las Tablas Externas
Dbimport, dbexport, ontape, oncheck, onstat, SPLs,....
Nota: Esta presentación esta basada en la conferencia dictada por Khaled Bentebal de
la firma ConsultiX durante el IIUG 2010 en Kansas City
© 2009 IBM Corporation
IBM Software Group | Information Management
Que son Tablas Externas
Son una fuente externa para almacenar datos, que no es parte del
motor de Informix Dynamic Server (IDS)
Una extension del estandard ANSI/ISO SQL
Se encuentran presentes en Informix XPS
Diseñadas para cargar/descargar datos desde/hacia las Bases de
Datos de una forma sencilla utilizando sentencias SQL
Disponible a partir de la version IDS 11.50.xC6
Similar a la herramienta dbload en su funcionalidad
© 2009 IBM Corporation
IBM Software Group | Information Management
Que son Tablas Externas
© 2009 IBM Corporation
IBM Software Group | Information Management
Porque utilizar Tablas Externas
Transferencia the datos operacionales eficientemente desde/hacia otros
sistemas
Transferir archivos de datos entre plataformas utilizando formato de IDS
Utilizar el servidor de Base de Datos para convertir datos entre ASCII
delimitado y ASCII de formato fijo
Proporcionar operaciones paralelas de INSERT estandard de datos de tal
forma que los datos puedan ser cargados sin borrar los indices
Utilizar 'named pipes' para soportar la carga y descarga de datos de
dispositivos de almacenamiento, incluyendo Unidades de Cinta y
Conexiones de Red
© 2009 IBM Corporation
IBM Software Group | Information Management
Como crear Tablas Externas
• CREATE EXTERNAL TABLE
<tablename> (<column list>)
USING (DATAFILES (x1 [,x2, …] ) , <table options>);
• CREATE EXTERNAL TABLE
SAMEAS <templatetable>
USING (DATAFILES (x1 [,x2, …] ) , <table options>);
© 2009 IBM Corporation
IBM Software Group | Information Management
Creacion de una Tabla Externa - DISK
CREATE EXTERNAL TABLE ext_customer_delimited
( customer_num int,
name
char(30),
lname
char(30),
address
varchar(50),
zip
char(5))
USING (
DATAFILES ( « DISK: /opt/external/data1.unl »
)
FORMAT « DELIMITED »,
REJECTFILE « /opt/rejects/reject_data1.rej »,
MAXERRORS 1000,
DELUXE
);
© 2009 IBM Corporation
IBM Software Group | Information Management
Creacion de una Tabla Externa - DISK
CREATE EXTERNAL TABLE ext_customer_fixed
( customer_num int,
name
char(30) EXTERNAL char(20),
lname
char(30) EXTERNAL char(25),
address
varchar(50) EXTERNAL char(45),
zip
char(5) EXTERNAL char(5))
USING (
DATAFILES ( « DISK: /opt/external/data2.unl »
)
FORMAT « FIXED »,
REJECTFILE « /opt/rejects/reject_data2.rej »,
MAXERRORS 100,
DELUXE
);
© 2009 IBM Corporation
IBM Software Group | Information Management
Creacion de una Tabla Externa - DISK
CREATE EXTERNAL TABLE ext_customer_delimited
SAMEAS customer
USING (
DATAFILES ( « DISK: /opt/external/data3.unl »
)
FORMAT « DELIMITED »,
REJECTFILE « /opt/rejects/reject_data3.rej »,
MAXERRORS 1000,
DELUXE
);
‘check constraints’ no son heredados con la excepcion de
constraints ‘NOT NULL’
© 2009 IBM Corporation
IBM Software Group | Information Management
Creacion de una Tabla Externa - PIPE
CREATE EXTERNAL TABLE ext_customer _fifo
SAMEAS customer
USING (
DATAFILES ( « PIPE: /opt/external/FIFO.dat »
)
FORMAT « DELIMITED »,
REJECTFILE « /opt/rejects/reject_FIFO.rej »,
MAXERRORS 1000,
EXPRESS ) ;
Paso 2: Unload usando el PIPE
under root:
cat FIFO.dat > /dev/console
dbaccess stores - <<EOF
insert into ext_customer_fifo
select first 10 * from customer;
EOF
Paso1: Crear el ‘named PIPE’
mkfifo /opt/external/FIFO.dat
ls -l /opt/external/FIFO.dat
prw-r--r-- 1 informix informix 0 Nov 25 10:17 /opt/external/FIFO.dat
© 2009 IBM Corporation
IBM Software Group | Information Management
Table OPTIONS
DATAFILES: DISK, PIPE (FIFO VP), BLOBDIR, CLOBDIR
FORMAT:
– DELIMTED,
– FIXED,
– INFORMIX
MODE:
– EXPRESS (NO BYTE OR TEXT columns),
– DELUXE (load ONLY)
OTHER:
– DBDATE,
– DELIMITER,
– RECORDEND (delimited format ONLY),
– MAXERRORS ( min =1, max: 2,147,483,647),
– REJECTFILE,
– ESCAPE,
– NUMROWS or SIZE
© 2009 IBM Corporation
IBM Software Group | Information Management
Express-mode
Express-mode provee el mas alto desempeño durante la carga
de datos
Express-mode carga datos utilizando ‘light appends’, los cuales
hacen ‘bypass’ del buffer pool. Light appends eliminan el
overhead associado con el manejo de buffers pero no hacen log
de los datos
En express-mode, el servidor de bases de datos
automaticamente bloquea la tabla en modo exclusivo. Otros
usuarios no pueden acceder a la tabla.
Si no se utiliza la opcion DELUXE, el servidor de Base de Datos
utiliza express-mode al menos que la tabla destino tenga indices
o esta sea una tabla de modo STANDARD.
© 2009 IBM Corporation
IBM Software Group | Information Management
Deluxe Mode
Deluxe-mode combina cargas fast parallel con evaluation de
indexes y unique constraints.
Utilice deluxe-mode en las siguientes situaciones:
– El costo de reconstruir un indice es demasiado alto para la cantidad de datos
que Usted esta cargando.
– Se desea utilizar el espacio vacio de filas borradas en la tabla que se esta
cargando.
La carga de datos con deluxe-mode utiliza un insert regular de
una unica fila, el cual adiciona filas a la tabla que puede contener
indices. El insert modifica cada indice para cada fila durante la
carga.
© 2009 IBM Corporation
IBM Software Group | Information Management
Deluxe mode
El insert tambien chequea todos los constraints para cada fila.
Cargas con deluxe mode permite mantener la tabla sin locks
durante la carga de tal forma que otros usuarios pueden
continuar usando la tabla.
Se puede utilizar deluxe mode en tablas que no tienen indices;
por ejemplo, si se desea tener completa recuperacion de las
tablas o mantener acceso a dichas tablas durante la carga.
Para preparar una tabla para una carga con deluxe mode, cree
la tabla interna del tipo STANDARD y cree la tabla externa con la
opcion DELUXE
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas de catalogo para Tablas Externas
Tabla
Descripcion
sysexternal
Almacena informacion extra de cada tabla externa;
informacion que no se encuentra presente en systables.
sysextdfiles
Almacena informacion de los archivos de datos de cada
tabla externa; al menos una entrada (un archivo de
datos) para cada externa tabla.
sysextcols
Almacena informacion de las columnas de la tabla
externa del formato de tipo FIXED
systables
Informacion de la tabla externa
nrows = MAXINT -1 si NUMROWS no es especificada
MAXINT -1 incrementa la selectividad de la tabla para el
optimizer
© 2009 IBM Corporation
IBM Software Group | Information Management
Dbinfo() y las Tablas Externas
select "tabname: "||trim(tabname)||" is located in dbspace: "||
trim(dbinfo('DBSPACE',partnum)) as location_info
from systables
where tabname = "toto_delim"
location_info tabname: toto_delim is located in dbspace: datadbs
© 2009 IBM Corporation
IBM Software Group | Information Management
Que utilizar y no utilizar en Tablas Externas
Data types: Soporta todos los tipos de datos built-in
No se puede especificar los tamaños de los extent
Indices no son permitidos
No tienen una llave primaria o una llave unica
No tienen llaves del tipo ‘foreign key constraints’
No se pueden definir triggers
No puede ser el destino en una instruccion MERGE
Solamente el mas exterior query puede tener referencia a una tabla
externa; no referencias a una tabla externa en un subquery
No especificar una tabla externa utilizando la instruccion LOAD FROM
... INSERT INTO
Tablas externas estan excluidas de Enterprise Replication
Solamente una tabla externa en un query
© 2009 IBM Corporation
IBM Software Group | Information Management
Que utilizar y no utilizar en Tablas Externas
Una tabla externa no puede ser el ‘outer table’ en un ‘outer join’
UPDATE STATISTICS no es permitido
Privilegios diferentes a ‘select’ e ‘insert’ en GRANT y REVOKE no son
soportados.
UPDATE y DELETE no son soportados en tablas externas
ALTER TABLE no es soportado en tablas externas
IDS label-based access control (LBAC) no es soportado en tablas
externas
START VIOLATIONS y STOP VIOLATIONS no son soportados en
tablas externas
Ciertas operations de High-Availability Cluster no son soportados en
tablas externas.
© 2009 IBM Corporation
IBM Software Group | Information Management
Uso de Tablas Externas
Carga de datos desde una fuente externa a una tabla interna
Descarga de datos desde una tabla a un destino externo
Copiar datos desde una fuente externa a un destino externo
Utilizando una fuente/destino externo fijo
Utilizando una fuente/destino externo delimitada
Utilizando una fuente/destino externo informix
Leyendo y manipulando datos externos
Uniendo una tabla con una tabla externa
Convirtiendo un formato fijo a un formato delimitado
Convirtiendo un formato fijo o delimitado a un formato XML
© 2009 IBM Corporation
IBM Software Group | Information Management
Herramientas para cargar/descargar datos
Cargar
Descargar
Ventajas
Desventajas
SQL
unload
load
Facil de usar,
ASCII
Lenta, No soporta stored
procedures, no flexible
Command
line
dbexport
dbimport
Facil de usar,
ASCII
Toda la Base de Datos, no
flexible
dbload
Facil de usar,
Flexive, ASCII
No dbunload
Command
line
Command
line
onunload
onload
Rapida
No flexible, solo formato
informix
Command
line
HPL
HPL
Rapida,ASCII
Requiere preparacion (mas
compleja)
SQL
External
table
External
table
Rapida, Flexible,
Facil de usar
© 2009 IBM Corporation
IBM Software Group | Information Management
Comparacion de Performance : Carga
• Carga con 10 millones de filas en una tabla estandard
(
+
+
,
.
!
"#######
"$%
%"&'&
!
"#######
&"$
)%**&
!
"#######
")%
*'$*%
!
"#######
")$
*-"")
!
"#######
"$
%&*/"%
© 2009 IBM Corporation
IBM Software Group | Information Management
Comparacion de Performance : Carga
• Carga con 10 millones de filas en una tabla RAW
(
+
+
,
.
0
"#######
"*%
*#*#*
0
"#######
"'#
%%%%%
0
"#######
"%
******
0
"#######
"/
-*$&/#
0
"#######
"$
%&*/"%
© 2009 IBM Corporation
IBM Software Group | Information Management
Comparacion de Performance : Descarga
• Carga con 10 millones de filas en una tabla estandard
1
!
"#######
%'
"-&)"/
+
!
"#######
"/
-*$&/#
!
"#######
")
-")&'%
!
"#######
&%
)#####
+
,
.
© 2009 IBM Corporation
IBM Software Group | Information Management
Comparacion de Performance : Descarga
• Carga con 10 millones de filas en una tabla RAW
1
0
"#######
%$
"*$)$"
+
0
"#######
"/
-*$&/#
0
"#######
"*
*&%###
0
"#######
/#
//////
+
,
.
© 2009 IBM Corporation
IBM Software Group | Information Management
Performance : Descargando
© 2009 IBM Corporation
IBM Software Group | Information Management
Performance : Descargando
© 2009 IBM Corporation
IBM Software Group | Information Management
Performance : Cargando
© 2009 IBM Corporation
IBM Software Group | Information Management
Performance : Cargando
© 2009 IBM Corporation
IBM Software Group | Information Management
Performance : Descargando
© 2009 IBM Corporation
IBM Software Group | Information Management
Performance : Descargando
© 2009 IBM Corporation
IBM Software Group | Information Management
Performance : Cargando
© 2009 IBM Corporation
IBM Software Group | Information Management
Performance : Cargando
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas y las diferentes herramientas
Dbexport
Dbimport
Ontape/onbar
Oncheck
Onstat
Update statistics
Dbaccess : info/status
Stored procedures
© 2009 IBM Corporation
IBM Software Group | Information Management
Tables externas y dbexport
{ TABLE "informix".toto row size = 74 number of columns = 3 index size = 0 }
{ unload file name = toto_00127.unl number of rows = 10000000 }
…
{ TABLE "informix".toto_delim row size = 74 number of columns = 3 }
create external table "informix".toto_delim
(
…
)
using
(
datafiles
(
"DISK:/home/informix/khaled/load_perf/u_toto_10M.unl"
),
format "delimited",
rejectfile "/home/informix/khaled/load_perf/external_toto.rej",
maxerrors 400,
express
);
revoke all on "informix".toto_delim from "public";
grant select on "informix".toto to "public" as "informix";
grant update on "informix".toto to "public" as "informix";
grant insert on "informix".toto to "public" as "informix";
grant delete on "informix".toto to "public" as "informix";
grant index on "informix".toto to "public" as "informix";
grant select on "informix".toto_delim to "public";
grant insert on "informix".toto_delim to "public";
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas y dbimport
{ TABLE "informix".toto row size = 74 number of columns = 3 index size = 0 }
{ unload file name = toto_00127.unl number of rows = 10000000 }
…
{ TABLE "informix".toto_delim row size = 74 number of columns = 3 }
create external table "informix".toto_delim
(
…
)
using
(
datafiles
(
"DISK:/home/informix/khaled/load_perf/u_toto_10M.unl"
),
format "delimited",
rejectfile "/home/informix/khaled/load_perf/external_toto.rej",
maxerrors 400,
express
);
revoke all on "informix".toto_delim from "public";
grant select on "informix".toto to "public" as "informix";
grant update on "informix".toto to "public" as "informix";
grant insert on "informix".toto to "public" as "informix";
grant delete on "informix".toto to "public" as "informix";
grant index on "informix".toto to "public" as "informix";
grant select on "informix".toto_delim to "public";
grant insert on "informix".toto_delim to "public";
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas y el backup con ontape/OnBar
El backup contiene los dbspaces/chunks incluyendo el tblspace(1
extent de 8 paginas) representando la tabla externa PERO no los
datos almacenados en el archivo externo en el cual esta basada
la tabla externa
Se debe hacer backup de los archivs externos ya que
ontape/OnBar no hacen backup de ellos
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas y oncheck
TBLspace Report for load:informix.toto_delim
Physical Address
2:517
Creation date
01/14/2010 15:09:33
TBLspace Flags
801
Page Locking
TBLspace use 4 bit bit-maps
Maximum row size
1
…
First extent size
8
Next extent size
8
Number of pages allocated 8
Number of pages used
1
Number of data pages
0
Number of rows
0
…
TBLspace Usage Report for load:informix.toto_delim
Type
Pages
Empty Semi-Full
Full Very-Full
------------------------- ---------- ------------------- ---------Free
7
Bit-Map
1
Index
0
Data (Home)
0
---------Total Pages
8
Considerada como
una tabla vacia ya
que el chequeo es
hecho en el
contenido del
tblspace
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas y Update Statistics
UPDATE STATISTICS FOR TABLE <external table>
– 26191: Incorrect use of an external table informix.toto_fixed in query.
NO update statistics on external tables
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas y dbaccess/info
Dbaccess/table/info/status
– El conteo de filas es hecho leyendo el archivo externo
secuencialmente
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas en Stored Procedures
CREATE PROCEDURE p_load_data (p_table char(30))
DEFINE i INT;
DEFINE v_table char(30);
INSERT INTO customer SELECT * FROM ext_customer;
LET v_string=“INSERT INTO ”||trim(p_table);
LET v_string=v_string||” SELECT * FROM ext_”||trim(p_table);
EXECUTE IMMEDIATE v_string;
END PROCEDURE;
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas y XML
Se puede utilizar el poder de funciones XML en el motor de IDS
en archivos externos
execute function genxmlqueryhdr
('clients', 'select first 2 col1*10000 as amount
,col2 name from clients_fixed');
(expression) <?xml version="1.0" encoding="en_US.819" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<clients>
<row>
<amount>10000.0000000000</amount>
<name>khaled
</name>
</row>
<row>
<amount>20000.0000000000</amount>
<name>khaled
</name>
</row>
</clients>
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas y concurrencia
Se bloquea la tabla externa en modo exclusivo cuando es accesada
SOLO un usuario puede leer una tabla externa a la vez si la Base de Datos esta en NO
LOGGING MODE
Si la tabla externa esta abierta, se genera el siguiente error:
26152: Could not exclusively lock external table.
113: ISAM error: the file is locked.
© 2009 IBM Corporation
IBM Software Group | Information Management
Monitoreando tablas externas
Ejecute onstat -g sql para obtener el numero de sesion
Ejecute onstat -g pqs <ses_id> para obtener el numero de filas procesadas
Ejecute onstat –t
Ejecute onstat –g iof
Ejecute onstat –g ioq
Monitoreando FIFO VPs
– Ejecute onmode –g ioq para observar la longitud de la cola FIFO esperando por I/O
– Si totalops no se esta incrementando, esto significa que la operacion de lectura o
escritura sobre un archivo o pipe esta detenido (porque los VPs de FIFO estan
ocupados) Incremente el numero de VPs
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas en un cluster (HA)
SOLO el esquema de la tabla externa es creado en el servidor PRIMARIO y
replicado a los servidores secundarios
Primario:
– Load
– Unload
Secundario (RSS, HDR, SDS):
– Unload a archivos locales en el servidor secundarios
– NO LOAD
Los archivos de la tabla externa creados en el servidor secundario no son
automaticamente transferidos al servidor primario ni los archivos creados en el
servidor primario son automaticamente transferidos a los servidores
secundarios.
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas externas en un cluster (HA)
Sincronizacion de tablas externas entre el Primario y Secundario:
– Copia del archivo de la tabla externa del servidor primario al secundario
o
– Primario:
• Cree una tabla temporal con el mismo esquema de la tabla externa
• INSERT INTO temp_table SELECT * FROM ext_table
– Secondary:
• INSERT INTO ext_table FROM remp_table
© 2009 IBM Corporation
IBM Software Group | Information Management
Reversion de una version
Si una nueva tabla externa fue creada, se debe borrar antes de
revertir de version. (Las tablas de catalogo SYSEXTERNAL,
SYSEXTCOLS, y SYSEXTDFILES seran borradas durante ell
proceso de reversion.)
© 2009 IBM Corporation
IBM Software Group | Information Management
Tablas Externas : Errores
REJECT FILES (load)
– MAXERRORS:
– Archivos de Reject son removidos al comienzo del load si errores ocurren
– Entradas en archivos Reject son de lineas unicas con los siguientes campos separados por coma:
filename, record, reason-code, fieldname: bad-line
– CONSTRAINT constraint name, CONVERT_ERR, MISSING_DELIMITER,
MISSING_RECORDEND, NOT NULL, ROW_TOO_LONG (longer than 64K)
Mensajes de error en tablas externas
– ERRORS: -26151 to -26199 and -615, -999, -23852, and -23855
Recuperacion
– Tablas RAW:
• Si el server genera un crash durante la carga, los datos cargados NO son ‘Rolled Back’ (la tabla
queda en un estado desconocido ‘unknow state’)
– Tablas STANDARD :
• DELUXE: OK
• EXPRESS: Revierte al Backup Nivel 0 previo
© 2009 IBM Corporation
IBM Software Group | Information Management
GRACIAS!!
Tablas Externas
Informix Dynamic Server 11.50.xC6
Edgar D. Sanchez
e-mail: [email protected]
Informix Advanced Support
IBM
© 2009 IBM Corporation
Descargar