仕事じゃLinux、Solaris、Ciscoなど。 趣味じゃProToolsLEなど。 愛車はkawasaki 250TRナリよ。


スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


MySQL Workbench でCSV 取込 → group_concat → CSV 取出 してみた
仕事で、データの整形をしたいことがあった。
 ・「親コード」、「子コード」
の2値1組のペアで1件のレコードになっており、親コードは重複がある。
子コードは基本的には重複はないが、重複は許容する。
また親コードがどれほど重複するかはまちまちである。
そんなようなデータテーブルがある。
これを、親コードで集約して
 ・「親コード」、「子コード1」、「子コード2」、、、、「子コードn」
という形の1件のレコードに集約したかった。

例えば、
●元のデータ:
 ・ビートルズ,ポール
 ・ビートルズ,ジョン
 ・ビートルズ,リンゴ
 ・ビートルズ,ジョージ
 ・カーペンターズ,リチャード
 ・カーペンターズ,カレン
 ・O(+>,プリンス
だとして、
●整形したい形:
 ・ビートルズ,ポール,ジョン,リンゴ,ジョージ
 ・カーペンターズ,リチャード,カレン
 ・O(+>,プリンス
という感じである。

これをそもそもどうやって実現したらいいかわからなかったのだけど、ある識者に「MySQL の group_concat を使えばできる。」と教えていただいた。
それで久々にMySQLを触ることにしたところ、いまMySQL業界では Workbench というGUIツールがきているらしい。
先日のOSC Kyoto 2014 で、日本MySQL ユーザー会の方に、参考になるWeb 記事を教えていただくなどした。
https://www.ospn.jp/osc2014-kyoto/modules/eguide/event.php?eid=42
教えていただいた記事はこちら。
http://thinkit.co.jp/story/2013/10/21/4572

早速Ubuntu14.04日本語Remixにバージョン6.0をインストールしてみる。
Screenshot from 2014-08-09 23:03:03

起動してみる。
Screenshot from 2014-08-09 23:03:44

最初の画面はホーム画面というみたいだけど、左右2分割で、左側がさらに上下2分割、の3分割画面である。
左上が「MySQL Connections」、左下が「Models」、右側が「Shortcuts」である。
右側の「Shortcuts」は、まあショートカットなので、必ずしもWorckbench の機能、メニューではない。
左下の「Models」は、EER Diagrams とかグラフィカルで便利な機能なのだけど、いきなりここに入るとよくわからなくなってしまうので、まずは左上の「MySQL Connections」をじっくり触るといいと思う。

まずはMySQL への接続を作る。
左上の「MySQL Connections」の右側に、丸囲みプラスのアイコンがあるが、これをクリックすると、
「Setup New Connection」というウィンドウがポップアップする。
ここに入れるのは、この接続の名前と、MySQLサーバーのホスト名またはIPアドレス、それからログインユーザー名やパスワードだ。
Screenshot from 2014-08-09 23:35:36

ここは、次のようにすることにする。適宜読み替えを。
「Connection Name:」X201DB
「Hostname:」そのまま。ローカルにMySQLもインストールしてあるので。
「Username:」そのまま。個人作業用なので。
「Password:」そのまま。個(ry
「Default Schema:」空白にしとく。デフォルトでつなぎにいくデータベースを設定するみたい。
要は、接続名を付けただけだ。
ウィンドウ右下の「Test Connection」をクリックしてみて、「Connection parameters are correct.」となればOK。
Screenshot from 2014-08-09 23:43:17

この画面が出たらOKをクリックしてポップアップを閉じ、元のウィンドウの「Test Connection」の隣の「OK」をクリックすると設定完了。
ホーム画面に、接続アイコンが出来ている。
このアイコン、アイコン上の右寄りの部分にマウスオーバーすると、右上がカールしたようなアイコンになる。
この時クリックすると、接続設定が表示され、さらに設定変更画面へ遷移できる。
Screenshot from 2014-08-10 03:20:11


実際のデータベース作業をしたい場合は、カールしていない状態、つまりアイコンの中央から左寄りをクリックすると、新しいタブで、「X201DB」が開く。
実際のデータベース作業は、このタブのなかでやっていく、という感じ。
よく見ると、画面上側にはファイルメニューの他にもアイコンでメニューがあり、このアイコンで作業を始める感じ。
また画面左側には、「MANAGEMENT」というメニューと「INSTANCE」というメニュー、そして「Object Info」などのタブ化ペインが見える。
また画面右側には、「SQL File 1」というタブがあり、その下に結果表示領域のようなものがある。
今回はこのタブ画面を中心に作業するので、左側の「MANAGEMENT」や「INSTANCE」の配下のメニューは使わない。
これらのメニューは、使い込んで運用をがっつりやるような場合に使う機能だと思う。
Screenshot from 2014-08-10 00:12:48

現状では、MySQLサーバーに接続しただけで、データベースがまだない状態である。
上側のアイコンをクリックして、データベースを作ったり、テーブルを作ったりしていく。
まずは、円柱にプラスのアイコン「Create a new schema in the connected server」をクリックする。
Screenshot from 2014-08-10 00:34:36

そうすると、「new_schema」というタブが開くので、データベース名と、デフォルトの文字コードと照合順序を指定する。
「Name:」mytestDB
「Default Collation:」utf-8
そして右下の「Apply」をクリックする。
Screenshot from 2014-08-10 01:46:51

そうすると、データベースを作成するSQL文が生成される。
Screenshot from 2014-08-10 01:47:49

画面をよく見ると、左側に「SCHEMAS」というペインがあって、ここに「mytestDB」が表示されている。
クリックして開くと、「Tables」があるので、これを右クリックして、「Create Table...」を選択して、以下のように設定。
「Name:」BandData
「Column Name」
 ・idBandData :主キーでNotNullとする。(PKとNNにチェックを入れる。)
 ・Band :そのまま。VARCHAR(45)可変長の文字列型、MAX45文字。(だよね?)
 ・Member :同上。
Screenshot from 2014-08-10 01:49:00

できたら、また右下の「Apply」をクリックすると、またSQL文が生成される。
Screenshot from 2014-08-10 01:49:23

試しに、このテーブルの中身を表示するSQL文を実行してみる。
SELECT * FROM BandData;
と入力して、カミナリアイコンをクリックする。
しかし変化がなく、うまくいかない。
これは、左側の「SCHEMAS」ペインで「mytestDB」をダブルクリックして、データベース名が太字になるようにしてから実行すると、結果が返ってくる。
まだデータを入力していないので、空っぽであるが・・・。
Screenshot from 2014-08-10 01:50:34

いよいよ、CSVファイルを取り込む。
ワークシートにプラスのアイコンをクリック。
CSVファイルを適宜選択する。
Screenshot from 2014-08-10 01:51:00

読み込めていそうだが、1件しか表示されていない。
「Wrap Cell Content:」のトグルボタンをクリックすると、結果表示が展開されて、ちゃんと全件認識されていることがわかる。
Screenshot from 2014-08-10 01:51:36


ただしまだ実行されていないので、右下の「Apply」アイコンをクリックする。
そうすると、INSERT文が生成されるので、実行。
Screenshot from 2014-08-10 01:52:35

肝心の「group_concat」はこんな感じ。
select Band,group_concat(Member order by Member separator ',') from BandData group by Band;

Export: のアイコンをクリックして、CSVファイルにエクスポートする。
Screenshot from 2014-08-10 01:54:33

出来たCSVファイルは、1行目が余計だったり、ダブルクォーテーション(")が不要だったりするので、置換などで取り除く。
Screenshot from 2014-08-10 01:55:45


完成。
やった〜!!
Screenshot from 2014-08-10 01:56:36
スポンサーサイト

テーマ:MS-Access関係 - ジャンル:コンピュータ



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。