[新機能] 入力しながら即座にクエリ結果確認ができるInstant SQLをDuckDB Local UIから試してみた

[新機能] 入力しながら即座にクエリ結果確認ができるInstant SQLをDuckDB Local UIから試してみた

Clock Icon2025.05.10

はじめに

データ事業本部ビッグデータチームのkasamaです。
今回は入力しながら即座にクエリ結果を確認できるInstant SQLのPublic PreviewをDuckDB Local UIから試してみたいと思います。今までSQLでCTEを長々と書いてデバッグするには一つ一つ実行しながら確認するしかなかったのですが、選択箇所を即座に確認できるので、かなり良い機能だ思います。

https://www.youtube.com/watch?v=aFDUlyeMBc8&t=29s
https://motherduck.com/blog/introducing-instant-sql/

前提

DuckDB Local UIはブラウザでDuckDBを操作できるサービスです。ターミナルから以下のコマンドで起動することができます。

duckdb -ui

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

今回のテスト用に以下のcsvを作成し、csvが存在するディレクトリでDuckDB Local UIを立ち上げて操作します。

departments.csv
department_id,department_name,location,manager_name
1,Sales,Tokyo,Masashi Sakuma
employees.csv
id,name,department,salary
1,Taro Tanaka,Sales,10
2,Hanako Sato,Development,15
3,Jiro Suzuki,Sales,30
4,Hajime Takenaka,Development,5

Screenshot 2025-05-10 at 9.49.57
Screenshot 2025-05-10 at 9.52.50

試してみた

それではそれぞれのSQLで試してみたいと思います。Cellの実行ボタンの下矢印をクリックしてInstant SQLを選択することで試すことができます。
Screenshot 2025-05-10 at 11.09.16

集計

SELECT department, AVG(salary) AS avg_salary
FROM 'employees.csv'
GROUP BY department
ORDER BY avg_salary ASC;

通常はSQLを実行しない限りは何も表示されません。
Screenshot 2025-05-10 at 11.12.35
Instant SQLでSELECTにポイントを合わせるとpreview resultsが表示されます。
Screenshot 2025-05-10 at 11.12.55
ORDER BYをDESCに変えてみたり
Screenshot 2025-05-10 at 11.13.14
AVGをMAXに変えてみたりして実行しなくても結果が確認できます。
Screenshot 2025-05-10 at 11.13.40

不等号

SELECT *
FROM employees.csv
WHERE salary <= 10;

不等号も選択するだけでpreviewされています。
Screenshot 2025-05-10 at 11.20.32
不等号を切り替えても瞬時に表示されます。
Screenshot 2025-05-10 at 11.20.23

CTE

冗長なSQLですが、UNION含めてできるか試してみます。

WITH dev_employees AS (
  SELECT * FROM employees.csv WHERE department = 'Development'
),
sales_employees AS (
  SELECT * FROM employees.csv WHERE department = 'Sales'
)
SELECT * FROM dev_employees
UNION ALL
SELECT * FROM sales_employees;

エラーになりました。まだ集合演算はサポートされていないようです。

Instant SQL does not yet support set operations

Screenshot 2025-05-10 at 11.29.06

WITH dev_employees AS (
SELECT * FROM employees.csv WHERE department = 'Development'
)
SELECT AVG(salary) AS avg_salary_dev
FROM dev_employees;

CTE一つで試してみました。
WITH句だけをポイントするとWITH句箇所の結果が表示されました。

Screenshot 2025-05-10 at 11.30.10
下のSELECTすると全体の結果が表示されています。
Screenshot 2025-05-10 at 11.30.22

LIKE

SELECT * FROM employees.csv
WHERE name LIKE '%Take%';

LIKEが一番凄いとなりました。瞬時に結果が反映されるので検索するように出力されます。
Screenshot 2025-05-10 at 11.44.11
Screenshot 2025-05-10 at 11.43.19
Screenshot 2025-05-10 at 11.43.40

JOIN

SELECT e.id, e.name, e.department, d.location
FROM 'employees.csv' as e
JOIN 'departments.csv' as d
  ON e.department = d.department_name;

JOINでも問題なく表示されました。
Screenshot 2025-05-10 at 11.47.47

最後に

今までは、Webアプリケーションの画面のように瞬時に結果が反映されることはなく、考えて実行して結果を時には長時間まったりしてデバッグが大変だったのですが、この機能のおかげでとても楽になりそうです。
もしかしたらデータ量によっては使い勝手が変わるかもしれませんので、ご参考までにしていただければと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.