viewの結果データをCSV出力
viewの結果データをCSVファイルへ出力するコマンドを解説する。
コマンド
コマンドは下記のとおりである。なお、見ての通り、これはmysqldumpコマンドではなく、select文である。MySQLにログインした上で実行する。
SELECT * FROM (ビュー名) INTO OUTFILE "(ファイル名フルパス、円マークはエスケープ)" FIELDS TERMINATED BY ',';
具体例
少し具体的に書こう。View名などが下記であったとする。
項目 | 値 |
---|---|
View名 | v_t_jigyosyo_with_kana |
(出力先ファイルパス) | c:\temp\v_t_jigyosyo_with_kana.csv |
この情報を反映すると、下記のように書くことになる。
SELECT * FROM v_t_jigyosyo_with_kana INTO OUTFILE "c:\\temp\\v_t_jigyosyo_with_kana.csv" FIELDS TERMINATED BY ',';
出力されるcsvファイル
上記SQLを実行すると、ダブルクオーテーションで括ったファイルパスの場所にcsvファイルが出力される。下記のような感じだ。
1,01101,(カブ) ニホンケイザイシンブンシヤ サツポロシシヤ,株式会社 日本経済新聞社 札幌支社,北海道,ホッカイドウ,札幌市中央区,サッポロシチュウオウク,北一条西,6丁目1-2アーバンネット札幌ビル2F,イカニケイサイガナイバアイ,0608621,060 ,札幌中央,0,0,0 2,01101,アサヒシンブンシヤ ホツカイドウシシヤ,朝日新聞社 北海道支社,北海道,ホッカイドウ,札幌市中央区,サッポロシチュウオウク,北二条西,1丁目1番地,イカニケイサイガナイバアイ,0608602,060 ,札幌中央,0,0,0 3,01101,アリガトウジユツシユウネンプレゼントキヤンペ-ンジムキヨク,ありがとう10周年プレゼントキャンペーン事務局,北海道,ホッカイドウ,札幌市中央区,サッポロシチュウオウク,大通西,3丁目6,イカニケイサイガナイバアイ,0608776,060 ,札幌中央,0,0,0 4,01101,イツパンザイダンホウジン サツポロシコウツウジギヨウシンコウコウシヤ,一般財団法人 札幌市交通事業振興公社,北海道,ホッカイドウ,札幌市中央区,サッポロシチュウオウク,大通西,5丁目地下鉄大通駅西側コンコース内,イカニケイサイガナイバアイ,0608614,060 ,札幌中央,0,0,0 5,01101,イトウグミドケン カブシキガイシヤ,伊藤組土建 (株),北海道,ホッカイドウ,札幌市中央区,サッポロシチュウオウク,北四条西,4丁目1番地,イカニケイサイガナイバアイ,0608554,060 ,札幌中央,0,0,0 6,01101,イトウチユウシヨウジ カブシキガイシヤ ホツカイドウシシヤ,伊藤忠商事 (株) 北海道支社,北海道,ホッカイドウ,札幌市中央区,サッポロシチュウオウク,北三条西,4丁目1番地第一生命ビル,イカニケイサイガナイバアイ,0608547,060 ,札幌中央,0,0,0 7,01101,イリヨウホウジン イジンカイ ナカムラキネンビヨウイン,医療法人 医仁会 中村記念病院,北海道,ホッカイドウ,札幌市中央区,サッポロシチュウオウク,南一条西,14丁目,イカニケイサイガナイバアイ,0608570,060 ,札幌中央,0,0,0 8,01101,イワタチザキケンセツ カブシキガイシヤ,岩田地崎建設 株式会社,北海道,ホッカイドウ,札幌市中央区,サッポロシチュウオウク,北二条東,17丁目2番地,イカニケイサイガナイバアイ,0608630,060 ,札幌中央,0,0,0 9,01101,ウシオブツサン カブシキガイシヤ,潮物産 株式会社,北海道,ホッカイドウ,札幌市中央区,サッポロシチュウオウク,北一条東,9丁目99番地19,イカニケイサイガナイバアイ,0608540,060 ,札幌中央,0,0,0 10,01101,エ-アイ-ジ-エジソンセイメイホケン カブシキカイシヤ ホツカイドウジムセンタ-,AIGエジソン生命保険 株式会社 北海道事務センター,北海道,ホッカイドウ,札幌市中央区,サッポロシチュウオウク,北一条西,4丁目2-2札幌ノースプラザ10F,イカニケイサイガナイバアイ,0608613,060 ,札幌中央,0,0,0
注意点
このページで書いたSQL文は、非常に単純なものであり、細かいことを考慮していない。例えば、カラム内のデータにカンマがある場合、きちんと考慮するのであれば、何らかの形でエスケープする必要がある。しかし、そのようなことをしていない。
CSVファイルのカスタマイズ
上記の例だとCSVファイルの区切り文字はカンマだが、カスタマイズが可能だ。FIELDS TERMINATED BY ',' のカンマのところに、区切り文字にしたい文字を入れれば良い。例えば、コロン区切りにしたい場合のコマンドは以下のとおりだ。
SELECT * FROM v_t_jigyosyo_with_kana INTO OUTFILE "c:\\temp\\v_t_jigyosyo_with_kana.csv" FIELDS TERMINATED BY ':';
上記コマンドで出力されるCSVファイルは以下のようになる。
1:01101:(カブ) ニホンケイザイシンブンシヤ サツポロシシヤ:株式会社 日本経済新聞社 札幌支社:北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:北一条西:6丁目1-2アーバンネット札幌ビル2F:イカニケイサイガナイバアイ:0608621:060 :札幌中央:0:0:0 2:01101:アサヒシンブンシヤ ホツカイドウシシヤ:朝日新聞社 北海道支社:北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:北二条西:1丁目1番地:イカニケイサイガナイバアイ:0608602:060 :札幌中央:0:0:0 3:01101:アリガトウジユツシユウネンプレゼントキヤンペ-ンジムキヨク:ありがとう10周年プレゼントキャンペーン事務局:北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:大通西:3丁目6:イカニケイサイガナイバアイ:0608776:060 :札幌中央:0:0:0 4:01101:イツパンザイダンホウジン サツポロシコウツウジギヨウシンコウコウシヤ:一般財団法人 札幌市交通事業振興公社:北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:大通西:5丁目地下鉄大通駅西側コンコース内:イカニケイサイガナイバアイ:0608614:060 :札幌中央:0:0:0 5:01101:イトウグミドケン カブシキガイシヤ:伊藤組土建 (株):北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:北四条西:4丁目1番地:イカニケイサイガナイバアイ:0608554:060 :札幌中央:0:0:0 6:01101:イトウチユウシヨウジ カブシキガイシヤ ホツカイドウシシヤ:伊藤忠商事 (株) 北海道支社:北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:北三条西:4丁目1番地第一生命ビル:イカニケイサイガナイバアイ:0608547:060 :札幌中央:0:0:0 7:01101:イリヨウホウジン イジンカイ ナカムラキネンビヨウイン:医療法人 医仁会 中村記念病院:北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:南一条西:14丁目:イカニケイサイガナイバアイ:0608570:060 :札幌中央:0:0:0 8:01101:イワタチザキケンセツ カブシキガイシヤ:岩田地崎建設 株式会社:北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:北二条東:17丁目2番地:イカニケイサイガナイバアイ:0608630:060 :札幌中央:0:0:0 9:01101:ウシオブツサン カブシキガイシヤ:潮物産 株式会社:北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:北一条東:9丁目99番地19:イカニケイサイガナイバアイ:0608540:060 :札幌中央:0:0:0 10:01101:エ-アイ-ジ-エジソンセイメイホケン カブシキカイシヤ ホツカイドウジムセンタ-:AIGエジソン生命保険 株式会社 北海道事務センター:北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:北一条西:4丁目2-2札幌ノースプラザ10F:イカニケイサイガナイバアイ:0608613:060 :札幌中央:0:0:0 11:01101:エムエムエス マンシヨンマネ-ジメントサ-ビス カブシキカイシヤ:エムエムエス マンションマネージメントサービス (株):北海道:ホッカイドウ:札幌市中央区:サッポロシチュウオウク:南一条西:4丁目20番地:イカニケイサイガナイバアイ:0608537:060 :札幌中央:0:0:0
用途
用途としては、データをExcelなどで加工したい場合などに使うと良さそうだ。
viewは、データベース上はselect文の定義でしかないため、viewに対してmysqldumpを実行すると、viewの定義情報しか出力されず、中身のデータを得ることができない。そのため、このページに書いた手段を知っておくと良いだろう。
CSVファイルで出力
レンタルサーバ使用時の注意
多くのレンタルサーバの場合、この手法は使えない。
多くのレンタルサーバでは、アプリケーションサーバとDBサーバは物理的に分離されているため、DBアクセスする際は必ずリモートサーバにアクセスする形になる。そして、この手法の場合、ファイル出力先は必ずDBサーバ内になってしまう。
レンタルサーバでは、DBサーバからファイル自体にアクセスして取得することはできない。なので、この手法は使えない。mysqldumpコマンドを通してCSV出力を行う必要がある。