Моей CQL3 таблицы нравится этаPRIMARY KEY часть ColName не может быть ограничена в связи
CREATE TABLE stringindice (
id text,
colname text,
colvalue blob,
PRIMARY KEY (id, colname, colvalue)
) WITH COMPACT STORAGE
и я вставил некоторые значения в нем. Теперь, когда я пытаюсь сделать что-то вроде этого:
QueryBuilder.select().all().from(keySpace, indTastringindice ble).where().and(QueryBuilder.eq("id", 'rowKey")).and(QueryBuilder.in("colname", "string1", "string2"));
который является по существу
select * from stringindice where id = "rowkey" and colname IN ("string1", "string2")
Я получаю следующее исключение:
com.datastax.driver.core.exceptions.InvalidQueryException: PRIMARY KEY part colname cannot be restricted by IN relation
at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:35)
at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:214)
at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:169)
at com.datastax.driver.core.Session.execute(Session.java:110)
В документации CQL3 написано, что
«Более того, IN re lation разрешено только в последнем столбце ключа раздела и в последнем столбце полного первичного ключа. "
Похоже, что это не поддерживается !! Если да, то каков будет способ, если я должен использовать что-то вроде IN для одновременного приравнивания многих значений?
Спасибо Richard , но, к сожалению, мы должны использовать Compact Storage по ряду других причин. Любая другая альтернатива нам в статье? – Easility
Зачем вам компактное хранилище? Эта схема хранит значение colvalue внутри ключа столбца, поэтому оно ограничено до 64 КБ. Некомпактное хранилище очень похоже, за исключением того, что colvalue является фактическим значением столбца. – Richard
Ну, это лучший способ сохранить наш широкий ряд рисунков бережливости. Вы можете увидеть больше причин в аналогичной дискуссии здесь https://groups.google.com/a/lists.datastax.com/forum/#!topic/java-driver-user/hgZnyVJhWCw – Easility