Je suis nouveau sur cassandra et hector donc j'essaie d'exécuter des requêtes cql mais le problème est que toutes les colonnes ne sont pas de type string alors comment dow j'exécute la requête "select * from users"?Comment utiliser les requêtes cql pour sortir différents types de données de cassandra avec le client java hector
Ma famille colonne ressemble à ceci:
UPDATE COLUMN FAMILY users
WITH comparator = UTF8Type
AND key_validation_class=UTF8Type
AND column_metadata = [
{column_name: full_name, validation_class: UTF8Type}
{column_name: email, validation_class: UTF8Type}
{column_name: state, validation_class: UTF8Type, index_type: KEYS}
{column_name: gender, validation_class: UTF8Type}
{column_name: birth_year, validation_class: LongType, index_type: KEYS}
{column_name: education, validation_class: UTF8Type}
];
J'utilise le code suivant pour exécuter la requête:
CqlQuery<String, String, String> cqlQuery = new CqlQuery<String, String, String>(Keyspace,stringSerializer,stringSerializer,stringSerializer);
cqlQuery.setQuery("select * from users");
QueryResult<CqlRows<String, String, String>> result = cqlQuery.execute();
if (result != null && result.get() != null) {
List<Row<String, String, String>> list = result.get().getList();
for (Row row : list) {
System.out.println(".");
List columns = row.getColumnSlice().getColumns();
for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
HColumn column = (HColumn) iterator.next();
System.out.print(column.getName() + ":" + column.getValue()
+ "\t");
}
System.out.println("");
}
}
Mais à cause de la colonne « Annee_Naiss » avec la classe de validation longue que je peux » t obtenir la valeur. -je obtenir le résultat suivant en supposant qu'il n'y a qu'un seul enregistrement:
KEY:Carl birth_year: 'strange chars?' full_name:Carl Smith gender:M eduction:electrician state:LA
Si je change ma requête à ceci:
CqlQuery<String, String, Long> cqlQuery = new CqlQuery<String, String, Long>
TutorialBase.tutorialKeyspace, stringSerializer, stringSerializer, longSerializer);
cqlQuery.setQuery("select birth_year from users");
Que cela fonctionne.
Alors, comment puis-je faire cela avec une seule requête et si j'ai plus de types de données comme des booléens et des flottants dans les lignes d'une famille de colonnes?
Salut libjack, merci pour votre réaction. Voulez-vous dire que cela n'est possible que si toutes les colonnes d'une famille de colonnes ont byteBuffer comme classe de validation par défaut? Ce n'est pas exactement ce que je veux, car lors de l'insertion de données dans Cassandra, la vérification des données valides ne fonctionne pas. Il serait possible d'insérer une chaîne dans la colonne birth_year. J'essaie votre code, mais la méthode 'getLong()' n'est pas reconnue. – Rubenski
J'ai trouvé ce qui n'allait pas: "col.getValue(). GetLong()" Cela devrait être "column.getValueBytes(). GetLong()" Ma question précédente est résolue. Il est possible d'avoir plusieurs validation_classe dans une famille de colonnes. – Rubenski
À droite, getLong() est une méthode sur ByteBuffer, alors getValue() ne retournera un ByteBuffer que si c'est le type spécifié pour HColumn: – libjack