Accessの限界
セキュリティに厳しい、あるいはクラウドが未導入という企業にはよくある話だとは思いますが、インターネットやクラウド上にデータを一切持ち出さず、PCのローカルでDBを構築したい場合、OfficeのAccessが最初の選択肢になると思います。しかし、Accessには以下の限界があります。
- 1ファイルの容量が2GBまで
- 膨大なデータには対応できない
- SQLが使えるが、あまりに複雑だとエラーになる(「クエリが複雑すぎます」エラーに直面する)
そこで、代替の選択肢を検討して、DuckDBとDBeaverでDBMS構築したので、その話をご紹介します。
要件と選定理由
どこの企業でもよくある要件として以下のようなものがあると思います。
- 無料
- ローカルPC上で動く。できればインストール不要で動かしたい
- データはインターネットやクラウド上へのアップロード不可
- SQLが使える
- GUIがある(コマンドライン(CLI)だけは避けたい)
- 手元のCSVを読み込める
- 分析結果をCSVやExcelで出力できる
上記を全て満たすものとして、DBMSエンジンではSQLiteやDuckDBが残りましたが、今回はトランザクションDBというより分析DBとして使いたいのが要件だったため、DuckDBを採用しました。(少し難しい言葉で言うとSQLiteは行指向(OLTP型)、DuckDBは列指向(OLAP型)です。)
また、GUIやインポート・エクスポートツールとしてDBeaverを使うことにしました。どちらもスタンドアロンとしてインストール不要版もあるので、ソフトのインストールすら不可という企業でも対応しやすいです。
入手方法
入手はDBeaverを公式サイトからダウンロードするだけです。

日本語化するには「Window」→「Preference」→「User Interface」で日本語が選べます。

その後、メニューから「データベース」→「新しい接続」で接続するDBを選びます。DuckDBのほか、SQL Server、PostgreSQLなどメジャーなDBMSは全て対応しています。


DuckDBを選んだら、「パス」→「Create」→「保存先指定」で適当な名前(例えばtest.duckdb)で保存します。ドライバは内蔵されていないので「ドライバのプロパティ」タブでダウンロードする必要がありました。念のため、左下の「テスト接続」でエラーが出ないことを確認の上、「終了」を押せばOKです。


データのインポート
うまく構築できたら、適当なテーブルを作成してみましょう。もちろんSQLでCREATE TABLE test…と手打ちもできますが、実務的には手元のデータを読み込む場合がほとんどだと思うので、ここでは以下のようなCSVを読み込んでみます。

左ペインをどんどん下っていって、「テーブル」で右クリックするとメニューの中に「データのインポート」があるので、クリックするとインポートウィザードが出てきます。あとはインプットファイルを指定して読み込むだけです。ヘッダーの有無やエスケープ文字などの多少の設定もできます。



ただ、カラム名に全角記号が入る場合は変にエスケープ記号(ダブルクォーテーション(“))が入る仕様なようなので、うまくいかない場合は以下のようなSQLによりインポートもできます。
CREATE TABLE test AS
SELECT * FROM read_csv('C:/Users/Desktop/test.csv', header=true);
テーブルの閲覧
うまく取り込めたら、「テーブル」で右クリックして「更新」をクリックすると、インポートしたテーブルが現れます。ダブルクリックすると、データやカラム情報を見ることもできます。

SQL操作
SQLでいろいろ閲覧、操作したいときはメニューの「SQLエディタ」→「SQLエディタ(F3)」でSQLエディタを起動できます。入力後、Ctrl+Enterか左にある三角ボタンを押すと実行できます。
試しに以下の超簡単なSQL操作をやってみた結果が画像のとおりです。当たり前ですが、下パネルにテーブルの全データが表示されます。
SELECT * FROM test


データのエクスポート
この結果をエクスポートもできます。下にある「結果セットのエクスポート」をクリックすると、エクスポートウィザードが現れます。CSV形式が選択できます。


Excel出力をしたい場合は、初期インストール状態だとExcel出力ができないので、「ヘルプ」→「Install New Software」から「DBeaver Office integration」を入れる必要があります。

まとめ
いかがでしたか。DuckDBは裏側の黒子なので、どちらかというとDBeaverの使い方紹介みたいになってしまいましたが、ローカルでDBMSは全ての構築やSQL操作が一通り行えます。今回はテストのため、少件数でしたが、大規模な件数にも対応しています。いろいろ操作してみて気付いたことは今後もご紹介していきたいと思います。


コメント