Saltar al contenido

¿Cómo seleccionar datos de una tabla e insertarlos en otra tabla?

Investigamos en todo el mundo online para así traerte la solución para tu dilema, en caso de alguna pregunta déjanos tu pregunta y te respondemos porque estamos para ayudarte.

Solución:

COPY keyspace.columnfamily1 (column1, column2,...) TO 'temp.csv';
COPY keyspace.columnfamily2 (column1, column2,...) FROM 'temp.csv';

aquí proporcione su espacio de claves (nombre de esquema) y en lugar de columnfamilyname1 use la tabla en la que desea copiar y en columnfamily2 proporcione el nombre de la tabla en la que desea copiar.

Y sí, esta es una solución para CQL, sin embargo, nunca lo he intentado con CLI.

Para tablas que no son muy grandes, guárdese el archivo y use una tubería anónima:

cqlsh -e "COPY keyspace.src_table (col1, col2, ...,ColN ) TO STDOUT WITH HEADER=false" | cqlsh -e "COPY keyspace.target_table (col1, col2, ...,ColN ) FROM STDIN" 

Para conjuntos de datos muy grandes, esto no funcionará. Se debe explorar una estrategia de rango por token

Para tablas muy grandes, CQLSH tendrá dificultades para manejar COPY TO/FROM. Aquí se muestra cómo barrer la tabla por rangos de tokens locales y copiar las columnas deseadas de una tabla a otra. Debido a que usa la copia local, esto debe ejecutarse en cada nodo del Centro de datos:

    #!/bin/bash
    #
    # Script to COPY from a SOURCE table's select columns over a TARGET table
    # Assumes the following:
    #
    # * The SOURCE table is very large - otherwise just try:
    #   cqlsh  -e "COPY keyspace.src_table (col1, col2, ...,ColN ) TO STDOUT WITH HEADER=false" 
    #   |cqlsh -e "COPY keyspace.tgt_table (col1, col2, ...,ColN ) FROM STDIN"
    # * SOURCE AND TARGET TABLES are in the SAME KEYSPACE
    # * TARGET columns are named the SAME as SOURCE
    #
    # The script sweeps thru the local tokens to copy only the local data over to the new table
    # Therefore, this script needs to run on every node on the datacenter
    #
    # Set these variables before executing
    #
    USR=cassandra
    PWD=password
    KSP=my_keyspace
    SRC=src_table
    COL="col1, col2, col3"
    PKY="col1"
    TGT=tgt_table

    CQLSH="cqlsh -u $USR -p $PWD -k $KSP"

    function getTokens(){
       for i in $($CQLSH -e "select tokens from system.local;" | awk -F, '/ sort -n
    

    function getDataByTokenRange()
       i=0
       tokens=($(getTokens))
       while [ $i -lt $#tokens[@] ]; do 
             [ $i -eq 0 ]         && echo "SELECT $COL FROM $SRC WHERE token($PKY) <= $tokens[i];" 
             [ "$tokens[i+1]" ]   && echo "SELECT $COL FROM $SRC WHERE token($PKY) >  $tokens[i] AND token($PKY) <= $tokens[i+1];"
             [ ! "$tokens[i+1]" ] && echo "SELECT $COL FROM $SRC WHERE token($PKY) >  $tokens[i];"
             ((i++))
       done
     

function cqlExec() 
  while IFS='' read -r cql 

    main()
       echo "Begin processing ..."
       getDataByTokenRange > getDataByTokenRange.ddl
       cqlExec getDataByTokenRange.ddl
       echo "End procesing"
    

    main

Nos puedes añadir valor a nuestro contenido asistiendo con tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *