2012-12-12 9 views
5

In meiner hive Tabelle ist das session Feld eine Zeichenfolge im Format wie:Wie kann auf das letzte Element in einem Array zugegriffen werden?

ip-sessionID-userID oder area-sessionID-userID

Da ist 3 oder 4 Felder von "-" getrennt, aber userID ist immer die letzte.

Ich möchte Benutzer-ID auswählen, aber wie auf das letzte Feld zugreifen? In Python gibt es etwas wie: arr[-1]

aber im Bienenstock, wie man das erreicht? Die folgende SQL scheint nicht korrekt zu sein.

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

Dank!

Antwort

1

Da nicht konstante Ausdrücke für Array-Indizes in der Struktur nicht unterstützt werden.

Es wird einige andere Möglichkeiten, Ihr Problem zu lösen:

  1. Verwendung regexp_extract, wie zum Beispiel:

    wählen regexp_extract (session '(\ - [^ \ -] +)', 1) als Benutzer von my_table;

  2. Verwendung benutzerdefinierte hive-Funktion: Beispiel und Dokument könnte in hive document

+0

Diese Regex Lösung nicht Arbeit im Falle Array nur ein Element. – mel

+0

versuchen 'regexp_extract (Sitzung, '([^ \ -] +) $', 1)'? – pensz

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

gefunden werden, obwohl dies vielleicht ein bisschen teurer als die regex Lösung sein;)

+0

Liebe diese Antwort. Vielen Dank. –

Verwandte Themen