CSVはカンマ区切りの値ファイルで、データを表形式で保存できます。これは長い間、データベース間でデータを転送するための推奨形式でした。最近では、XMLやJSONなどのインターネット主導のフォーマットも大きな注目を集めています。CSVファイルは、テーブルデータを非常に適切に表現し、Microsoft ExcelやGoogleスプレッドシートなど、ほぼ全てのスプレッドシートプログラムで使用できるため、データベースに適しています。今日のブログでは、MySQLでテーブルデータをCSVにエクスポートするいくつかの方法を見ていきます。
コマンドラインの使用
MySQLを含むほとんどのリレーショナルデータベースには、CSVとの間でエクスポートおよびインポートするためのコマンドが用意されています。
–secure-file-privオプションを使用してMySQLサーバーインスタンスを起動していることを確認してください。LOAD DATAやSELECT INTO FILEなどのステートメントを使用して、MySQLがデータをインポートおよびエクスポートするディレクトリを設定します。次のコマンドを使用して、現在の設定を確認できます:
SHOW VARIABLES LIKE "secure_file_priv"
あとは、データを選択し、出力ファイルの場所を指定するだけです。テーブル全体を出力するステートメントを次に示します。
TABLE tableName INTO OUTFILE 'path/outputFile.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES TERMINATED BY '\n';
SELECTクエリと同様に、データをフィルター処理することもできます。列と値の両方をフィルター処理する例を次に示します:
SELECT columnName, ... FROM tableName WHERE columnName = 'value' LIMIT 1000 INTO OUTFILE 'path/outputFile.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES TERMINATED BY '\n';
列ヘッダーを含めたいですか?これは、UNIONステートメントを使用して簡単に実行できます:
(SELECT 'columnHeading', ...) UNION (SELECT column, ... FROM tableName INTO OUTFILE 'path-to-file/outputFile.csv’' FIELDS ENCLOSED BY '"' TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n')
mysqldumpの使用
mysqldumpは、テーブル、データベース、およびサーバー全体をエクスポートするためにMySQLが提供するコマンドラインユーティリティです。さらに、バックアップとリカバリにも利用できます。コマンドプロンプト/ターミナルで次のコマンドを発行して、テーブルをエクスポートします:
mysqldump -u [username] -p -t -T/path/to/directory [database] [tableName] --fields-terminated-by=,
Navicatのエクスポートウィザードの使用
Navicat 16 for MySQLには、非常に強力なエクスポート(およびインポート)ウィザードが付属しており、.xlsx、.json、および.sqlを含む複数の形式でデータをエクスポートできます。エクスポートウィザードを開始するためには、該当するテーブルを選択し、右クリックして“エクスポートウィザード“を選択し、形式を選択します:
1 つのテーブル、データベース全体、またはその間の任意のものをエクスポートすることを選択できます:
全ての列に関心がない場合は、必要なフィールドを正確に選択することもできます:
Navicatは、ヘッダー、区切り文字、エラーハンドラなどを含む豊富なオプションをサポートしています:
結論
CSVは完全な形式ではなく、制限があります。例えば、この形式でデータ型や数式を保存することはできません。そうは言っても、CSVは依然として非常に重要なデータ転送形式です。全てのDBAが熟知している必要があるものです。