#scala #cassandra #phantom-dsl
#scala #cassandra #phantom-dsl
Вопрос:
Я пытаюсь создать следующую таблицу Cassandra с помощью Phantom
object itemId extends StringColumn(this) with PartitionKey[String]
object anotherItemId extends StringColumn(this) with PrimaryKey[String]
object similarity extends DoubleColumn(this) with ClusteringOrder[Double] with Descending
Поэтому я хочу иметь возможность получать все записи itemId
. И я хочу, чтобы они были упорядочены similarity
. Я установил anotherItemId
как PrimaryKey
, потому itemId, similarity
что составной ключ не будет уникальным. Но я получаю следующую ошибку:
com.websudos.phantom.exceptions.InvalidClusteringKeyException: Table similarities: When using CLUSTERING ORDER all PrimaryKey definitions must become a ClusteringKey definition and specify order.
Этот пример показывает, что использование PartitionKey
, PrimaryKey
и ClusteringOrder
возможно. Что я делаю не так?
Ответ №1:
Как сообщает ошибка, когда вы указываете порядок кластеризации, вам необходимо указать один для каждой отдельной части вашего ключа кластеризации. Если пример указывает на обратное, пример неверен, и я сейчас его обновлю.
object itemId extends StringColumn(this) with PartitionKey[String]
object anotherItemId extends StringColumn(this) with ClusteringOrder[String] with Ascending
object similarity extends DoubleColumn(this) with ClusteringOrder[Double] with Descending
Помните, PRIMARY_KEY = PARTITION_KEYS CLUSTERING_KEYS
, поэтому все ключи кластеризации или какие вызовы phantom PrimaryKey
должны стать ClusteringOrder
, когда вы хотите определить порядок.
Это ограничение, наложенное Cassandra, phantom просто выдает ошибку быстрее, чем Cassandra.
Комментарии:
1. спасибо за ответ. В итоге я получил то же решение, за исключением того, что я разместил
similarity
ранееanotherItemId
, поскольку мне нужны строки, упорядоченные по его значению