2017-07-11 1 views
1

Voici mes données: -Recherche dans la collection de tuple - Cassandra

CREATE TABLE collect_things(k int PRIMARY KEY,n set<frozen<tuple<text, text>>>); 

INSERT INTO collect_things (k, n) VALUES(1, {('hello', 'cassandra')}); 

CREATE INDEX n_index ON collect_things (n); 

Maintenant, je dois interroger comme ceci: -

SELECT * FROM collect_things WHERE n contains ('cassandra') ALLOW FILTERING ; 

sortie : -

k | n 
---+--------- 

Résultats attendus: -

k | n 
---+--------- 
1 | {('hello', 'cassandra')} 

Je veux récupérer mes données avec la valeur 'cassandra'. Est-ce possible ?

Répondre

1

Tuple inside Collection doit être défini comme étant gelé.

Une valeur figée sérialise plusieurs composants en une seule valeur. Les types non gelés permettent les mises à jour de champs individuels. Cassandra traite la valeur d'un type gelé comme un blob. La valeur entière doit être écrasée.

Vous devez traiter congelé comme une valeur unique et vous ne pouvez pas les séparer. Donc, lors de l'interrogation fournir le tuple complet congelé ('hello', 'cassandra').

SELECT * FROM collect_things WHERE n CONTAINS ('hello', 'cassandra'); 

Si vous avez les données:

k | n 
---+--------------------------------------------- 
1 | {('hello', 'cassandra'), ('test', 'seach')} 
2 |       {('test', 'seach')} 

Sortie:

k | n 
---+--------------------------------------------- 
1 | {('hello', 'cassandra'), ('test', 'seach')} 

Source: https://docs.datastax.com/en/cql/3.1/cql/cql_reference/collection_type_r.html