LoginSignup
36
24

More than 5 years have passed since last update.

Prestoで配列を行に変換する

Last updated at Posted at 2017-04-18

配列 -> レコード

配列が入っているカラムをそれぞれ別レコードに変換したい

例えば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)

実行結果

スクリーンショット 2017-04-18 22.46.01.png

配列の順番も合わせて別々のレコードに変換したい

WITH ORDINALITY句をつけて、配列の順番を格納するカラムをUNNEST後のカラム構造の末尾に追加すればよい。

クエリ例

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

実行結果

スクリーンショット 2017-04-18 22.44.50.png

文字列の配列が入っているカラムをそのまま連結した1つの文字列にしたい

`ARRAY_JOIN' を使えば一発なことに気づいた

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

以下は不要

REDUCE関数を使って、CONCATをapplyする。

SELECT
 REDUCE(ARRAY['Hello', ' ', 'World', '!'],
        '',
        (s, x) -> CONCAT(s, x),
        s -> s)

参考

Presto Documentation
https://prestodb.io/docs/current/sql/select.html

36
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
24