したい SELECT DISTINCT
はCassandraにありますが、Cassandraはこれらの操作をサポートしていないと思います。どうすればSELECT DISTINCT
Cassandraで?出来ますか?
CQL 3.1.1 以降は、パーティションキーに対してのみDISTINCT操作をサポートします。
SELECTステートメントでパーティションキーを一覧表示できるようになりました(DISTINCT修飾子を使用)。 CASSANDRA-4536 を参照してください。
select_statement ::= SELECT [ JSON | DISTINCT ] ( select_clause | '*' )
FROM table_name
[ WHERE where_clause ]
[ GROUP BY group_by_clause ]
[ ORDER BY ordering_clause ]
[ PER PARTITION LIMIT (integer | bind_marker) ]
[ LIMIT (integer | bind_marker) ]
[ ALLOW FILTERING ]
select_clause ::= selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector ::= column_name
| term
| CAST '(' selector AS cql_type ')'
| function_name '(' [ selector ( ',' selector )* ] ')'
| COUNT '(' '*' ')'
where_clause ::= relation ( AND relation )*
relation ::= column_name operator term
'(' column_name ( ',' column_name )* ')' operator Tuple_literal
TOKEN '(' column_name ( ',' column_name )* ')' operator term
operator ::= '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | CONTAINS | CONTAINS KEY
group_by_clause ::= column_name ( ',' column_name )*
ordering_clause ::= column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*
CQL 3.1.1より前では、cassandraで個別の値を選択することはできません。
古いバージョンのCassandraを使用している場合は、その機能をアプリケーションに実装する必要があります。 JIRAチケット を作成して機能の実装をリクエストできますが、非正規化されたデータモデルに対するカサンドラのバイアスのため、この機能はあまり使用されないようです。
非常に大規模な分散クラスター全体で一意の行を見つける必要があると想像してください。
他の人が書いたように、Cassandraの列の個別化はサポートされておらず、主キーのみがサポートされています。 cassandraでこれを行うための2つのオプション:
2つのどちらを選択するかは、実際のデータ構造/サイズとニーズによって異なります。テーブルサイズが小さい場合、またはこの操作をほとんど実行しない場合、テーブルが大きい場合はオプション1で十分かつ高速になります。または、これを実行します。多くの場合、クエリは#2を使用します。