2012-03-28 57 views
16

La condición LIKE nos permite utilizar comodines en la cláusula where de una instrucción SQL. Esto nos permite realizar la coincidencia de patrones. La condición LIKE se puede usar en cualquier instrucción SQL válida: seleccionar, insertar, actualizar o eliminar. Como este¿Hay alguna consulta para Cassandra igual que SQL: LIKE Condition?

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

como la misma operación anterior cualquier consulta está disponible para Cassandra en CLI.

+0

sdolgy tiene razón. Alternativamente, investiga algo como solandra o DSE. – phact

Respuesta

11

Respuesta simple: no existe un equivalente de COMO

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

Aquí está la referencia de comandos para v0.8:

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

Si mantiene otro conjunto de filas que contienen referencias a un nombre de usuario:

fila : nombre de usuario: bab -> col: babu1, col: babar fila: nombre de usuario: babu -> col: babur

Efectivamente está haciendo trampa rellenando previamente todos los resultados que normalmente buscaría en el mundo RDBMS . El almacenamiento es barato en comparación con lo que era hace años ... razón por la cual este es ahora un enfoque aceptado. Es menos intensivo en la CPU y la memoria para recuperar una lista de información pre-poblada.

+2

No marcaría esta respuesta como aceptada. En realidad, hay un reemplazo para LIKE 'something%' si la columna que está filtrando es una clave de clúster: SELECT * FROM usuarios WHERE user_name <= 'babu' AND user_name> 'babv'; Consulte @ PhilippBlum's answer – Yahor

11

lo sé: Es una cuestión de edad, pero no hay una solución para este tema:

No se puede utilizar como operador en Cassandra, pero se puede utilizar operadores de rango y con el operador de rango se puede solucionar este "como 'whatever%' "

Un ejemplo: Tengo más de un producto. Cada producto tiene su propia clave de partición (primera parte de la clave principal):

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

ahora tengo algunos usuarios:

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

Ahora, quiero encontrar a todos los usuarios que tienen una A en el comenzando. En un mundo de SQL yo uso LIKE 'a%' en Cassandra yo uso esto:

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

El resultado:

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

Pero esta solución no se puede usar para cadenas más largas –

+0

@Mayerz ¿Cuánto tiempo? –

+0

como si quisiera queru para palabras, ¿cómo debería hacerlo? Supongo que esta solución no es buena, ¿verdad? –

13

Desde Cassandra 3.4 (3.5 recomendado), COMO consultas se puede lograr usando un SSTable Índice secundario adjunto (SASI).

Por ejemplo:

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

Creación de la SASI como sigue:

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

Entonces un prefijo como consulta está trabajando:

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

estos ejemplos y más opciones de configuración, como consultas de sufijo, se pueden encontrar en el documentation

Puede encontrar una explicación más detallada sobre cómo funciona SASI here.

Cuestiones relacionadas