J'ai besoin d'extraire la 5ème valeur du tableau de chaînes de données dans Hive,

arr = ("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")

Comment puis-je extraire "cdpp asd" ie 5ème valeur.

Nous pouvons utiliser SUBSTR et INSTR, mais y a-t-il un autre moyen d'y parvenir?

1
Bastian 20 nov. 2018 à 08:50

3 réponses

Meilleure réponse

Si votre tableau est dans une colonne de chaînes, vous pouvez supprimer les crochets et les guillemets en utilisant regexp_replace et diviser la chaîne résultante pour obtenir un tableau en utilisant split():

 select split(regexp_replace('("abc", "123-4567", "10", "ax",   "cdpp asd", "00", "q", "na", "avail", "n", "n",   "na")','^\\(|\\)$|"',''),', *')[4];
OK
cdpp asd
1
leftjoin 20 nov. 2018 à 12:01

1 、 Vous pouvez peut-être essayer d'écrire un UDF pour convertir cette chaîne en un tableau arr, puis vous pouvez utiliser arr [4] pour visiter la 5ème valeur;

2, ou vous pouvez utiliser la méthode suivante pour obtenir la 5ème valeur:

    select tf.* from (
        select regexp_replace('("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")','\\(|\\)|"','') as str
    ) t lateral view posexplode(split(str,', ')) tf as pos,val
    where tf.pos = 4;

Remarque: de cette façon, la chaîne de tableau n'a pas de crochets.

0
StrongYoung 20 nov. 2018 à 11:25
arr = ("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")

Select arr[4] from tablename;

Production:

cdpp asd
1
Nick 20 nov. 2018 à 08:07