2017-09-04 3 views
-1

私はハイブテーブルに配列を持っていますが、各配列の最後の2つの要素を次のように抽出します: ["a"、 "b"、 "c "] - > [" B」、 "C"]HIVEの配列の最後の2つの要素を抽出する

私はこのようなコードを試してみました:

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

をしかし、それは動作しませんでした、誰かがどんな考えを持っていてください!

+0

「それがなかったのである場合t仕事は有益ではありません。それはどんな種類のエラーであっても間違った結果になる可能性があります。エラーの場合は、エラーメッセージを共有する必要があります。あなたが間違った結果を得た場合は、それを共有してください。 –

答えて

-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  | 
+-----------------------+--------+--------+----------+ 
関連する問題