CursorやVS CodeのDB拡張機能を使って、AWS Aurora上のデータをエクスポートしようとして失敗したことはありませんか?
数千件ならGUIツールで問題ありませんが、50万件といったデータを扱おうとすると、以下のような問題が頻発します。
- 「Save as CSV」を押してもファイルが生成されない(サイレントクラッシュ)
- エディタ自体がメモリ不足でフリーズする
- ネットワークタイムアウトが発生する
今回は、Macのターミナルと mysql コマンドを使って、ポートフォワーディング経由で安全かつ高速にデータをTSV(タブ区切り)ファイルとしてエクスポートし、Googleスプレッドシートで活用する手順をまとめます。
前提環境
- クライアント: Mac (Terminal / Cursorのターミナル)
- DB: AWS Aurora (MySQL互換)
- 接続方式: SSHポートフォワーディング(SQLToolsなどでトンネル確立済み)
- ローカルポート: 3357 (例)
なぜCSVではなくTSV(タブ区切り)なのか?
mysql コマンドの標準出力は「タブ区切り」です。無理にコマンドだけでCSV(カンマ区切り)に変換しようとすると、データの中にカンマ(住所やテキストなど)が含まれていた場合に列ズレを起こすリスクがあります。
GoogleスプレッドシートはTSVのインポートに完全対応しているので、「TSVで出力してスプレッドシートにインポート」 が最も事故が少なく安全です。
手順1. SQLファイルを用意する
長いSQLをコマンドに直接書くのは大変なので、別ファイルにします。
プロジェクトフォルダに query.sql という名前で保存します。
SELECT * FROM users WHERE created_at >= '2023-01-01' LIMIT 500000;
※ SQLの最後に必ずセミコロン ; を付けてください。
手順2. コマンドを実行してTSVを出力する
ターミナルを開き、以下のコマンドを実行します。
SSHトンネルを経由しているため、ホストは 127.0.0.1、ポートはローカルに転送しているポート番号(ここでは3357)を指定するのがポイントです。
基本のコマンド
mysql -h 127.0.0.1 -P 3357 -u <ユーザー名> -p <DB名> < query.sql > output.tsv
- -h 127.0.0.1: ポートフォワーディング先(自分自身)を指定
- -P 3357: 重要。 大文字のPでポートを指定(SSHトンネルの入口)
- < query.sql: SQLファイルを読み込む
- > output.tsv: 結果をファイルに書き出す
実行するとパスワードを求められます。入力後、何も表示されずにカーソルが止まりますが、バックグラウンドで転送が行われています。
【推奨】パスワード自動入力&進捗バー付きコマンド
データ量が多いと「本当に動いているのか?」と不安になります。また、何度も実行する場合に毎回パスワードを入れるのは手間です。
pv (Pipe Viewer) コマンドを使い、パスワードを環境変数で渡す以下のワンライナーが便利です。
brew install pv
MYSQL_PWD='パスワード' mysql -h 127.0.0.1 -P 3357 -u <ユーザー名> <DB名> < query.sql | pv > output.tsv
実行すると以下のようなバーが表示され、転送速度とデータ量がリアルタイムで確認できます。
15.4MiB 0:00:05 [3.05MiB/s] [ <=> ]
手順3. Googleスプレッドシートにインポートする
出力された output.tsv をGoogleスプレッドシートで開きます。
- ブラウザで Googleスプレッドシート を開き、新しいシートを作成します。
- メニューの 「ファイル」 > 「インポート」 をクリックします。
- 「アップロード」 タブを選択し、作成した output.tsv をドラッグ&ドロップします。
- インポート設定画面が表示されます。以下の設定を確認して「データをインポート」をクリックします。
- 区切り文字の種類: 「タブ」 または 「自動検出」
- テキストを数値、日付、数式に変換: チェックを入れる(推奨)
これで50万件のデータがきれいにセルに格納されます。
※データ量が多すぎる場合
50万件を超えるとブラウザの処理能力によってはインポート中にタブがクラッシュすることがあります。その場合は、SQLの LIMIT で件数を絞って分割出力するか、Google Driveに一度ファイルをアップロードしてから、そのファイルを右クリック > 「Googleスプレッドシートで開く」を選択する方法を試してください。
まとめ
GUIツールで大量データを取得しようとするとメモリ不足で落ちることが多いですが、CLI(コマンドライン) を使えばストリーム処理で安定してデータを取り出せます。
CursorやVS Codeのターミナルからサッとこのコマンドを叩けるようにしておくと、データ分析や調査作業が非常にスムーズになります。


