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.