トップ «前の日記(2009-05-05 [J]) 最新 次の日記(2009-05-29 [J])» 編集

『よだきがり』のたわごと

2007|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|07|08|09|10|
2011|03|04|
2012|10|12|
2013|04|

2009-05-22 [J] MERGEできねぇorz

_ 久々にMySQLでハマった…

というか、抜け出せてないんだけども…会社で自分が管理しているXAMPPサーバー(Fedora)で、いつもの如くMySQLでログを解析しようとし、それぞれカラム構成が違う6テーブルをjoinすることにした。

Rubyやbashを駆使して(ほぼRubyにsystem関数で片付けたけども)、理想通りの構成にしとりあえず、過去4年分のデータを月単位でtableに小分けして作った。

「さて、MERGEするか」と思い、普通にcreateする。

_ あれ?MERGEテーブルがselectできねぇorz

MyISAMだし特に、間違ってないんだけどなぁと思いつつ、色々調べると、datetime型を使ってるとダメとか、文字コードが云々ってあるので、個別tableをもう一度文字コードを指定し、date型の部分をvarcharにしてMERGEテーブルを作る。

_ やっぱり、ダメだ\(^o^)/

むかついたので、MERGEするはずのテーブル名に全部のデータぶちこんでやった。後悔はしてない。

まぁ今回はテストケースで小規模データだから4Gなくてできた力技だからいいんだが、根本的解決になっていない。

MySQLのバージョンアップすれば直るのかなぁ…

_ いずれ、Oracleに買収されてなくなりそうな予感もするけどさ…

MySQLに行列交換の、array transposeみたいなことができれば言うことなしなんだが…

_ Sqliteのインポート→ソート→アウトプットがRuby単体に負けたorz

単純な16桁のランダムユニークな数値が改行区切りで16万行あって、それをソートして「,」区切りでほしいと言われた。

MySQLで型をBIGINTで、load data infile 、into outfileの順で普通にやったのだけど、そこそこ業務で必要だと言われ、Sqlite3+Rubyでトランザクションありでやってみたが…

インポートにすごく時間がかかって話になってない…。

Sqliteはトランザクション使わないと毎回チェックするのでインポートが遅いと有名だけど、おかしい。

インポートが遅いとindexとか関係なく話にならない…

とりあえず、調査より仕事が先なので、RubuでSplitしてsortしてjoin(",")したら、こっちの方が早い。

一日で、DB関連において今まで何とも思わなかった部分が2個もひっかかるとは思わなかった。

とりあえず、MySQLはバージョンと型についてと、Sqliteは.copyコマンドでどれぐらい早くなるか(.copyコマンドってdllからできるのか?)などを、暇な時に調査しないとなぁ…

お名前:
E-mail:
コメント: