Est-il une Ruche à l'équivalent de SQL n'est pas comme
Alors que la Ruche soutient positif des requêtes de type: ex.
select * from nom_table where column_name comme la racine de l'~%';
Ruche Ne pas soutien négatives telles que les requêtes: ex.
select * from nom_table where column_name pas comme la racine de l'~%';
Que quelqu'un connait une solution équivalente, que la Ruche ne soutien?
Vous devez vous connecter pour publier un commentaire.
Découvrez https://cwiki.apache.org/confluence/display/Hive/LanguageManual si vous n'avez pas. Je renvoi tout le temps quand je suis à l'écriture de requêtes pour la ruche.
Je n'ai rien fait, là où je suis d'essayer de faire correspondre une partie d'un mot, mais vous pouvez consulter
RLIKE
(dans cette section https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#Relational_Operators)C'est probablement un peu d'un hack de travail, mais vous pourriez faire une sous-requête dans laquelle vous vérifier si elle correspond à la valeur positive et de faire un
CASE
(http://wiki.apache.org/hadoop/Hive/LanguageManual/UDF#Conditional_Functions) pour avoir une valeur connue de la requête principale à vérifier pour voir si elle correspond ou pas.Une autre option est d'écrire une fonction qui effectue la vérification.
Je suis juste de remue-méninges tout en restant assis à la maison avec aucun accès à la Ruche, donc j'ai peut-être raté quelque chose d'évident. 🙂
Espère que ça aide d'une manière ou d'une autre. \^_^/
EDIT: Ajout dans la méthode de mon commentaire ci-dessous.
Pour votre exemple fourni par colName RLIKE '[^r][^s][^s][^t]~\w' Qui ne peuvent pas être la meilleure REGEX, mais quelque chose à regarder au lieu de sous-requêtes
CASE
est dans leSELECT
clause.SELECT CASE WHEN ... THEN ... END AS colName FROM...
RLIKE
pour quelque chose à mon travail, et bien qu'il ne va pas être optimale pour toutes les situations, vous pouvez utiliser les regex 'pas'^
. Pour votre exemple fourni parcolName RLIKE '[^r][^o][^o][^t]~\\w'
Qui ne peuvent pas être la meilleure REGEX, mais quelque chose à regarder au lieu de sous-requêtes(?!root)
mais notez que si vous faites cela, dans bash, vous aurez besoin pour échapper à la!
comme\!
si bash ne pense pas que c'est un événement. donchive -e "SELECT * FROM table_name WHERE colName RLIKE '^(?\!root~).*$'"
devrait fonctionner exactement comme ce n'est pas comme dans d'autres DBsEssayez ceci:
travaille également avec rlike:
AIME PAS avoir été pris en charge dans la RUCHE de la version 0.8.0, vérifier le JIRA.
https://issues.apache.org/jira/browse/HIVE-1740
En SQL:
Dans La Ruche:
À l'aide de regexp_extract fonctionne ainsi:
En fait, vous pouvez le faire comme ceci:
Dans l'impala, vous pouvez utiliser
!=
pour aime pas: les