es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)
);
Tags:  ,

Answer

  1. Avatar for 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:

    1. Crear la Tabla2 con el esquema deseado según se muestra en la pregunta anterior.
    2. Ejecutar la siguiente instrucción SELECT de CQL en la Tabla1 para recuperar los datos:

      SELECT date, count FROM table1;
      

    3. Para cada fila devuelta por la instrucción SELECT, insertar los datos en la Tabla2 ejecutando la siguiente instrucción INSERT INTO de CQL:
      INSERT INTO table2(type, date, count) VALUES('Typ1', <date_value>, <count_value>);
      

      Reemplace y con los valores devueltos por la instrucción SELECT.

    4. 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:

    BEGIN BATCH
      SELECT date, count FROM table1;
      INSERT INTO table2(type, date, count) VALUES('Typ1', <date_value>, <count_value>);
      ... // Repita la instrucción de inserción anterior para cada fila
    APPLY BATCH;
    

    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.

Comments are closed.