2015-08-05 2 views
3

Pour ma base de données Cassandra, je dois définir une valeur en colonne pour toutes les lignes de ma table.CASSANDRA CQL3: Définir la valeur sur la colonne entière

Je vois dans SQL, nous pouvons faire:

UPDATE table SET column1= XXX; 

mais CQL (en cqlsh), cela ne fonctionne pas! Je ne veux pas mettre à jour ligne par ligne jusqu'à 9500 lignes.

Avez-vous une suggestion?

Merci :)

+1

Il y a quelque chose comme la colonne statique qui peut être partagée par plusieurs lignes sur la même partition. http://docs.datastax.com/fr/cql/3.1/cql/cql_reference/refStaticCol.html Utilisable si vos lignes sont sur la même partition. –

Répondre

0

Comme vous DECOUVRIR, CQL! = SQL. Il n'y a aucun moyen de faire ce que vous demandez dans CQL, à moins de parcourir chaque rangée de votre table.

La suggestion de Robert sur la redéfinition de column1 comme static column peut aider. Mais colonnes statiques sont liées à la clé de leur partition, vous aurez encore besoin de préciser que:

[email protected]:stackoverflow2> UPDATE t SET s='XXX' WHERE k='k'; 

En outre, il semble que vous voulez seulement être en mesure de définir une valeur de colonne pour toutes les lignes. Une colonne statique ne fonctionnera pas pour vous si vous voulez que la valeur de la colonne pour être différent pour les lignes FQC dans une partition (de l'exemple dans la documentation DataStax):

[email protected]:stackoverflow2> INSERT INTO t (k, s, i) VALUES ('k', 'I''m shared', 0); 
[email protected]:stackoverflow2> INSERT INTO t (k, s, i) VALUES ('k', 'I''m still shared', 1); 
[email protected]:stackoverflow2> SELECT * FROM t; 

k | i | s 
---+---+------------------ 
k | 0 | I'm still shared 
k | 1 | I'm still shared 

(2 rows) 

Notez que la valeur de la colonne s est la identique sur toutes les lignes CQL sous la clé de partition k. Juste pour que vous compreniez comment cela fonctionne.

+0

Ok, merci Bryce, Alors j'ai besoin d'exécuter 9500 requêtes ... Ça va être long. –

3

Vous pouvez utiliser la requête de mise à jour avec la clause IN au lieu d'exécuter la requête 9500. Au début, sélectionnez primary_key de votre table puis copier les valeurs à cette requête:

UPDATE table SET column1 = XXX WHERE primary_key IN (p1, p2, p3, ...);