Superset上でSpreadsheetのデータをSQLで集計してみた

SuperSet内でSpreadSheetを取り扱えるとわかったものの、実際にサブセットとして取り扱うまでが一苦労だったため手続きを順にまとめてみました。
2021.03.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

調査系のタスクをAmazon Athenaでこなしていましたが、

  • サブクエリが使えない
  • 参考情報を繋げる目的でRDSを選びたくても直接は選択できない

という2点で、毎回SQL Editor上でCreate Tableを使って何重にもテーブルを作成していました。もうちょっと手っ取り早くやりたいなというところで「SuperSetを使えばいいのではないか」と提案があり、ローカルにて色々と触ってみました。

既にS3から情報を取得する方法なども上がっていて「大体やりたいことが簡単にできる」と理解。ついでにマクロ目的でSpreadsheet上での計算を行うことも多々あり、念の為SpreadsheetをSuperSetで取り扱ってみましたがそこそこハマる感じでした。一通りの手順をまとめてみました。

SuperSetのセットアップ

apache/supersetを利用します。

git clone https://github.com/apache/superset.git
cd superset
git checkout latest
touch ./docker/requirements-local.txt
echo "gsheetsdb" >> ./docker/requirements-local.txt
echo "gsheetsdb[sqlalchemy]" >> ./docker/requirements-local.txt
docker-compose up

ログインするため http://localhost:8088/ へアクセスします。

username
admin
password
admin

Spreadsheetを取り込む

今回はサンプルとして以下のシートを使ってみることにします。

SuperSet上で「Data > DataBase」を選択し、右側の「+ DATABASE」を選択します。

DATABASE NAMEには適当な名前を、SQLALCHEMY URIにはgsheets://と入れます。

「SQL Lab > SQL Editor」を選択し、クエリにSpreadsheetのURLを入れて「RUN」を実行します。

SELECT * FROM "https://docs.google.com/spreadsheets/d/1aK_5AtCw_DnlOMoIQjZHU2SUGboQ9VpX-7gDVRufBF0/edit#gid=1495731855"

一覧として取得できました。ただ、このデータをそのままデータソースとしては利用できません。postgres経由で取り扱うため、一度CSVとしてダウンロードしましょう。

EXPLORE / CSV / CLIPBOARDと並んでいるうちのCSVを選択します。

「Data > DataBases」からexamplesのEditを選択します。

EXTRAから「Allow Data Upload」にチェックをいれて「SAVE」を実行します。

「Data > Upload a CSV」を選択します。

TableNameに適当な名前をいれ、CSV FileにはダウンロードしたCSVを、Databaseがexamplesになっていることを確認して、一番下の「SAVE」を実行します。

「Data > DataSet」から作成したテーブルを選択します。

あとはお好みの条件で実行するだけです。

あとがき

データソース仕様の都合でやや回りくどい操作になりましたが、SQLベースで手軽に集計が掛けられるようになりました。Spreadsheet上での検索を手軽に行いたい時の選択肢としてお薦めです。

参考リンク