Gestión de datos

Clonación de tablas: Crear instantáneas sin duplicar datos

Corporación Actian

27 de septiembre de 2024

resumen del concepto de clonación de tablas

¿Qué es la clonación de tablas?

La clonación de tablas es una operación de base de datos que realiza una copia de una tabla X100 sin la penalización de rendimiento que supone copiar los datos subyacentes. Si llegó aquí buscando la sintaxis SQL para clonar una tabla en Actian Vector, funciona así:

CREATE TABLE newtable CLONE existingtable
[, newtable2 CLONE existingtable2, ...]
            [ WITH <option, option, ...> ];

Las opciones CON se enumeran brevemente aquí. Más adelante las explicaremos con más detalle.

WITH <option>
NODATA
Clona sólo la estructura de la tabla, no su contenido.
SUBVENCIONES
Copie también privilegios de tablas existentes a tablas nuevas.
REFERENCIAS=     
     NINGUNA
   | RESTRINGIDA
   | EXTENDIDO
Deshabilitar la creación de referencias entre tablas nuevas (NINGUNA), crear referencias entre tablas nuevas para que coincidan con las existentes (RESTRINGIDA, por defecto), o habilitar adicionalmente la creación de referencias de tablas nuevas a tablas existentes que no se están clonando (EXTENDIDA).

La nueva tabla -el "clon"- tiene el mismo contenido que la tabla existente en el momento de la clonación. Lo principal que hay que recordar es que el clon que has creado es sólo una tabla. Ni más ni menos. Tiene exactamente el mismo aspecto que una copia. La nueva tabla puede insertarse, actualizarse, borrarse e incluso eliminarse posteriormente, sin que ello afecte a la tabla original, y viceversa.

Durante el desarrollo de esta función, era frecuente encontrar preguntas del tipo "¿Se puede crear una vista en un clon?" o "¿Se puede actualizar un clon?" y "¿Se pueden conceder privilegios en un clon?". La respuesta, en todos los casos, es sí. Es una tabla. Si te sirve de ayuda, después de clonar una tabla, puedes simplemente olvidar que la tabla fue creada con la sintaxis CLONE. Eso es lo que hace Vector.

¿Qué no es la clonación de mesas?

Es igualmente importante reconocer lo que no es la clonación de tablas. Sólo puede clonar una tabla X100, todo su contenido o nada de él, dentro de la misma base de datos. No se puede clonar sólo parte de una tabla, ni clonar una tabla entre dos bases de datos.

¿Para qué sirve?

Con la clonación de tablas, puede hacer copias económicas de una tabla X100 existente. Esto puede ser útil para crear y mantener instantáneas diarias de una tabla que cambia gradualmente con el tiempo, por ejemplo. Estas instantáneas pueden consultarse como cualquier otra tabla.

Los usuarios también pueden hacer copias experimentales de conjuntos de tablas y probar cambios en ellas, antes de aplicar esos cambios a las tablas originales. De este modo, los usuarios pueden experimentar con las tablas de forma más rápida y segura.

Cómo funciona la clonación de tablas

En el modelo de almacenamiento de X100, cuando un bloque de datos de la tabla se escribe en el almacenamiento, ese bloque nunca se modifica, excepto para ser borrado cuando ya no se necesita. Si se modifica el contenido de la tabla, se escribe un nuevo bloque con los nuevos datos, y la lista de bloques de almacenamiento de la tabla se actualiza para incluir el nuevo bloque y excluir el antiguo.

diagrama de bloques de clonación de tablas

Catálogo X100 y almacenamiento para una tabla de una columna MYTABLE, con dos bloques de almacenamiento.

No hay nada que impida a X100 crear una tabla que haga referencia a los bloques de almacenamiento de otra tabla, siempre y cuando sepamos a qué bloques de almacenamiento sigue haciendo referencia al menos una tabla. Eso es lo que hacemos para clonar una tabla. Esto permite a X100 crear lo que parece una copia de la tabla, sin tener que copiar los datos subyacentes.

En la imagen siguiente, mytableclone hace referencia a los mismos bloques de almacenamiento que mytable.

diagrama de bloques de clonación de tablas

X100 catálogo y almacenamiento después de MYTABLECLONE se crea como un clon de MYTABLE.

Tenga en cuenta que cada columna de la tabla, incluida la columna de la nueva tabla, "posee" un archivo de almacenamiento, que es el archivo de destino de cualquier nuevo bloque de almacenamiento para esa columna. Por lo tanto, si se añaden nuevas filas a mytableclone en el diagrama anterior, el nuevo bloque se añadirá a su propio archivo de almacenamiento:

diagrama de bloques de clonación de tablas

Catálogo X100 y almacenamiento después de añadir otro bloque de almacenamiento a MYTABLECLONE.

Las tablas X100 también pueden tener actualizaciones in-memory , que se aplican sobre los bloques de almacenamiento cuando se escanea la tabla. Estas actualizaciones in-memory memoria no se clonan, sino que se copian. Esto significa que una tabla que haya tenido recientemente un gran número de actualizaciones podría no clonarse instantáneamente.

Mi primer clon: Un ejemplo sencillo

Cree una tabla (tenga en cuenta que en Actian Ingres se necesita WITH STRUCTURE=X100 para asegurarse de obtener una tabla X100):

CREAR TABLA mytable (c1 INT, c2 VARCHAR(10)) CON ESTRUCTURA=X100;

Inserta algunas filas en él:

INSERT INTO mytable VALUES (1, 'uno'), (2, 'dos'), (3, 'tres'), (4, 'cuatro'), (5, 'cinco');

Crea un clon de esta tabla llamado myclone:

CREATE TABLE myclone CLONE mytable;

Las tablas tienen ahora el mismo contenido:

SELECT * FROM mytable;
c1 c2
1 un
2 dos
3 tres
4 cuatro
5 cinco
SELECT * FROM myclone;
c1 c2
1 un
2 dos
3 tres
4 cuatro
5 cinco

Observe que no existe ninguna otra relación entre la tabla y su clon. Las dos tablas pueden modificarse independientemente, como si hubiera creado la nueva tabla con CREATE TABLE ... AS SELECT ...

UPDATE mytable SET c2 = 'trois' WHERE c1 = 3;
INSERT INTO mytable VALUES (6, 'six');
DELETE FROM myclone WHERE c1 = 1;
SELECT * FROM mytable;
c1 c2
1 un
2 dos
3 trois
4 cuatro
5 cinco
6 seis
SELECT * FROM myclone;
c1 c2
2 dos
3 tres
4 cuatro
5 cinco

Incluso puedes eliminar la tabla original, y el clon no se verá afectado:

DROP TABLE mytable;

SELECT * FROM myclone;
c1 c2
2 dos
3 tres
4 cuatro
5 cinco

Seguridad y permisos

Puedes clonar cualquier tabla de la que tengas el privilegio de SELECCIONAR, incluso si no eres su propietario.

Cuando creas una tabla, ya sea por clonación o de otro modo, eres su propietario. Eso significa que tienes todos los privilegios sobre ella, incluido el de eliminarla.

Por defecto, los privilegios que otras personas tienen sobre tu clon recién creado son los mismos que si hubieras creado una tabla de la forma normal. Si desea que todos los privilegios que se concedieron a otros usuarios en la tabla existente se concedan al clon, utilice WITH GRANTS.

métadonnées Clone

La opción CON NODATA creará una copia vacía de la(s) tabla(s) existente(s), pero no del contenido. Si haces esto, no estás haciendo nada que no pudieras hacer con SQL existente, por supuesto, pero puede ser más fácil usar la sintaxis CLONE para hacer una copia métadonnées de un grupo de tablas con complicadas relaciones referenciales entre ellas.

La opción CON NODATA también es útil en Actian Ingres 12.0. La funcionalidad de clonado sólo funciona con tablas X100, pero Actian Ingres 12.0 permite crear clones métadonnées de tablas Ingres no X100, como tablas heap.

Clonación de varias tablas a la vez

Si tienes un conjunto de tablas conectadas por relaciones de clave externa, puedes clonarlas para crear un conjunto de tablas conectadas por las mismas relaciones, siempre que las clones todas en la misma sentencia.

Por ejemplo, supongamos que tenemos el PROVEEDOR, PARTE y PARTE_SUPP, definidos así:

CREAR TABLA proveedor (
proveedor_id INT PRIMARY KEY,
nombre_proveedor VARCHAR(40),
dirección_proveedor VARCHAR(200)
);

CREAR TABLA part (
part_id INT PRIMARY KEY,
nombre_parte VARCHAR(40)
);

CREAR TABLA part_supp (
proveedor_id INT REFERENCIAS proveedor(proveedor_id),
part_id INT REFERENCIAS part(part_id),
cost DECIMAL(6, 2)
);

Si queremos clonar estas tres tablas a la vez, podemos suministrar varios pares de tablas a la sentencia clone:

CREAR TABLA
proveedor_clon CLONE proveedor,
part_clone CLONE part,
part_supp_clone CLONE part_supp;

Ahora tenemos clones de las tres tablas. PART_SUPP_CLONE hace referencia a las nuevas tablas SUPPLIER_CLONE y PART_CLONE - no hace referencia a las antiguas tablas PART y SUPPLIER.

Sin la clonación de tablas, tendríamos que crear las nuevas tablas nosotros mismos con las mismas definiciones que las tablas existentes y, a continuación, copiar los datos en las nuevas tablas, lo que se vería ralentizado por las comprobaciones de integridad referencial necesarias. Con la clonación de tablas, el sistema de gestión de bases de datos no tiene que realizar una costosa comprobación de integridad referencial en las nuevas tablas porque su contenido es el mismo que el de las tablas existentes, que tienen las mismas restricciones.

CON REFERENCIAS=NINGUNA

¿No quieres que tus clones tengan referencias entre sí? Entonces utiliza WITH REFERENCES=NONE:

CREAR TABLA
proveedor_clon CLONE proveedor,
part_clone CLONE part,
part_supp_clone CLONE part_supp
CON REFERENCES=NONE;

CON REFERENCIAS=EXTENDIDAS

Normalmente, la sentencia CLONE sólo creará referencias entre los clones recién creados.

Por ejemplo, si sólo ha clonado PART y PART_SUPP:

CREAR TABLA
part_clone CLONE part,
part_supp_clone CLONE part_supp;

PART_SUPP_CLONE tendría una referencia de clave externa a PART_CLONE, pero no a SUPPLIER.

Pero, ¿y si quieres que todos los clones que crees en una sentencia conserven sus claves externas, aunque eso signifique hacer referencia a las tablas originales? Puede hacerlo si lo desea, utilizando WITH REFERENCES=EXTENDED:

CREAR TABLA
part_clone CLONE part,
part_supp_clone CLONE part_supp
CON REFERENCES=EXTENDED;

Después del SQL anterior, PART_SUPP_CLONE haría referencia a PART_CLONE y SUPPLIER.

Clonación de tablas: casos prácticos y ventajas reales

La posibilidad de clonar tablas abre nuevos casos de uso. Por ejemplo, una gran empresa de comercio electrónico puede utilizar la clonación de tablas para replicar su base de datos de pedidos de producción. Esto facilita la elaboración de informes y análisis sin afectar al rendimiento del sistema activo. Las ventajas incluyen:

  • Reducción de la latencia de los informes. Antes, los informes se generaban de un día para otro mediante procesos ETL por lotes. La clonación de tablas puede crear informes casi en tiempo real, lo que permite una prise de décision más rápida. También puede utilizarse para crear una instantánea diaria o semanal de bajo coste de una tabla que recibe cambios graduales.
  • Mejora de la productividad de los analistas. Los analistas ya no tienen que hacer una copia completa de una tabla para probar modificaciones. En su lugar, pueden clonar la tabla y trabajar en el clon, sin tener que esperar a una copia grande de la tabla ni modificar el original.
  • Ahorro de costes. Un clon no ocupa almacenamiento adicional inicialmente, porque sólo hace referencia a los bloques de almacenamiento de la tabla original. Los nuevos bloques de almacenamiento se escriben sólo cuando es necesario cuando se modifica la tabla. Por tanto, la clonación de tablas reduciría los costes de almacenamiento en comparación con el mantenimiento de un almacén de datos independiente para la elaboración de informes.

Este ejemplo hipotético ilustra las ventajas potenciales de la clonación de tablas en un escenario real. Si implementa la clonación de tablas de forma eficaz, puede conseguir mejoras significativas en la velocidad de desarrollo, el rendimiento, el ahorro de costes y la eficiencia operativa.

Crear copias instantáneas de tablas X100

La clonación de tablas permite la creación económica de copias instantáneas de tablas X100 existentes. Estas nuevas tablas son tablas por derecho propio, que pueden modificarse independientemente de las originales.

Actian Vector 7.0, disponible este otoño, ofrecerá clonación de tablas. Podrá crear fácilmente instantáneas de los datos de las tablas en cualquier momento, al tiempo que podrá volver a estados anteriores sin duplicar el almacenamiento. Con esta función de clonación de tablas, podrá probar escenarios rápidamente, restaurar datos a un estado anterior y reducir los costes de almacenamiento. Más información.

logo avatar actian

Acerca de Actian Corporation

Actian hace que los datos sean fáciles. Nuestra plataforma de datos simplifica el modo en que las personas conectan, gestionan y analizan los datos en entornos en la nube, híbridos y locales. Con décadas de experiencia en gestión de datos y análisis, Actian ofrece soluciones de alto rendimiento que permiten a las empresas tomar decisiones basadas en datos. Actian cuenta con el reconocimiento de los principales analistas y ha recibido premios del sector por su rendimiento e innovación. Nuestros equipos comparten casos de uso probados en conferencias (por ejemplo, Strata Data) y contribuyen a proyectos de código abierto. En el blog de Actian, tratamos temas que van desde la ingesta de datos en tiempo real hasta el análisis basado en IA. Conozca al equipo directivo https://www.actian.com/company/leadership-team/