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?
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
Essayez ceci:
Where Not (Col_Name like '%whatever%')
Fonctionne Également avec rlike:
Where Not (Col_Name rlike '.*whatever.*')
Pas comme ont été pris en charge dans la version HIVE 0.8.0, vérifiez à JIRA.
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%');
En Fait, vous pouvez le faire comme ceci:
select * from table_name where not column_name like 'root~%';
L'utilisation de regexp_extract fonctionne également:
select * from table_name where regexp_extract(my_column, ('myword'), 0) = ''
Dans impala, vous pouvez utiliser !=
pour ne pas aimer:
columnname != value