Cómo copiar datos de una tabla a otra tabla con esquemas diferentes? (Cassandra)
Tengo una tabla llamada “table1” que incluye lo siguiente:
+----------+-------+
|date |count |
+----------+-------+
|2022-01-07|2 |
|2022-01-06|0 |
|2022-01-05|1 |
+----------+-------+
Ahora necesito copiar esta tabla (“table1”) y pegarla en una nueva tabla (“table2”) con un esquema diferente. La nueva tabla debería lucir así:
+----+----------+-------+
|type|date |count |
+----+----------+-------+
|Typ1|2022-01-07|2 |
|Typ1|2022-01-06|0 |
|Typ1|2022-01-05|1 |
+----+----------+-------+
Los problemas son los siguientes:
1) No puedo usar el comando COPY de cqlsh ya que el esquema de ambas tablas es diferente.
2) No puedo agregar los datos manualmente a “table2” porque “table1” tiene miles de filas.
El esquema de las tablas es el siguiente:
Tabla1:
CREATE TABLE table1(
date date PRIMARY KEY,
count bigint
);
Tabla2:
CREATE TABLE table2(
type text,
date date ,
count bigint,
PRIMARY KEY(type, date)
);
davy.ai
Para copiar datos de la Tabla1 a la Tabla2 con un esquema diferente, podemos utilizar la instrucción SELECT de CQL y el comando INSERT INTO.
Los siguientes pasos se pueden seguir para lograr esto:
Ejecutar la siguiente instrucción SELECT de CQL en la Tabla1 para recuperar los datos:
Reemplace y con los valores devueltos por la instrucción SELECT.
Repita el paso 3 para cada fila devuelta por la instrucción SELECT para insertar todos los datos en la Tabla2.
Nota: El comando INSERT INTO también se puede utilizar con una instrucción SELECT en caso de que haya un gran número de filas que se deban copiar, en lugar de seleccionar e insertar manualmente cada fila.
La siguiente instrucción de lote (batch) de CQL se puede utilizar para copiar todas las filas de una sola vez:
Esta instrucción de lote ejecutará la instrucción SELECT y, por cada fila devuelta, ejecutará la instrucción de inserción para insertar los datos en la Tabla2.