Y at-il un équivalent de ruche de SQL " pas comme"

Alors que Hive prend en charge les requêtes positives comme: ex.

Select * from nom_table where column_name comme la racine de l'~%';

Hive ne prend pas en charge les requêtes de type négatif: ex.

Select * from nom_table where column_name pas comme la racine de l'~%';

Est-ce que quelqu'un connaît une solution équivalente que Hive prend en charge?

21
demandé sur MPelletier 2011-04-12 01:53:10

7 réponses

Vérifier https://cwiki.apache.org/confluence/display/Hive/LanguageManual Si vous ne l'avez pas fait. je le référence tout le temps quand j'écris des requêtes pour hive.

Je n'ai rien fait où j'essaie de faire correspondre une partie d'un mot, mais vous pouvez vérifier RLIKE (dans cette section https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#Relational_Operators)

C'est probablement un peu un travail de hack, mais vous pouvez faire une sous-requête où vous vérifiez si elle correspond à la valeur positive et faire un CASE (http://wiki.apache.org/hadoop/Hive/LanguageManual/UDF#Conditional_Functions ) pour avoir une valeur connue pour la requête principale à vérifier pour voir si elle correspond ou non.

Une autre option consiste à écrire un UDF qui fait la vérification.

Je fais juste un remue-méninges assis à la maison sans accès à Hive, donc il me manque peut-être quelque chose d'évident. :)

J'espère que cela aide d'une manière ou d'une autre. \^_^/

EDIT: ajout méthode supplémentaire de mon commentaire ci-dessous.

Pour votre exemple fourni colName RLIKE '[^r] [^o] [^o] [^t]~\w ' qui peut ne pas être la REGEX optimale, mais quelque chose à regarder au lieu de sous-requêtes

3
répondu QuinnG 2012-04-03 19:59:32

Essayez ceci:

Where Not (Col_Name like '%whatever%')

Fonctionne Également avec rlike:

Where Not (Col_Name rlike '.*whatever.*')
43
répondu HAL9000 2011-08-25 04:23:31

Pas comme ont été pris en charge dans la version HIVE 0.8.0, vérifiez à JIRA.

Https://issues.apache.org/jira/browse/HIVE-1740

8
répondu Sanjiv 2014-10-29 13:52:40

Dans SQL:

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

Dans La Ruche:

select * from table_name where not (column_name like '%something%');
3
répondu minhas23 2014-06-19 08:41:00

En Fait, vous pouvez le faire comme ceci:

select * from table_name where not column_name like 'root~%';
0
répondu zorro 2013-04-24 12:00:51

L'utilisation de regexp_extract fonctionne également:

select * from table_name where regexp_extract(my_column, ('myword'), 0) = ''
0
répondu Reid Minto 2015-07-08 15:00:27

Dans impala, vous pouvez utiliser != pour ne pas aimer:

columnname != value
0
répondu DrSD 2017-02-16 19:55:06