2012-12-12 73 views
5

Trong bảng tổ ong của tôi, lĩnh vực session là một chuỗi định dạng như:Làm cách nào để truy cập phần tử cuối cùng trong một mảng?

ip-sessionID-userID hoặc area-sessionID-userID

Có 3 hoặc 4 lĩnh vực được phân cách bởi "-", nhưng userID luôn là người cuối cùng.

tôi muốn chọn ID người dùng, nhưng cách truy cập trường cuối cùng? Trong trăn, có một cái gì đó như: arr[-1]

nhưng trong hive, làm thế nào để đạt được điều này? SQL sau đây có vẻ không chính xác.

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

Cảm ơn!

Trả lời

1

Bởi vì biểu thức không liên tục cho các chỉ mục mảng không được hỗ trợ trong tổ ong.

Sẽ có một số cách khác để giải quyết vấn đề của bạn:

  1. sử dụng regexp_extract, chẳng hạn như:

    chọn regexp_extract (session, '(\ - [^ \ -] +)', 1) với tư cách là người dùng từ my_table;

  2. sử dụng tùy chỉnh hive chức năng: ví dụ và tài liệu có thể được tìm thấy trong hive document

+0

giải pháp regex này không làm việc trong trường hợp mảng chỉ có một phần tử. – mel

+0

thử 'regexp_extract (phiên, '([^ \ -] +) $', 1)'? – pensz

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

Mặc dù đây có thể là một chút đắt hơn các giải pháp regex;)

+0

Yêu câu trả lời này. Cảm ơn. –

Các vấn đề liên quan