注目の記事

SQLクエリを実行、クエリ結果を可視化できるウェブアプリ「SQLPad」を試してみた

2022.01.14

こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。

SQLクエリをローカル環境でウェブアプリとして実行できるものが無いか少し探していたのですが、「SQLPad」というアプリケーションを見つけたので実際に試してみたいと思います。

SQLPadとは

SQLクエリを実行、クエリ結果を可視化できるセルフホスティング型のウェブアプリケーションです。2022年1月現在では以下の15個のデータベースに対応しており、ODBCにも対応しているのでODBC接続を利用すれば、これ以外のデータベースにも接続可能なようです。

  • Postgres
  • MySQL
  • SQL Server
  • ClickHouse
  • Crate
  • Vertica
  • Trino
  • Presto
  • Pinot
  • Drill
  • SAP HANA
  • Snowflake
  • BigQuery
  • SQLite
  • TiDB

公式サイトでの解説は以下の通りです。

A web app for writing and running SQL queries and visualizing the results. Supports Postgres, MySQL, SQL Server, ClickHouse, Crate, Vertica, Trino, Presto, Pinot, Drill, SAP HANA, Snowflake, BigQuery, SQLite, TiDB and many others via ODBC.


Why not SQLPad?

It's not a dashboarding tool, and likely will never become one. If you're looking for open-source dashboarding check out Redash, Metabase or Superset.

イメージとしてはSQLクライアントソフトのウェブ版のような感じです。可視化(visualizing)の部分については所謂BIツールとは違って、単純にクエリ結果をグラフ化できるものですね。

動かしてみる

実行方法としては2つあり、1つは「Node.jsを利用して実行」する方法と、もう1つは「Dockerイメージとして実行」する方法があるそうです。

今回は「Node.jsを利用して実行」してみたいと思います。このケースの手順は下記のDEVELOPER-GUIDE.mdに記載されていますので、こちらに従って進めていきます。

前提条件

Nodeのバージョンはv12.0.0+が前提条件となっています。今回のわたしの環境ではv16.13.2を利用しています。

% node --version
v16.13.2

また、いくつかの依存関係のインストールが必要とされており、MacOSの場合はXcode Command Line Tools、Linuxの場合はapt-get install build-essential(各ディストーションでこれに準ずるもの)が必要となっています。

私の環境はMacOSでXcode Command Line Toolsがインストール済みなので、このまま進めます。

リポジトリのクローンとインストール

準備ができたらインストールを始めます。以下のようにGitのリポジトリをクローンしてスクリプトを実行するだけです。

% git clone https://github.com/sqlpad/sqlpad.git
% cd sqlpad
% ./scripts/build.sh

起動してみる

インストールが終わったら以下のように起動します。

% cd server
% node server.js --config ./config.dev.env

起動するとhttp://localhost:3010/sqlpadにアクセスするように表示されるのでアクセスしてみます。

起動できました!

設定を変えてみる

デフォルトでは認証付きとなっていますが、ちょっとローカルで動かす際にはそこまで不要なので、設定を変えて認証をスキップさせるようにしてみます。

ドキュメントのAuthenticationにあるように、以下の設定をconfig.dev.envに追記して起動し直してみます。また、ROLEはadminにしてみました。

server/config.dev.env

# Set to `true` to disable authentication altogether.
SQLPAD_AUTH_DISABLED = "true"
# Specifies the role associated with users when SQLPAD_AUTH_DISABLED is set to true.
# Acceptable values: `admin`, `editor`.
SQLPAD_AUTH_DISABLED_DEFAULT_ROLE = "admin"

ログインなしで表示できましたね。

クエリを実行してみる

すでにサンプルデータがいくつか入った状態なので、以下のようなクエリを実行してみました。

SELECT
  name,
  SUM(price)
FROM
  products
GROUP BY
  name
ORDER BY
  SUM(price)
;

また、併せて画面右上のアイコンから可視化設定も実施してみます。

良い感じに表示されました!

また、クエリ結果についてはこちらのダウンロードアイコンからcsvxlsxjsonの形式でダウンロード可能です。

実際にcsvでダウンロードするとこんな感じのcsvがダウンロードできます。

name,SUM(price)
Rustic Concrete Chips,2.99
Awesome Wooden Ball,8.98
Incredible Rubber ball,12.99
Rustic Metal Bacon,16.98
Refined Frozen Fish,22.99
Fantastic Rubber Tuna,26.97
Handmade Granite Monitor,99.99
Generic Wooden Keyboard,119.96
Unbranded Granite laptop,149.99

データベースの接続追加

ところで「このサンプルデータはどこにあるのかな?」と思ったのですが設定ファイルにあるとおり、SQLiteを利用しているようです。

server/config.dev.env

SQLPAD_CONNECTIONS__devdbdriverid123__driver = sqlite
SQLPAD_CONNECTIONS__devdbdriverid123__name = dev connection from config
SQLPAD_CONNECTIONS__devdbdriverid123__filename = "./test/fixtures/sales.sqlite"

デフォルトではこのサンプルデータベースへの接続となっていますが、試しにpostgresへの接続を追加してみたいと思います。

接続の追加は画面上の右上のプルダウンリストから「... New connection」を選択することで追加できます。

新規接続の設定として、まずは「Connection name」と「Driver」を選択します。今回はpostresql connectionという任意の名前とPostgresを選択しました。

あとは実際の接続情報をドキュメントを参考に指定して接続します。SSL接続やProxy設定などもできますが、今回はシンプルに接続するだけとします。

Amazon RDSで適当に作成したPostgreSQLデータベースを指定して、「Test」から接続テストをしてみます。

問題なさそうです。そのまま「Save」から保存します。

この状態で既にPostgreSQLに接続している状態ですので、試しにテーブルを作成してデータを挿入します。

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);
INSERT INTO products (product_no, name, price) VALUES
    (1, 'Cheese', 9.99),
    (2, 'Bread', 1.99),
    (3, 'Milk', 2.99);

クエリを実行したら、画面左上のリフレッシュアイコンからリフレッシュすると、作成したテーブルがツリーに表示されます。あとは適宜SELECT文を実行する感じですね。

その他

クエリの保存やフォーマットも可能です。

画面右上の「RUN」のプルダウンを開くとSaveFormatCloneが表示されます。それぞれ、クエリの保存、クエリのフォーマット、クエリの複製となっており、保存したクエリはメニューの「Queries」で表示される一覧から、後で選択することが可能となります。

またクエリのFormatですが、例えば先程利用したクエリであれば以下のようにフォーマットされます。こちらの機能も便利ですね。

CREATE TABLE products (
  product_no integer,
  name text,
  price numeric
);
INSERT INTO
  products (product_no, name, price)
VALUES
  (1, 'Cheese', 9.99),
  (2, 'Bread', 1.99),
  (3, 'Milk', 2.99);

まとめ

以上、SQLクエリを実行、クエリ結果を可視化できるウェブアプリ「SQLPad」を試してみました。

非常に直感的に利用できますし、クエリやクエリ結果の保存、クエリのフォーマットなど必要十分な機能が揃っていてとても良いアプリケーションだと感じました。

もちろん、SQLクライアントアプリケーションと比べると機能の豊富さなどには劣るかもしれませんが「軽く利用するだけ」のケースや「複数人でサーバにブラウザアクセスするだけで使いたい」という場合には、とても良いのではないでしょうか。

どなたかのお役に立てば幸いです。それでは!