/ / Copier de table en table (modification de la clé primaire) - java, apache-spark, cassandra, migration de base de données

Copier de table en table (modification de la clé primaire) - java, apache-spark, cassandra, migration de base de données

J'ai besoin de changer l'ordre de ma clé primaire

PRIMARY KEY (a, b) --> PRIMARY KEY (b,a)

Mais dans Cassandra, je ne peux pas simplement modifier PRIMARY KEY comme ceci: modifier la clé primaire composite dans cassandra CQL 3.0

Je souhaite donc simplement déplacer les données de l’ancienne table vers une nouvelle table que j’ai créée. Comme le nombre de lignes est énorme, je dois utiliser Spark.

Données "en":

Je récupère les données comme celles-ci de l'ancien tableau:

JavaRDD<CassandraRow> initialRDD;

Question:

Est-il possible de l'enregistrer directement dans la nouvelle table car la ligne elle-même n'a pas changé?

Ce que j'ai réussi à faire:

Je pourrais le faire, mais il semble absurde de cartographier CassandraRow en CassandraRow.

javaFunctions(initialRDD).writerBuilder("targetKeyspace", "targetTable", mapToRow(CassandraRow.class)).saveToCassandra();

c’est ainsi qu’il me provoque une erreur:

Some primary key columns are missing in RDD or have not been selected: ...

Réponses:

1 pour la réponse № 1

Je n’utilise pas beaucoup spark, mais je pense qu’il faudrait créer une seconde table avec le nouvel ordre de clé, puis charger la première table dans un RDD à l’aide du connecteur spark:

val rdd = sc.cassandraTable ("keyspace", "table1")

Puis enregistrez-le dans la deuxième table avec le nouvel ordre de clé:

rdd.saveToCassandra ("keyspace", "table2", SomeColumns ("b", "a"))