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出力を行う必要がある。

view関連

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください