2011-04-11 19 views
20

Mientras que Hive admite consultas similares positivas: ej.¿Hay un equivalente de Hive de SQL "no me gusta"

SELECT * FROM nombre_tabla donde COLUMN_NAME como 'root ~%';

Colmena No compatible negativo como las consultas: ej.

SELECT * FROM nombre_tabla donde COLUMN_NAME no como 'root ~%';

¿Alguien sabe una solución equivalente que Hive no admite?

Respuesta

4

Consulte https://cwiki.apache.org/confluence/display/Hive/LanguageManual si no lo ha hecho. Lo hago referencia todo el tiempo cuando estoy escribiendo consultas para colmena.

no he hecho nada donde estoy tratando de igualar parte de una palabra, pero es posible que echa un vistazo a RLIKE (en esta sección https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#Relational_Operators)

Esto es probablemente un poco de un trabajo de corte, pero podría hacer una sub consulta en la que compruebe si coincide con el valor positivo y haga un CASE (http://wiki.apache.org/hadoop/Hive/LanguageManual/UDF#Conditional_Functions) para tener un valor conocido para la consulta principal para comprobar si coincide o no.

Otra opción es escribir una UDF que haga la comprobación.

Estoy haciendo una lluvia de ideas mientras estoy sentado en mi casa sin acceso a Hive, por lo que me puede estar perdiendo algo obvio. :)

Espero que ayude de una manera u otra. \^_ ^/

EDITAR: Agregar un método adicional de mi comentario a continuación.

Para su ejemplo proporcionado colName RLIKE '[^ r] [^ o] [^ o] [^ t] ~ \ w' Tal vez no sea el REGEX óptimo, sino algo a tener en cuenta en lugar de subconsultas

+0

parece CASO hará lo que lo necesito a, pero estoy teniendo problemas con la sintaxis. ¿Va en la cláusula Select o en la cláusula Where? Este intento falló: 'create table tmp_table as CASE WHEN a.username like' twitter ~% 'THEN' 'ELSE seleccione sum (file_size) como almacenamiento, sum (bandwidth) como ancho de banda de tmp_sites_compare1 a;' Pero no tiene sentido para mí que esté en la cláusula where ... ¿Pensamientos? – CMaury

+0

@CMaury: el 'CASE' está en la cláusula' SELECT'. 'SELECCIONE CASO CUANDO ... ENTONCES ... FIN COMO colName FROM ...' – Nija

+1

@CMaury: Empecé a jugar con 'RLIKE' por algo en mi trabajo, y aunque no va a ser óptimo para todas las situaciones, puede usa la expresión regular 'no' '^'. Para su ejemplo provisto 'colName RLIKE '[^ r] [^ o] [^ o] [^ t] ~ \\ w'' Ese puede no ser el REGEX óptimo, sino algo a considerar en lugar de subconsultas – Nija

40

Prueba esto:

Where Not (Col_Name like '%whatever%') 

también trabaja con RLIKE:

Where Not (Col_Name rlike '.*whatever.*') 
0

en realidad, puede que sea así:

select * from table_name where not column_name like 'root~%'; 
2

En SQL:

select * from table_name where column_name not like '%something%'; 

En Colmena:

select * from table_name where not (column_name like '%something%'); 
0

Usando regexp_extract funciona tan bien:

select * from table_name where regexp_extract(my_column, ('myword'), 0) = '' 
0

En impala puede utilizar != para no como:

columnname != value 
Cuestiones relacionadas