Cassandraの列ファミリを使って、次のようなSQLクエリと同様の部分検索を実行しようとしています。SELECT * FROM columnfamily WHERE col = 'val *' val *少なくとも最初の3文字 'val'に一致する値。Cassandra(Pycassa/CQL)返信部分一致
私はSELECT機能でdatastax's documentationを読んだことがありますが、WHERE条件の一部をサポートしていないようです。何か案は?
Cassandraの列ファミリを使って、次のようなSQLクエリと同様の部分検索を実行しようとしています。SELECT * FROM columnfamily WHERE col = 'val *' val *少なくとも最初の3文字 'val'に一致する値。Cassandra(Pycassa/CQL)返信部分一致
私はSELECT機能でdatastax's documentationを読んだことがありますが、WHERE条件の一部をサポートしていないようです。何か案は?
Cassandraではこのようなワイルドカードはサポートされていませんが、同じ最終結果を得ることができるようにデータをモデル化できます。
このクエリを実行したい列を取得し、それを第2の列ファミリに非正規化します。このCFにはワイルドカードクエリを実行するcol
の値としてカラム名を含む1つのワイド行があります。このCFの列の値は、元のCFの行キーまたは元の行の他の表示のいずれかになります。
次に、スライシングを使用して気になる値を取得します。これは上でスライスする広い行だった場合たとえば:
CQLを使用して+---------+----------+--------+----------+---------+--------+----------+
| RowKey | aardvark | abacus | abacuses | abandon | accent | accident |
| +----------+--------+----------+---------+--------+----------+
| | | | | | | |
| | | | | | | |
+---------+----------+-----------------------------+--------+----------+
あなたは、このクエリを使用した「ABA *」で始まるすべてを選択することができます*:
SELECT 'aba'..'abb' from some_cf where RowKey = some_row_key;
これは、あなたの列を与えるだろう'abacus'、 'abacuses'、 'abandon'のためのものです。
この戦略に注意すべきいくつかのものがあります。
word
の複合列を使用することです:some_unique_value
。Cassandraでは、アドホックなクエリを簡単に実行することはできません。代わりに、データをどのように使用するかを把握し、それに応じてCFをモデル化する必要があります。このようなモデリングデータの詳細については、indexing data in CassandraのEd Anuffのこのブログ記事をご覧ください。
*今後のリリースのCassandraでは、列をスライスするためのCQL構文が変更されています。
ありがとうございました!これはまさに私が必要としていたものです。 –
どうやってそれを第2の列ファミリに非正規化しますか? ?もし私がaardvark.abacus.abacusesのようなキーを持っていれば、* .abacusesで終わるもの – user1387717