2012-12-12 14 views
5

W moim stole ula, pole session jest ciągiem w formacie takim jak:Jak uzyskać dostęp do ostatniego elementu w tablicy?

ip-sessionID-userID lub area-sessionID-userID

tam 3 lub 4 pola oddzielone „-”, ale identyfikator użytkownika jest zawsze ostatni.

Chcę wybrać ID użytkownika, ale jak uzyskać dostęp do ostatniego pola? W pytonie jest coś takiego: arr[-1]

, ale w ulu, jak to osiągnąć? Poniższy kod SQL wydaje się niepoprawny.

select split(session,"\-")[-1] as user from my_table;

Dzięki!

Odpowiedz

1

Ponieważ niestałe wyrażenia dla indeksów tablic nie są obsługiwane w gałęzi.

Będą jakieś inne sposoby rozwiązania problemu:

  1. korzystanie regexp_extract, takie jak:

    wybierz regexp_extract (Session '(\ - [^ \ -] +)', 1) jako użytkownik z my_table;

  2. wykorzystanie niestandardowych ula funkcja: przykład i dokument można znaleźć w hive document

+0

To rozwiązanie regex nie Praca w tablicy case ma tylko jeden element. – mel

+0

spróbuj 'regexp_extract (session, '([^ \ -] +) $', 1)'? – pensz

11
reverse(split(reverse(session), '-')[0]) 

Chociaż może to być nieco droższe niż roztwór regex;)

+0

Uwielbiam tę odpowiedź. Dzięki. –

Powiązane problemy