32

このLIKE条件により、SQL ステートメントの where 句でワイルドカードを使用できます。これにより、パターンマッチングを実行できます。条件は、select、insert、update、または deleteのLIKE有効な SQL ステートメントで使用できます。このような

SELECT * FROM users
WHERE user_name like 'babu%';

上記の同じ操作と同様に、CLI で Cassandra に対して任意のクエリを使用できます。

4

5 に答える 5

38

Cassandra 3.4 (3.5 を推奨) 以降、SSTable Attached Secondary Index (SASI) を使用して LIKE クエリを実現できます。

例えば:

CREATE TABLE cycling.cyclist_name ( 
  id UUID PRIMARY KEY, 
  lastname text, 
  firstname text
);

次のように SASI を作成します。

CREATE CUSTOM INDEX  fn_prefix ON cyclist_name (firstname)
USING 'org.apache.cassandra.index.sasi.SASIIndex';

次に、プレフィックス LIKE クエリが機能しています。

SELECT * FROM cyclist_name WHERE firstname LIKE 'M%';
SELECT * FROM cyclist_name WHERE firstname LIKE 'Mic%';

これらの例と、サフィックス クエリなどのその他の構成オプションは、ドキュメントに記載されています。

SASI がどのように機能するかについての詳細な説明は、こちらにあります

于 2017-07-19T11:25:37.547 に答える
21

私は知っています:それは古い質問ですが、このトピックには解決策があります:

カサンドラでは like 演算子を使用できませんが、範囲演算子を使用できます。範囲演算子を使用すると、この「like 'whatever%'」を解決できます。

例: 複数の製品を持っています。各製品には独自のパーティション キー (主キーの最初の部分) があります。

CREATE TABLE user(productId int, username text, PRIMARY KEY(productId, username));

今、私には何人かのユーザーがいます:

INSERT INTO user(productId, username) VALUES (1, 'anna');
INSERT INTO user(productId, username) VALUES (1, 'alpha');
INSERT INTO user(productId, username) VALUES (1, 'andreas');
INSERT INTO user(productId, username) VALUES (1, 'alex');
INSERT INTO user(productId, username) VALUES (1, 'bernd');
INSERT INTO user(productId, username) VALUES (1, 'bob');

今、私は先頭に a を持つすべてのユーザーを見つけたいと思っています。SQL の世界では、Cassandra で LIKE 'a%' を使用します。これを使用します。

SELECT * FROM user WHERE productId = 1 AND username >= 'a' AND username < 'b';

結果:

productid | username
-----------+----------
     1 |     alex
     1 |    alpha
     1 |  andreas
     1 |     anna
于 2016-05-08T00:33:30.020 に答える
15

簡単な答え: LIKEに相当するものはありません

https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlSelect.html

v0.8 のコマンド リファレンスは次のとおりです。

http://www.datastax.com/docs/0.8/references/cql#cql-reference

ユーザー名への参照を保持する行の別のセットを維持する場合:

行: username:bab -> col:babu1、col:babar 行: username:babu -> col:babur

RDBMS の世界で通常検索するすべての結果を事前に入力することで、効果的にごまかしています。ストレージは数年前に比べて安価です...そのため、これが現在受け入れられているアプローチです. 事前入力された情報のリストを取得するため、CPU とメモリへの負荷が少なくなります。

于 2012-03-28T10:49:36.497 に答える