ただ枯れゆく大樹が如く

技術の話やら愚痴やら節操もなく徒然と

redshiftでunnestを実装する

Redshiftは以下のページに記載されている通りunnestはサポートされていない。

docs.aws.amazon.com

しかしながら昨今のRDBMS以外も多用される状況ではネストされたデータも多く、UNNESTは結構欲しい機能である。

なのでちょっち面倒だけど実装してみた。 ETLではなくELTを選択するなら意外と必要になるし。

  • 前提

    • generate_seriesも使えないので、あらかじめ連番を入れたseqテーブルを作成
  • UNNESTを模倣したSQL

SELECT
    json_extract_array_element_text(m.array_hoge, seq.i) AS hoge
FROM
(
    SELECT '["hoge1","hoge2","hoge3"]' AS array_hoge
) AS m
INNER JOIN seq ON i < JSON_ARRAY_LENGTH(m.array_hoge)
ORDER BY hoge;