![[新機能] 入力しながら即座にクエリ結果確認ができるInstant SQLをDuckDB Local UIから試してみた](https://images.ctfassets.net/ct0aopd36mqt/5gViLtMI9HM9PfaRlj2Wz2/f45862ae56c4ac624462c5252b15760c/eyecatch_duckdb_1200x630.png)
[新機能] 入力しながら即座にクエリ結果確認ができるInstant SQLをDuckDB Local UIから試してみた
はじめに
データ事業本部ビッグデータチームのkasamaです。
今回は入力しながら即座にクエリ結果を確認できるInstant SQLのPublic PreviewをDuckDB Local UIから試してみたいと思います。今までSQLでCTEを長々と書いてデバッグするには一つ一つ実行しながら確認するしかなかったのですが、選択箇所を即座に確認できるので、かなり良い機能だ思います。
前提
DuckDB Local UIはブラウザでDuckDBを操作できるサービスです。ターミナルから以下のコマンドで起動することができます。
duckdb -ui
今回のテスト用に以下のcsvを作成し、csvが存在するディレクトリでDuckDB Local UIを立ち上げて操作します。
department_id,department_name,location,manager_name
1,Sales,Tokyo,Masashi Sakuma
id,name,department,salary
1,Taro Tanaka,Sales,10
2,Hanako Sato,Development,15
3,Jiro Suzuki,Sales,30
4,Hajime Takenaka,Development,5
試してみた
それではそれぞれのSQLで試してみたいと思います。Cellの実行ボタンの下矢印をクリックしてInstant SQL
を選択することで試すことができます。
集計
SELECT department, AVG(salary) AS avg_salary
FROM 'employees.csv'
GROUP BY department
ORDER BY avg_salary ASC;
通常はSQLを実行しない限りは何も表示されません。
Instant SQLでSELECTにポイントを合わせるとpreview resultsが表示されます。
ORDER BYをDESCに変えてみたり
AVGをMAXに変えてみたりして実行しなくても結果が確認できます。
不等号
SELECT *
FROM employees.csv
WHERE salary <= 10;
不等号も選択するだけでpreviewされています。
不等号を切り替えても瞬時に表示されます。
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
WITH dev_employees AS (
SELECT * FROM employees.csv WHERE department = 'Development'
)
SELECT AVG(salary) AS avg_salary_dev
FROM dev_employees;
CTE一つで試してみました。
WITH句だけをポイントするとWITH句箇所の結果が表示されました。
下のSELECTすると全体の結果が表示されています。
LIKE
SELECT * FROM employees.csv
WHERE name LIKE '%Take%';
LIKEが一番凄いとなりました。瞬時に結果が反映されるので検索するように出力されます。
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でも問題なく表示されました。
最後に
今までは、Webアプリケーションの画面のように瞬時に結果が反映されることはなく、考えて実行して結果を時には長時間まったりしてデバッグが大変だったのですが、この機能のおかげでとても楽になりそうです。
もしかしたらデータ量によっては使い勝手が変わるかもしれませんので、ご参考までにしていただければと思います。