2012-12-12 37 views
5

मेरी छत्ता तालिका में, session क्षेत्र की तरह प्रारूप में एक स्ट्रिंग है:किसी सरणी में अंतिम तत्व का उपयोग कैसे करें?

ip-sessionID-userID या area-sessionID-userID

वहाँ 3 या 4 "-" द्वारा अलग क्षेत्रों है, लेकिन userID हमेशा पिछले एक है।

मैं उपयोगकर्ता आईडी का चयन करना चाहता हूं, लेकिन अंतिम फ़ील्ड तक कैसे पहुंचना है? पायथन में, कुछ ऐसा है: arr[-1]

लेकिन हाइव में, इसे कैसे प्राप्त किया जाए? निम्नलिखित एसक्यूएल सही नहीं लगता है।

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

धन्यवाद!

उत्तर

1

क्योंकि सरणी अनुक्रमणिका के लिए गैर-स्थिर अभिव्यक्तियां हाइव में समर्थित नहीं हैं। जैसे

  1. उपयोग regexp_extract,:

    वहाँ अपनी समस्या को हल करने के लिए कुछ अन्य तरीकों से किया जाएगा

    चयन regexp_extract (सत्र, '- [^ \ -] (\ +)', 1) my_table से उपयोगकर्ता के रूप में;

  2. उपयोग कस्टम छत्ता समारोह: उदाहरण और दस्तावेज़ hive document

+0

इस regex समाधान नहीं किया केस सरणी में काम केवल एक तत्व है। – mel

+0

'regexp_extract (सत्र,' ([^ \ -] +) $ ', 1)' कोशिश करें? – pensz

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

में पाया जा सकता हालांकि इस regex समाधान की तुलना में थोड़ा अधिक महंगा हो सकता है;)

+0

इस उत्तर को प्यार करो। धन्यवाद। –