Pythonで容量の大きいデータをcsvファイルに保存し、pandasを用いて抽出したりなど作業していました。
しかし、今後もデータの容量は増えていく予定のため実行時間が膨大になると予想されるため、データベースを活用しようと考えています。
そこで、MySQLを活用していこうと思っています。
データの容量は4GBほどで、形は(90607238, 2)です。
MySQLにCSVをインポートする上で、カラムの型はどのように設定すればよいでしょうか。
データの先頭5行は以下のようになっております。
Mon Jan 07 11:43:09 +0000 2019 \ 0 Sun Jan 06 14:43:49 +0000 2019 1 Sun Jan 06 03:38:58 +0000 2019 2 Tue Jan 01 14:12:03 +0000 2019 3 Mon Dec 31 07:56:34 +0000 2018 4 Sun Dec 30 07:31:22 +0000 2018 0 まず、お箸の練習しろ。 1 本日ラジオ。新年一発目は恒例ののメンバーが登場。 2 あけー。 3 良いお年を。 4 本日ラジオ。年末ラストは歌合戦
1列目・・・日付(String型)
2列目・・・文字列(文字数の制限はなし)
以上のようなデータをMySQLにインポートしたいのですが、どのように実行すればよいでしょうか。
また、高速化も図りたいのでその点も考慮していただくとありがたいです。
よろしくお願い致します。
1列目は最初の行は読み飛ばすのでしょうか?
またCSVだと、セパレータとエンクロージャがあると思うのですが?
>形は(90607238, 2)
の意味が分かりません。
>saziさん
恐らくですが、pandasのDataFrameのshapeを表しており、日付時刻と文字列の2カラムで90607238レコードあるという意味だと思われます。
MySQLはほとんど使ったことないのですが、まずはCSVからLOADコマンド一発でimportする方法で試してみて、「格納したデータの用途なども考えて、実際DBに移行すべきなのか」を明確にした後、pythonから好きなモジュールでINSERT叩いてどれくらいになるか見てみればいいかと思います。
DBの必要性とSQL叩く方式で高速化にどの程度の時間をかけたいか次第で、LOADで行くのかチューニングしたINSERTで行くのか考えればいいのではないでしょうか?
速度はテーブルの設計やインデックスにも依存しますので、そこも参照方法次第でチューニングした後に、ローディングの方法も考えた方がいいと思います。なお、大量INSERT時はINDEXを消すか無効化(できるのか知りません)した方が速いDBが多いです。
ご回答ありがとうございます。
参考にさせていだきます。
> hayataka2049さん
DataFrameで調べてみました。
90,607,238件ならそこそこの件数ですけど、カーディナリティの高いタイムスタンプなら特段考慮は不要そうですね。
回答1件
あなたの回答
tips
プレビュー