複数行INSERT INTO VALUES構文を解析する
複数行VALUES構文 — INSERT INTO table VALUES (...), (...), (...) — を使用するSQL INSERT文を適切にフォーマットされたCSV行に変換します。
Multi-Row INSERT
詳細な説明
複数行VALUES — コンパクトなINSERTフォーマット
現代のSQLデータベースは、カンマ区切りの値タプルを使用して単一のINSERT文で複数行を挿入することをサポートしています。これは個別のINSERT文よりも効率的で、pg_dumpやmysqldumpなどのツールのデフォルト出力フォーマットです。
SQLの例
INSERT INTO inventory (sku, product_name, quantity, unit_price, warehouse) VALUES
('SKU-001', 'Widget A', 500, 4.99, 'West'),
('SKU-002', 'Widget B', 1200, 3.49, 'East'),
('SKU-003', 'Gadget C', 75, 29.99, 'West'),
('SKU-004', 'Gadget D', 200, 19.99, 'East'),
('SKU-005', 'Component E', 3000, 0.99, 'Central');
生成されるCSV
sku,product_name,quantity,unit_price,warehouse
SKU-001,Widget A,500,4.99,West
SKU-002,Widget B,1200,3.49,East
SKU-003,Gadget C,75,29.99,West
SKU-004,Gadget D,200,19.99,East
SKU-005,Component E,3000,0.99,Central
解析の詳細
パーサーは複数行インサートを以下のように処理します:
VALUESキーワードを検出- 残りを最上位の括弧レベルで個別の
(...)タプルに分割 - 各タプル内で、クォートされた文字列を尊重しながらカンマで分割
- 式内のネストされた括弧を処理(ほとんどのINSERT値は単純なリテラル)
これにより、単一の文に何百もの値タプルがあっても、個別のCSV行に正しく分割されます。行数は出力パネルの上の情報バーに表示されます。
ユースケース
pg_dumpやmysqldumpの拡張インサート構文を使用する出力ファイルからデータを抽出し、pandasやRなどのデータ分析ツール用のCSVに変換する。