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スプレッドシートで開きます。

  1. ブラウザで Googleスプレッドシート を開き、新しいシートを作成します。
  2. メニューの 「ファイル」 > 「インポート」 をクリックします。
  3. 「アップロード」 タブを選択し、作成した output.tsv をドラッグ&ドロップします。
  4. インポート設定画面が表示されます。以下の設定を確認して「データをインポート」をクリックします。
    • 区切り文字の種類: 「タブ」 または 「自動検出」
    • テキストを数値、日付、数式に変換: チェックを入れる(推奨)

これで50万件のデータがきれいにセルに格納されます。

※データ量が多すぎる場合

50万件を超えるとブラウザの処理能力によってはインポート中にタブがクラッシュすることがあります。その場合は、SQLの LIMIT で件数を絞って分割出力するか、Google Driveに一度ファイルをアップロードしてから、そのファイルを右クリック > 「Googleスプレッドシートで開く」を選択する方法を試してください。

まとめ

GUIツールで大量データを取得しようとするとメモリ不足で落ちることが多いですが、CLI(コマンドライン) を使えばストリーム処理で安定してデータを取り出せます。

CursorやVS Codeのターミナルからサッとこのコマンドを叩けるようにしておくと、データ分析や調査作業が非常にスムーズになります。


この記事が気に入ったら『目黒で働く分析担当の作業メモ』ご支援をお願いします!

※OFUSEに飛びます


おすすめの記事