🦆

DuckDB Update & Blog reading #2:DuckDB UIでAWS CUR可視化

に公開

まえがき

ついにDuckDBのUI機能が実装されましたね...!🫠
これを使用して以前作成したAWSのCURを可視化してみたいと思います!

公式ブログリンク

https://duckdb.org/2025/03/12/duckdb-ui.html

DuckDB UI を使ってみる

コマンドとしては以下のようなシンプルなものですぐに起動します。
DuckDBのバージョンが古かったのでアップグレードしてます。(Macで使用)
ターミナルに

brew update
brew upgrade duckdb

の後

duckdb -ui

を入力すると...
以下のようにlocalhostでUIが立ち上がります🙌

ただ完全にローカルで立ち上がるかというとそうではないらしく...
UIを呼ぶのにオンラインにする必要があるみたいです。

UIができた🙌といってもじゃあこのUIで何ができるか...というところだと思うので見ていきます。

ノートブック部分

まずデータソースを追加するために+ボタンを押します。

すると以下のような画面が立ち上がります。
取り込みたいファイルがあるローカルのパスを入力する必要があるようなので入力し、AddDatabaseを押します。(kaggleのtitanicコンペのtestデータです。)

...とcsvファイルを読み込もうとしたので以下のようなエラーになります。

なので一旦読み込もうと思っていたcsvをdbファイルに変換します。(以下pythonコード)

import duckdb
con = duckdb.connect(database="./testoftitanic.db")
con.sql("CREATE TABLE titanic AS SELECT * FROM './testoftitanic.csv'")

再度このdbファイルを指定して読み込みます。(エイリアスとしてtitanicとしています。)
すると以下のように左のサイドバーにtitanicデータベースの接続が出てきます。

また列情報をクリックすると簡単な列ごとの統計情報まで出力されます!
一番上のPassengerIDをクリックするとこういったグラフが出てきて最大値・最小値他主要な統計情報やヒストグラムまで出てきます...👀とんでもないですね。

さて画面中央部分は某Python用のノートブックのような形式になっており、上から順にSQL処理を書くことができます。
嬉しいのが入力補完をしてくれるところで、FROM以降を入力しようとした時に存在するテーブル名を候補に出してくれます。

SELECT文を以下のように走らせると...

画面下部に表が、右部に統計情報が出てきます。
ちなみにもちろんDuckDBの元の機能のように、テーブルをcsvやparquetファイルに変換してローカルにダウンロードすることもできます。(以下のようなSQLを入力して実行するとすぐダウンロードされます。)

利用例

DuckDB UI でAWS S3 上のCURを可視化する。

以前DuckDB-wasm・Next.js・FastAPIを組み合わせてS3上のCURを可視化するようなことをやっていました。

https://zenn.dev/amana/articles/f49a49c3a7208c

CURレポートをS3上に作成し一度Snowflakeで外部テーブルを使用して使用するデータのみ抽出→別S3にロードするというようなことをやっていました。
なので今回はそのロードされたS3のデータをDuckDB UI で表示してみます。
DuckDB UI上でデータベースを作成する際、inmemoryで使用する選択をします。

あとはNotebookにS3のパスを書いてSELECTします。(AWS S3の権限に関してはIAMユーザーやアクセスキー・シークレットキーなど設定する必要があります。)
詳しくは以下ページ
https://duckdb.org/docs/stable/extensions/httpfs/s3api.html

すると画像のように一発で表の可視化できました。🤯(自分でやった時はNext.jsで表作ったんですが...)

このように表だけなら簡単にできます。
ただ前回はFastAPIで署名付きURLを発行してそのURLを使用して可視化というような安全策をとっていたのでそれをやる場合はpythonからduckdb uiを使用すればできるかもしれません。

まとめ

ローカルでUIを自作してDuckDBやDuckDB-wasm,Next.jsと組み合わせて、可視化する...ということを今までやってきたんですが、このままいくと公式がその辺りの需要を補完しそうですね。😶

ただ現状は完全なローカルでは使用できないことと、可視化方法は表形式だけなのでその辺りがどうなるか...というところだと思いました。(列選択して簡易でも良いのでBIが出来たら...すごいですね)
今後も期待したいと思います!

Discussion