Hive0.13과 Presto로 배열의 순서 관계를 남기고 여러가지 처리하고 싶다.

4182 단어 TreasureData
쿼리의 작은 쓰기.

원래 테이블에는 쉼표로 구분 된 문자열이 저장됩니다.


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이 나오지만,
무시하고 실행할 수 있습니다.

좋은 웹페이지 즐겨찾기