DuckDBエディタ
ファイルベースのローカルDuckDBデータベースを、サーバなしで開いてクエリーします。
場所: ワークスペース › ツール › DuckDBエディタ
「DuckDBエディタ」は、ローカルの.duckdbファイルのための独立したツールです。SQLiteエディタと同じ構成(「構造」、「データ」、「SQLを実行」、「設定」)で、どのサーバにも接続せずに動作します。
「データファイルをクエリー…」から、ファイルのないメモリー内のデータベースを開くこともできます。ディスクに何も作らずにCSV、JSON、Parquetのファイルを扱えます。
CalíopeがDuckDBでしないこと。拡張機能はダウンロードしません。INSTALL、LOAD、UPDATE EXTENSIONSはエンジンに届く前に拒否され、使えるのはアプリに同梱されている4つだけです。同じ理由で、リモートアクセス用のシークレット(CREATE SECRET)はなく、リンクされていない拡張機能が必要なSQLiteやPostgresのファイルをATTACHすることもできません。エンジンの設定は開いた時点で固定されます。「設定」からのthreads/memory_limit以外のSETは効かず、その2つも生のSQLからは変えられません。使えるのは、データベース全体を移すことです:「データベース全体」と「別名で保存…」は保留中のトランザクションの外で実行されるので、固定された設定に妨げられません。
キーワード: DuckDB、ファイル、ローカル、データベース、分析
既存の.duckdbファイルを開くか、新しく作成します。
場所: ワークスペース › ツール › DuckDBエディタ
「開く…」で既存の.duckdbファイルを選ぶか、「新規データベース…」で空のファイルを作成します。最近使ったファイルは最初の画面に表示されます。ファイルを変更できないときは「読み出し専用」のバッジが表示されます。
ファイルがCalíope自身のフォルダの外にある場合、初めて開くときにそのフォルダへのアクセスを求められます。DuckDBは.duckdbの隣に.walファイルを書く必要があり、アプリのサンドボックスはユーザが選んだフォルダの中でしかそれを許さないためです。同じフォルダのファイルを次に開くときは、この許可が記憶されています。手元にDuckDBのファイルがない場合は、空の状態の画面で「サンプルデータベースをダウンロード」を選ぶと、公開サンプルがあるWebサイトのページが開きます。Calíopeで作った、50,000件の注文がある小さなショップです。アプリは何もダウンロードしません。ページを開くだけで、判断するのはあなたです。
Calíopeの外から開くこともできます。Macでは、Finderの「このアプリケーションで開く」›「Calíope」から、またはCalíopeがその種類のファイルのデフォルトのアプリならダブルクリックで開けます。iPadとiPhoneでは、「ファイル」アプリから共有してCalíopeを選びます。この方法で開いたParquetファイルも、メモリー内のデータベースとしてここに開きます(「データファイルをクエリー…」を参照)。目の前のセッションがこのツールを提供していない場合、ファイルは「オフラインで開く」で開きます。
キーワード: 開く、作成、新規、最近使った項目、ファイル、フォルダ、WAL
テーブル、ビュー、インデックスを確認し、作成します。
「構造」セクションには、各オブジェクトの列とDDLを含むスキーマツリーが表示されます。DuckDBにはトリガーがないため、ツリーにはテーブル、ビュー、インデックス、シーケンス、型、マクロ、テーブルマクロが表示されます。シーケンス、型、マクロは「SQLを実行」から作成し(CREATE SEQUENCE、CREATE TYPE、CREATE MACRO、CREATE MACRO … AS TABLE)、ここでは確認と削除ができます。ファイルに複数のスキーマがある場合、各グループの前にスキーマ名が付き、オブジェクトのコメント(COMMENT ON)はポインタを重ねると表示されます。「新規」でテーブル、インデックス、ビューを作成し、選んだテーブルには「列を追加」や「テーブル名を変更」、オブジェクトを削除するには「削除」を使います。
「データファイルをクエリー…」で作成したビューには別のアイコン(クリップ)が付き、ツールチップに元のファイルのパスが表示されます。
「データベースをアタッチ…」は、現在のデータベースの横に別のDuckDBデータベースを開きます。その内容はデータベース名を前に付けてツリーに表示され、database.schema.tableとしてクエリーします。アタッチしたデータベースは常に読み出し専用です(書き込むには隣に.walファイルを作る必要があり、サンドボックスがそれを許しません)。「デタッチ」で外します。SQLiteのファイルはここではアタッチできません。別のエンジンであり、そのためにSQLiteエディタがあります。
iPadとApple Vision Pro:詳細パネルにも元のファイルが表示されます。
キーワード: 構造、テーブル、インデックス、ビュー、作成、DDL、スキーマ
行を表示、フィルタ、並べ替え、編集します。
「データ」セクションは、テーブルの行をページ単位で表示します。件数と矢印はバーの右側にあります。1ページに収める行数は「設定」›「テキストエディタ」›「結果」›「ページあたりの行数」で設定します(iPadでは「設定」)。列の見出しをタップして並べ替え、「フィルタ」で列ごとに絞り込むか、検索フィールドに入力してすべての列をまとめて検索します。
セルを編集する
macOS:ダブルクリックします。iPad:1回タップします。Returnで確定、Escでキャンセルします。
行を追加・削除する
「行を追加」は、列ごとに1行のフォームを開きます。SQLiteと違い、DuckDBは主キー全体を自動では割り当てません。必須の列にはそれぞれ値が必要で、キーも例外ではありません。削除するには、行番号で行を選んで「行を削除」を使います。
どの操作も、「変更を保存」を押すまでファイルには触れません。編集した内容は保留中のトランザクションに残り、「変更を元に戻す」ですべて取り消せます。
キーワード: データ、行、編集、フィルタ、並べ替え、検索、セル、挿入、新しい行、削除
シンタックスハイライトと自動補完。行数の上限と「停止」ボタン付き。
「SQLを実行」セクションは、サーバのSQLエディタと同じテキストフィールドと結果グリッドを、開いているファイルに対して使います。接続は関係しません。
テキストにはシンタックスハイライトが付きます。「実行」を押すか⌘↩でスクリプト全体を実行します。描画されるのは、行を返した最後の文の結果です。大きなSELECTは全部は取得されません。「設定」›「テキストエディタ」›「結果」›「行数の上限」(SQLエディタと同じ上限)で切り詰められ、グリッドに全体のうち何件を取得したかが表示されます。
クエリーの実行中は、「停止」ボタンで本当に中断できます。エンジンは終わるのを待たず、途中で打ち切ります。
INSTALLとLOADは拒否されます。CalíopeはDuckDBの拡張機能をダウンロードしないので、拡張機能が必要なクエリーは実行されず、その理由がメッセージに書かれます。
ファイルに書き込んだ内容は、「データ」での編集と同じく保留のままです。「変更を保存」を押すまでファイルには触れません。
関数の説明
macOSでは関数の上にポインタを重ね、iPadでは関数の上にテキストカーソルを置くと、DuckDBの説明(構文、戻り値の型、パラメータ、例)が表示されます。詳しくは「SQL関数のコンテキストヘルプ」のトピックで説明しています。
Apple Vision Pro:iPadと同じで、関数のカードはヘッダの上、ウインドウの下に表示されます。
キーワード: 実行、SQL、ハイライト、自動補完、グリッド、結果、上限、行、停止、中断
変更は保存するまで保留のままです。
編集は、SQLiteエディタと同じく保留中のトランザクションにまとめられます。保存していない変更は琥珀色の点で示されます。「変更を保存」で確定し、「変更を元に戻す」で破棄します。保留中の変更がある状態でファイルを閉じたり、別のファイルを開いたり作成したりすると、先に保存するか破棄するかを尋ねられます。また、保留中の変更があるときに文が失敗すると(「停止」で止めた場合も)、DuckDBはトランザクション全体を取り消します。変更は失われ、Calíopeはそのことを知らせます。
DuckDBはまず.duckdbの隣の.walファイルに書き込みます。それを本体のファイルに反映する処理(CHECKPOINT)は非同期なので、保存して閉じたあと.walが消えるまで数秒かかることがあります。その付属ファイルがしばらく残っていても、データはすでに安全です。
キーワード: 保存、元に戻す、COMMIT、トランザクション、変更、WAL、CHECKPOINT
DuckDBにスレッド数とメモリーを割り当て、チェックポイントの実行やファイルの圧縮を行います。
「設定」セクションは、SQLiteエディタにおける「プラグマ」セクションにあたります。「編集可能」の「スレッド数」と「メモリーの上限(MB)」は「適用」で有効になります。ファイルを開いているあいだDuckDBの設定は固定され、SETでは変えられないため、Calíopeが値を保持してファイルを開き直します。これらの値はこのデバイスのものです(コア数もメモリーもデバイスごとに違います)。ほかの設定と一緒には同期されません。メモリー内のデータベースでは開き直すファイルがないので、適用されません。
「メンテナンス」では、「チェックポイント」(.walをファイルに反映します)、「チェックポイントを強制」、「VACUUM」、「分析」を実行でき、エンジンの応答がボタンの下に表示されます。設定と同じく、保存していない変更があるあいだはボタンが無効になります。先に保存するか元に戻してください。エンジンのそのほかの設定は、「読み出し専用」に現在の値とともに一覧表示されます。
キーワード: 設定、スレッド、メモリー、メモリーの上限、メンテナンス、CHECKPOINT、VACUUM、ANALYZE、WAL
CSVを読み込み、CSV、JSON、SQLに書き出します。
「読み込み/書き出し」から、CSVファイルをテキスト列の新しいテーブルに読み込んだり、テーブルをCSVやJSONに書き出したり、データベース全体をSQLダンプ(スキーマとデータ)として書き出したりできます。
これは「データファイルをクエリー…」とは違います。ここではCSVが新しいテーブルとして.duckdbファイルにコピーされます。あちらでは、ファイルは元の場所に残ったまま、ビューを通してクエリーされるだけです。
DuckDBでは、CSVはエンジン自身が読み込む(COPY … AUTO_DETECT)ので、各列はテキストではなくそれぞれの型で取り込まれます。また「データベース全体」は、データベース全体を選んだフォルダに書き出します(CSVまたはParquetで、隣にスキーマも書き出します)。別の書き出しが残したものを、開いているデータベースに読み込むこともできます。データベースがメモリー内にある場合は、「別名で保存…」でデータベース全体を.duckdbファイルに書き込み、以後はそのファイルで作業を続けます。
3つとも、保存していない変更がないことが条件です。エンジンは開いているトランザクションの中ではこれらを実行しません。
キーワード: 読み込み、書き出し、CSV、JSON、SQL、ダンプ
CSV、JSON、Parquetのファイルを、コピーせずにテーブルのようにクエリーします。
「データファイルをクエリー…」ボタンは、選んだファイルごとに、そのファイルの上にビューを作成します。拡張子に応じてread_csv_auto、read_json_auto、read_parquetを使います。ファイルは元の場所に残り、ビューをクエリーするたびにその場で読み込まれ、データがデータベースにコピーされることはありません。
ビューの名前は、拡張子を除いたファイル名から付けられます。2つのファイルが同じ名前になる場合、2つ目には_2、3つ目には_3というように付きます。「構造」では、これらのビューに別のアイコン(クリップ)が付き、ツールチップに元のファイルのパスが表示されます。
データベースが開いていない場合、このボタンはまずメモリー内のデータベースを開きます。ディスク上に.duckdbファイルはないので、閉じるときに作業を失わないためには「別名で保存…」を使います。データベース全体を.duckdbファイルに書き込み、エディタはそのファイルで作業を続けます。
Calíopeの外から開いたParquetファイル(Finderの「このアプリケーションで開く」›「Calíope」から、または「ファイル」アプリから共有したもの)もここに開きます。メモリー内のデータベースが開き、そのファイルの上のビューが作られて、「SQLを実行」にSELECT * FROM read_parquet(…) LIMIT 100;が実行せずに書かれた状態になります。
iPadとApple Vision Pro:詳細パネルにも元のファイルが表示されます。
キーワード: CSV、JSON、Parquet、クエリー、ビュー、ATTACH、メモリー内
「データ」の「概要」ボタンは、開いているテーブルに対してSUMMARIZEを書いて実行します。列ごとに1行で、型、範囲、異なる値の数、NULL、四分位数を表示します。
場所: ワークスペース › ツール › DuckDBエディタ
「データ」でテーブルを選んだ状態で「概要」ボタンを押すと、エディタにSUMMARIZE <schema>.<table>;が書かれ、「SQLを実行」に切り替わって実行されます。結果は列ごとに1行で、型、最小値、最大値、異なる値のおおよその数、NULLの割合、平均、四分位数が表示されます。
これはDuckDBの機能です。SQLiteエディタにはこのボタンは表示されません。
キーワード: SUMMARIZE、概要、統計、列、DuckDB