web-dev-qa-db-fra.com

hive check séparé par des virgules La chaîne contient une chaîne

J'ai une colonne dans la table Hive list_ids qui est une liste d'identifiants stockés sous forme de chaîne séparée par des virgules.

comment puis-je écrire une requête pour cette colonne pour vérifier si elle stocke un identifiant particulier 

Exemple:

 list_ids = "abc,cde,efg"

Je veux quelque chose comme 

 select * from table_name where list_ids contains cde; 
15
user2978621

Utiliser les fonctions standard Hive split et array_contains

split(string str, string pat) renvoie array<string> en séparant str autour de pat (expression régulière)

array_contains(array<T>, value) renvoie true si le tableau contient une valeur

select * from table_name where array_contains(split(list_ids,','),'cde')

24
libjack

Hive prend en charge l'opérateur LIKE. Vous pouvez le faire facilement en utilisant:

select * from table_name where list_ids like '%cde%';

Consultez ce manuel de langue pour plus d'informations:

https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+UDF

14
Neels

Utilisez la fonction Hive exploser vous pouvez y parvenir.

Exemple

sélectionnez * 
de nom_table
LATERAL VIEW explose (list_ids) exploded_table as list_id_tbl
où list_ids = 'cde' 

0
MukeshKoshyM