web-dev-qa-db-ja.com

Cassandra error-Order Byは、パーティションキーがEQまたはINによって制限されている場合にのみサポートされます

これが私が作成しているテーブルです。このテーブルには、最後のムンディアルカップをプレイしたプレーヤーに関する情報が含まれています。

CREATE TABLE players ( 
      group text, equipt text, number int, position text, name text,
      day int, month int, year int, 
      club text, liga text, capitan text,
PRIMARY key (name, day, month, year));

次のクエリを実行すると:

選択チームのキャプテンであった最も古いプレーヤーから5つの名前を取得する

これが私のクエリです:

SELECT name FROM players WHERE captain='YES' ORDER BY year DESC LIMIT 5;

そして私はこのエラーを得ています:

パーティションキーがEQまたはINによって制限されている場合にのみサポートされる並べ替え

作成中のテーブルに問題があると思いますが、解決方法がわかりません。

ありがとう。

13
fiticida

実行しようとしているクエリのテーブル定義が正しくありません。

パーティションキー「name」、クラスタリング列「day」、「month」、「year」、およびその他のさまざまな列を含むテーブルを定義しました。

Cassandra=すべてのSELECTクエリでは、EQまたはINを使用してパーティションキーを指定する必要があります。クラスタリング列の一部またはすべてを含めることは、慣れている等価演算子と不等価演算子を使用して許可されますSQL。

クラスタリング列は、定義された順序で含める必要があります。 ORDER BY句には、EQによってまだ特定されていないクラスタリング列のみを、定義された順序で含めることができます。

たとえば、クエリを書くことができます

select * from players where name = 'fiticida' and day < 5 order by month desc;

または

select * from players where name = 'fiticida' and day = 10 and month > 2 order by month asc;

だがしかし

select * from players where name = 'fiticida' and year = 2017;

「日」または「月」を含まない

ではなく

select * from players where name = 'fiticida' and day = 5 order by year desc;

「月」は含まれません。

ここ は、SELECTクエリの公式ドキュメントです。


クエリを満たすために、テーブルは

  • EQまたはINで指定されたパーティションキー:「キャプテン」が機能します
  • 左端のクラスタリング列を使用するORDER BY句:主キー定義の「月」と「日」の左側に「年」を置きます
10
pconley