Treasure Dataでテーブルの横縦変換をやってみた。

未分類

こんにちは、今回はTreasure Dataでマスター形式で保持している列のデータをトランザクション形式に変換する処理について書いていきたいと思います。

具体的なイメージは以下のA表からB表への変換です。

id性別年代都道府県
001男性20代東京
002女性10代大阪
A表
id属性名
001性別男性
001年代20代
001都道府県東京
002性別女性
002年代10代
002都道府県大阪
B表

A表と同じ内容のテーブルを用意しました。

UNNESTを使った結合処理

prestoのUNNESTを使えば以下の画像のように、各列の値を行に展開することができるようになります。

UNNESTの中にある配列を、項目名として登録しておき、その後に実際の値を配列として登録しておきます。

実際の配列の中身を見てみましょう。

もともとのA表の行ごとに、属性項目と値を配列形式に変換して保持しているのがわかると思います。
これをCross Joinすることで、行に展開することができるのです。

参考SQL

以下に今回実際に利用したSQLを記述しておきます。

SELECT a.id, t.attr, t.value
FROM a_table a
CROSS JOIN unnest (
  array['性別', '年代', '都道府県'],
  array[sex, age, todofuken]
) t (attr, value)

-- SELECT array['性別', '年代', '都道府県'], array[sex, age, todofuken] FROM a_table

最後に

逆に縦(行)に展開されているデータを横(列)に変換する処理については「Treasure Dataでテーブルの縦横変換をやってみた。」でご紹介しているので、興味があれば御覧ください。

データ分析を行うために、元あるデータを様々な形に変換する必要があると思うので、少しでも参考になれば幸いです。

最後までご覧いただきありがとうございました!

コメント