Help us understand the problem. What is going on with this article?

Hive0.13とPrestoで配列の順序関係を残して色々処理したい。

More than 5 years have passed since last update.

クエリのちょっとした書き方。

元のテーブルには、カンマで区切られた文字列が格納している。

num ans
1,4 2,5

この各カラムには対応関係があり、
1 - 2
4 - 5
この対応関係を残して処理したい

つまり、下のようなテーブルが完成できればよい。

num ans
1 2
4 5

Hive 0.10だと難しいが、
Hive 0.13からposexplode関数がある。
これはpositionを保持したまま、配列を展開できる。

SELECT t1.col as num, t2.col as ans
FROM (
SELECT  seq, col  FROM table
LATERAL VIEW posexplode(split('1,4', ',')) rec as seq, col
) t1
JOIN (
SELECT  seq, col  FROM table
LATERAL VIEW posexplode(split('2,5', ',')) rec as seq, col
) t2
ON t1.seq = t2.seq

Prestoではregexp_extract_all関数とUNNESTを使う。

SELECT
 n as num, a as ans
FROM (
  -- record 生成用
  SELECT n1, n2
  FROM (
    VALUES
      ('1,4', '2,5')
  ) AS x (n1, n2)
) t1
CROSS JOIN UNNEST(regexp_extract_all(n1, '[^,]+'), regexp_extract_all(n2, '[^,]+')) AS t (n, a)

ちなみにTreasureDataのPrestoの自動構文チェックではUNNESTを使うとWarningがでるが、
無視して実行してよい。
presto.png

toru-takahashi
Technical Support Engineer from Treasure Data, Inc.
treasuredata
Customer Data Platformの開発・提供をしています。
https://www.treasuredata.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away