2012-03-28 11 views
16

La condizione LIKE ci consente di utilizzare caratteri jolly nella clausola where di un'istruzione SQL. Questo ci consente di eseguire la corrispondenza del modello. La condizione LIKE può essere utilizzata in qualsiasi istruzione SQL valida: selezionare, inserire, aggiornare o eliminare. In questo modoEsiste una query per Cassandra uguale a SQL: LIKE Condition?

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

come la stessa operazione precedente qualsiasi query è disponibile per Cassandra in CLI.

+0

sdolgy ha ragione. In alternativa, cerca qualcosa come solandra o DSE. – phact

risposta

11

Semplice risposta: non esiste un equivalente di COME

http://www.datastax.com/docs/0.8/dml/using_cql

Ecco il riferimento di comando per v0.8:

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

Se si mantiene un altro set di righe che contiene riferimenti a un nome utente:

riga : username: bab -> col: babu1, col: babar riga: nome utente: babu -> col: babur

In modo efficace stai imbrogliando pre-compilando tutti i risultati che normalmente cercherai nel mondo RDBMS . Lo storage è economico rispetto a quello di anni fa ... ed è per questo che questo è ormai un approccio accettato. È meno intensivo sulla CPU e sulla memoria recuperare un elenco di informazioni pre-compilato.

+2

Non contrassegnerei questa risposta come accettata. In realtà, vi è una sostituzione per LIKE 'qualcosa%' se la colonna che si sta filtrando è una chiave di cluster: SELECT * FROM users WHERE user_name <= 'babu' AND user_name> 'babv'; Vedi la risposta @ PhilippBlum – Yahor

11

lo so: E 'una domanda vecchia ma c'è una soluzione per questo argomento:

Non è possibile utilizzare come operatore in Cassandra, ma è possibile utilizzare gli operatori spettro e con l'operatore di intervallo si può risolvere questo "come 'whatever%' "

Un esempio: Ho più di un prodotto. Ogni prodotto ha la sua chiave di partizione (prima parte della chiave primaria):

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

ora ho alcuni utenti:

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'); 

Ora, voglio trovare tutti gli utenti che hanno un un al inizio. In un mondo di SQL io uso LIKE 'a%' in Cassandra io uso questo:

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

Il risultato:

productid | username 
-----------+---------- 
    1 |  alex 
    1 | alpha 
    1 | andreas 
    1 |  anna 
+1

Ma questa soluzione non può essere utilizzata per stringhe più lunghe –

+0

@Mayerz quanto tempo? –

+0

come se volessi queru per le parole, come dovrei farlo? Immagino che questa soluzione non sia buona, no? –

13

Dal Cassandra 3.4 (3.5 consigliato), COME query può essere realizzato utilizzando uno SSTable Indice secondario allegato (SASI).

Ad esempio:

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

Creazione della SASI come segue:

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

Poi un prefisso come espressione di ricerca sta lavorando:

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

questi esempi e più opzioni di configurazione, come query suffisso, può essere trovato nel documentation

Una spiegazione più approfondita su come funziona SASI è disponibile here.