というか、抜け出せてないんだけども…会社で自分が管理しているXAMPPサーバー(Fedora)で、いつもの如くMySQLでログを解析しようとし、それぞれカラム構成が違う6テーブルをjoinすることにした。
Rubyやbashを駆使して(ほぼRubyにsystem関数で片付けたけども)、理想通りの構成にしとりあえず、過去4年分のデータを月単位でtableに小分けして作った。
「さて、MERGEするか」と思い、普通にcreateする。
MyISAMだし特に、間違ってないんだけどなぁと思いつつ、色々調べると、datetime型を使ってるとダメとか、文字コードが云々ってあるので、個別tableをもう一度文字コードを指定し、date型の部分をvarcharにしてMERGEテーブルを作る。
むかついたので、MERGEするはずのテーブル名に全部のデータぶちこんでやった。後悔はしてない。
まぁ今回はテストケースで小規模データだから4Gなくてできた力技だからいいんだが、根本的解決になっていない。
MySQLのバージョンアップすれば直るのかなぁ…
MySQLに行列交換の、array transposeみたいなことができれば言うことなしなんだが…
単純な16桁のランダムユニークな数値が改行区切りで16万行あって、それをソートして「,」区切りでほしいと言われた。
MySQLで型をBIGINTで、load data infile 、into outfileの順で普通にやったのだけど、そこそこ業務で必要だと言われ、Sqlite3+Rubyでトランザクションありでやってみたが…
インポートにすごく時間がかかって話になってない…。
Sqliteはトランザクション使わないと毎回チェックするのでインポートが遅いと有名だけど、おかしい。
インポートが遅いとindexとか関係なく話にならない…
とりあえず、調査より仕事が先なので、RubuでSplitしてsortしてjoin(",")したら、こっちの方が早い。
一日で、DB関連において今まで何とも思わなかった部分が2個もひっかかるとは思わなかった。
とりあえず、MySQLはバージョンと型についてと、Sqliteは.copyコマンドでどれぐらい早くなるか(.copyコマンドってdllからできるのか?)などを、暇な時に調査しないとなぁ…