Si habéis estado presentes en alguna migración o trabajáis en procesos de ETL (Extract Load Transform) habréis oído hablar del concepto de las «staging tables«.
En el artículo de hoy hablaremos sobre qué son, cómo se utilizan, y las novedades que nos trae Oracle 23c para trabajar con ellas.
¡Al turrón!
¿Qué son las staging tables?
Las staging tables tanto en Oracle como en otros sistemas de gestión de bases de datos, son tablas intermedias utilizadas principalmente durante el proceso de carga o transformación de datos antes de que los datos se trasladen a su destino final.
Es decir, son una técnica de carga de datos no invasiva, en la cual los datos se cargan en una tabla temporal antes de ser procesados y finalmente cargados en una tabla permanente.
Este «destino final» podría ser una tabla de producción o un almacén de datos.
Estas tablas facilitan el proceso de carga de grandes cantidades de datos y mejoran el rendimiento de la carga.
Son además un componente crucial de los procesos ETL (Extract, Transform, Load) y de las tareas de integración de datos.
Características y usos de este tipo de tablas
Almacenamiento temporal: Almacenan temporalmente los datos importados de fuentes externas, lo que permite limpiarlos, transformarlos y validarlos antes de trasladarlos a las tablas de destino.
Limpieza de datos: Proporcionan un espacio de trabajo para la limpieza de datos, que puede incluir la eliminación de duplicados, la corrección de errores o la conversión de formatos de datos para que coincidan con los requisitos del esquema de destino.
Procesamiento por lotes (o batch processing): Este tipo de tabla se utiliza a menudo en el procesamiento por lotes, en el que grandes volúmenes de datos se procesan y mueven por lotes para minimizar el impacto en los sistemas operativos.
Simplificación de operaciones complejas: Mediante el uso de tablas intermedias, las transformaciones de datos complejas pueden dividirse en pasos más sencillos y manejables. Esto puede mejorar el rendimiento y hacer que el proceso ETL sea más sólido y fácil de depurar.
Desacoplamiento (decoupling): Ayudan a desacoplar la extracción de datos de los procesos de transformación y carga. Esto significa que los sistemas de origen no se ven directamente afectados por las transformaciones, lo que reduce la carga y el posible impacto en el rendimiento de dichos sistemas.
Auditoría y control: También pueden servir como punto de control de la calidad de los datos y de la integridad del proceso ETL, lo que permite revisar los datos antes de cargarlos en el sistema de destino. Esto resulta útil a efectos de auditoría y para garantizar la integridad de los datos.
Cómo crear una staging table en Oracle 23c
En Oracle 23c se ha introducido la cláusula FOR STAGING al lanzar CREATE TABLE.
create table employee_staging (
emp_id number generated always as identity,
name varchar2(50),
email varchar2(100),
salary number(10,2),
dept varchar2(50)
)
for staging;
Comprobamos en cualquier vista *_TABLES que está marcada para staging:
select table_name,
staging
from user_tables
where table_name like '%EMPLOYEE%';
TABLE_NAME STAGING
------------------------------ ----------
EMPLOYEE_STAGING YES
SQL>
También podemos convertir una tabla «normal» a staging con ALTER TABLE:
-- Tabla normal
create table employee_normal (
emp_id number generated always as identity,
name varchar2(50),
email varchar2(100),
salary number(10,2),
dept varchar2(50)
);
alter table employee_normal for staging;
select table_name,
staging
from user_tables
where table_name like '%EMPLOYEE%';
TABLE_NAME STAGING
------------------------------ ----------
EMPLOYEE_NORMAL YES
EMPLOYEE_STAGING YES
Y de nuevo retirarla del staging con la cláusula NOT FOR STAGING:
alter table employee_normal not for staging;
select table_name,
staging
from user_tables
where table_name like '%EMPLOYEE%';
TABLE_NAME STAGING
------------------------------ ----------
EMPLOYEE_NORMAL NO
EMPLOYEE_STAGING YES
Compresión
Por defecto, la compresión está desactivada en este tipo de tablas. Podremos crearla como tal con la cláusula COMPRESSION, pero seguirá desactivada para las cargas de datos en cualquier caso:
drop table if exists employee_staging purge;
drop table if exists employee_normal purge;
create table employee_staging (
emp_id number generated always as identity,
name varchar2(50),
email varchar2(100),
salary number(10,2),
dept varchar2(50)
)
for staging
compress;
create table employee_normal (
emp_id number generated always as identity,
name varchar2(50),
email varchar2(100),
salary number(10,2),
dept varchar2(50)
)
compress;
select table_name,
staging,
compression
from user_tables
where table_name like '%EMPLOYEE%';
TABLE_NAME STAGING COMPRESS
------------------------------ ---------- --------
EMPLOYEE_NORMAL NO ENABLED
EMPLOYEE_STAGING YES DISABLED
Una tabla existente que contenga datos comprimidos puede cambiarse a una tabla de staging, pero las futuras inserciones no se comprimirán.
En el siguiente ejemplo, insertamos algunos datos en la tabla normal, que tiene activada la compresión. Después la cambiamos a tabla staging:
drop table if exists employee_staging purge;
create table employee_staging (
emp_id number generated always as identity,
name varchar2(50),
email varchar2(100),
salary number(10,2),
dept varchar2(50)
)
for staging;
alter table employee_staging compress;
alter table employee_staging compress
*
ERROR at line 1:
ORA-38500: Invalid operation on Staging Table
Help: https://docs.oracle.com/error-help/db/ora-38500/
Algo similar ocurre con el particionamiento. Se puede particionar este tipo de tablas pero no podremos realizar ninguna operación de compresión en las particiones.
Estadísticas
No se pueden sacar estadísticas de este tipo de tablas:
exec dbms_stats.gather_table_stats(null,'EMPLOYEE_STAGING');
BEGIN dbms_stats.gather_table_stats(null,'EMPLOYEE_STAGING'); END;
*
ERROR at line 1:
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 42112
ORA-06512: at "SYS.DBMS_STATS", line 41397
ORA-06512: at "SYS.DBMS_STATS", line 9071
ORA-06512: at "SYS.DBMS_STATS", line 10135
ORA-06512: at "SYS.DBMS_STATS", line 40597
ORA-06512: at "SYS.DBMS_STATS", line 41545
ORA-06512: at "SYS.DBMS_STATS", line 42093
ORA-06512: at line 1
Help: https://docs.oracle.com/error-help/db/ora-20005/
Recycle Bin
OJO, tampoco están protegidas por la papelera de reciclaje de Oracle (que sí que salvará las tablas «normales»).
Por ejemplo, si borramos las tablas que teníamos en el primer ejemplo y comprobamos la papelera podremos ver que la tabla staging no aparece por ninguna parte:
drop table if exists employee_staging;
drop table if exists employee_normal;
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
EMPLOYEE_NORMAL BIN$E4gmN27IIGDgZQAAAAAAAQ==$0 TABLE 2024-02-11:28:10:42
Conclusión
En resumen, las staging tables son una parte fundamental de las tareas de procesamiento e integración de datos en las bases de datos Oracle, ya que proporcionan una forma flexible y eficaz de preparar los datos para su destino final, al tiempo que garantizan la calidad y la integridad de los datos.
Al agregar la validación y transformación de los datos antes de la carga en las tablas permanentes, se pueden evitar errores en los datos y reducir el tiempo de inactividad del sistema.
Únete a la lista de emails para no perderte nada
No tengo ningún producto, publicidad, ni nada que venderte. De hecho, aún no tengo nada que hacer con estos emails. Pero si te interesa estar en contacto o no perderte las próximas actualizaciones en el futuro… Ya sabes 😉
¿Quieres trabajar con nosotros?
Ya sea que necesites mejorar el rendimiento de consultas existentes, planificar y ejecutar migraciones de datos críticas, diseñar bases de datos desde cero o mantener un entorno de base de datos estable, estamos aquí para ayudarte.
Trabajamos con una amplia variedad de sistemas de gestión de bases de datos (DBMS) y estamos comprometidos en proporcionar soluciones adaptadas a tus necesidades específicas. Puedes consultar nuestra lista completa de servicios aquí.
Confía en nosotros para optimizar tus bases de datos y liberar tiempo y recursos para que puedas concentrarte en lo que realmente importa: hacer crecer tu negocio.
¡Contáctanos hoy mismo y descubre cómo podemos ayudarte a lograr un rendimiento óptimo en tu entorno de bases de datos!
Deja una respuesta