2015-12-08 2 views
3

J'ai une Cassandra et je veux utiliser la requête cql "IN". Je dois donc changer l'ordre des éléments dans ma clé primaire composée (seule la dernière pièce est disponible pour les requêtes "IN"). La table est assez grande mais ne couvre pas plusieurs nœuds maintenant.Modifier l'ordre de la clé primaire composée

Alors ce que j'ai essayé maintenant (ce qui ne fonctionne pas) est la suivante:

  1. créer une nouvelle famille de colonnes avec des colonnes identiques mais différents ordre des éléments clés primaires
  2. processus d'écriture d'arrêt et nodetool chasse
  3. copie tous/données/keyspace/columnfamily/fichiers
  4. renommer les fichiers pour correspondre au nouveau nom de famille de la colonne
  5. utiliser le chargeur sstable pour charger les fichiers dans la nouvelle colonne famille

Mais après la clé primaire est juste foiré:

Impossible de décoder la valeur « 53ccb45d4ab0d3560e8c36fd » (pour la colonne « cent ») comme int: il faut déballer un argument de chaîne de longueur 4

Je ne peux pas utiliser la copie ... à ... parce que c'est juste ... timing sur

Toutes les idées?

+1

Ne pas utiliser une requête IN :-) Il n'est pas efficace (voir, par exemple, https: // lostechies. com/ryansvihla/2014/09/22/cassandra-query-patterns-not-using-the-in-query-for-multiple-partitions /) – jny

+0

@jny bien scylla devrait résoudre ce problème. mais de toute façon, si l'alternative est de marteler la DB avec beaucoup de quereis similaire (ce que je fais actuellement), le perfromace est également très pauvre. Je veux vraiment voir alors IN au lieu de simplement croire :-) – KIC

+0

@jny aussi: de votre llink: "Le mot-clé" in "a sa place comme lorsqu'on interroge INSIDE d'une partition, mais dans l'ensemble c'est quelque chose que je souhaite wasn Pas faisable sur toutes les partitions, j'ai corrigé une bonne douzaine de problèmes de performance avec ça jusqu'à présent, et je n'ai pas encore vu ça plus vite que des requêtes séparées plus asynchrones. ", c'est exactement ce que je veux faire. – KIC

Répondre

0

Il y a quelques bons chargeurs disponibles sur GIT qui fonctionnent mieux et ne dépasseront pas le délai comme l'outil CQLSH COPY TO/FROM.

You can find it here. ou here

Sinon, je vous recommande d'utiliser quelque chose comme SPARK pour déplacer les données pour vous.

Vous pouvez également utiliser SCALA une fois que vous avez votre deuxième table déjà créé:

val mydata = sc.cassandraTable("mykeyspace","mytable") 
.select("key","column1","column2","column3") 

mydata.saveToCassandra("whateverkeyspace","whatevertable", SomeColumns("key","column1","column2","colum3"))