Не удается создать таблицу Cassandra с помощью PartitionKey, PrimaryKey и ClusteringOrder

#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 , поскольку мне нужны строки, упорядоченные по его значению