2017-09-04 6073 views
-1

我在配置單元表中有一個數組,我想提取每個數組的兩個最後一個元素,如下所示: [「a」,「b」,「c 「] - > [」 b」, 「C」]提取HIVE中數組的最後兩個元素

我試着像這樣的代碼:

SELECT 
*, 
array[size]  AS term_n, 
array[size - 1] AS term_n_1 
FROM 
(SELECT *, size(array) AS size FROM MyTable); 

但它沒有工作,有人有什麼想法嗎?

+0

「它沒」不工作「並不具有信息量。這可能是任何一種錯誤,或者可能是錯誤的結果。如果它是一個錯誤,那麼你應該分享錯誤消息。如果你得到錯誤的結果,然後分享。 –

回答

-1

我不知道,你所得到的錯誤,但它應該是類似

select 
yourarray[size(yourarray)], 
yourarray[size(yourarray)-1] 
from mytable 
0
  1. array是保留字,應該合格。
  2. 內部子查詢應該是別名。
  3. 數組索引從0開始,如果該數組的大小是5,那麼最後一個索引是4

演示

with MyTable as (select array('A','B','C','D','E') as `array`) 

SELECT * 
     ,`array`[size - 1] AS term_n 
     ,`array`[size - 2] AS term_n_1 

FROM (SELECT * 
       ,size(`array`) AS size 

     FROM MyTable 
     ) t 
; 

+-----------------------+--------+--------+----------+ 
|  t.array  | t.size | term_n | term_n_1 | 
+-----------------------+--------+--------+----------+ 
| ["A","B","C","D","E"] |  5 | E  | D  | 
+-----------------------+--------+--------+----------+