Presto로 배열을 행으로 변환

2822 단어 TreasureDataPresto

배열 -> 레코드



배열이 들어있는 열을 각각 다른 레코드로 변환하고 싶습니다.



예를 들어, tbl 테이블의 time_ranges 컬럼에 다음과 같은 배열이 들어 있다고 한다.
["16:00~16:30","16:30~17:00","17:00~17:30","17:30~18:00","18:00~18:30","18:30~19:00","19:00~19:30","19:30~20:00","20:00~20:30","20:30~21:00","21:00~21:30"]

쿼리 예


SELECT 
  time_range
FROM
  tbl CROSS
JOIN
  UNNEST(time_ranges) AS t(time_range)

실행 결과





배열 순서도 함께 별도의 레코드로 변환하고 싶습니다.


WITH ORDINALITY 절을 붙여 배열의 순서를 포함하는 컬럼을 UNNEST 후의 컬럼 구조의 말미에 추가하면 된다.

쿼리 예


SELECT 
  time_id,
  time_range
FROM
  tbl CROSS
JOIN
  UNNEST(time_ranges) WITH ORDINALITY AS t(
    time_range,
    time_id
  )

실행 결과





문자열의 배열이 들어있는 열을 그대로 연결 한 문자열로 만들고 싶습니다.



'ARRAY_JOIN'
SELECT
  ARRAY_JOIN(ARRAY['Hello', ' ', 'World', '!'], '')

다음은 불필요
REDUCE 함수를 사용하여 CONCAT 를 적용합니다.
SELECT
 REDUCE(ARRAY['Hello', ' ', 'World', '!'],
        '',
        (s, x) -> CONCAT(s, x),
        s -> s)

참고



Presto Documentation
htps : // p s와 db. 이오/도 cs/쿤 t/sql/세ぇct. HTML

좋은 웹페이지 즐겨찾기