6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【2023年版】Google ColabでSQLを使う【DuckDB, JupySQL】

Posted at

昨年こんな記事を書きましたが、もっといいやり方があったのでupdateします。

0. 使うもの

JupySQLとDuckDBを使う。

JupySQLは以前紹介したipython-sqlと似たようなライブラリだが、現在あまり更新されていないipython-sqlに対して、(i) バグを修正し、(ii) 機能を追加しているものである。基本的な使い方はipython-sqlと変わらない。

DuckDBはSQLiteのOLAP版という立ち位置らしい。お手軽に使え、分析用途に強いDBだと理解している1

ということで、実際に簡単に使う方法を見ていく。

1. 諸々準備

!pip install jupysql duckdb-engine

# データ(csvファイル)のダウンロード
!wget https://raw.githubusercontent.com/mwaskom/seaborn-data/master/penguins.csv

使用するライブラリをインストールし、データをダウンロードする。今回はpalmerpenguinsのデータを使う2

# エクステンションを読み込む
%load_ext sql

# DuckDBのインメモリのDBに接続する
%sql duckdb://

エクステンションを読み込むと、%sql を付けた行でSQLを実行できるようになる。まずDuckDBのインメモリのDBに接続する。

2. クエリの実行

%%sql
SELECT
  *
FROM
  penguins.csv
LIMIT 3;

%%sql コマンドを頭に付けたセルではSQLを実行できる。なお、DuckDBは直接csvに対してクエリを実行できる。

また、クエリの結果は _ に格納されており、 print(_) で下のような整形された表が出力される。

image.png

3. pandasへの変換

%%sql result << 
SELECT 
  *
FROM 
  penguins.csv
LIMIT 4;

%%sql variable_name << から始めると、結果を変数に格納できる。 それをpandas.DataFrameに変換するには、 .DataFrame() とするだけ。

result.DataFrame()
image.png

4. csvからテーブルを作成

%%sql
CREATE OR REPLACE TABLE penguins AS
SELECT * 
FROM 'penguins.csv';

ここのDuckDBだと簡単。

インメモリでなくファイルに残したいのであれば、以下を先に実行しておく(example.dbがファイル名)。

%sql duckdb:///example.db

最後に

コードはコチラに置いてるので、そのままcolab立ち上げて触ってみたい方はぜひどうぞ!

2023年はPolarsとDuckDBとPRQLが流行ると思ってます3。使い倒していきたいものです。DuckDB最高!

  1. 正直あまりDuckDBについてはちゃんと理解できてないのだが、日本語でも沢山の記事があるのでそれらを見て頂きたい。たとえばこちらなど → https://zenn.dev/notrogue/articles/1193d0ab8d8eda

  2. https://allisonhorst.github.io/palmerpenguins/ ペンギンかわいい。

  3. 既に流行ってるという説もあります。

6
9
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
6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?