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;
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')
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
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'