2017-06-25 9 views
0

Je travaille sur la migration de Cassandra. J'ai construit un nouveau cluster Cassandra - Cassandra 2.1.8 sur Ubuntu 14.04. La base de données a été restaurée à partir des instantanés. Le cluster Source Cassandra est également la version 2.1.8.La même requête ne s'exécute pas dans la base de données restaurée de Cassandra

Je suis confronté à ce problème étrange. Sur le cluster d'origine, je peux exécuter la requête suivante en utilisant cqlsh sans aucune erreur. cqlsh est la version 5.0.1. SELECT * FROM "featureitems" WHERE "categoryId" = 2 LIMIT 100;

Sur une nouvelle même requête de cluster throws erreur: InvalidRequest: code=2200 [Invalid query] message="Undefined name categoryId in where clause ('categoryId = 2')"

mais il fonctionne parfaitement bien quand je supprimer des guillemets doubles SELECT * FROM featureitems WHERE categoryId = 2 LIMIT 100;

Il ressemble à un problème de configuration, mais je ne sais pas où regarder. Toute suggestion dans ce sens est appréciée.

Répondre

1

Cassandra convertit tous les noms de colonne/table/keyspace en minuscules s'ils ne sont pas entre guillemets. Par conséquent, si vous avez besoin d'un caractère majuscule dans le nom de colonne/table/espace-clé, utilisez des guillemets doubles.

Vous pouvez utiliser la commande DESC TABLE featureitems pour décrire la table.

Dans votre première requête vous avez joint categoryId entre guillemets, il semble donc pour la colonne avec le capital I.

Dans votre deuxième requête categoryId ne sont pas entre guillemets, par conséquent, il sera converti en categoryid .. qui est présent dans le tableau et travaille donc.

+0

J'ai comparé la définition de la table d'origine avec une nouvelle et je peux voir que dans les nouveaux noms de table ont été convertis en minuscules qui cause le problème. C'est un problème avec mon script de création de tablespace que je dois examiner. Nous vous remercions de votre aide. – Robert