質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1464閲覧

MySQLに容量の大きいCSVファイルをインポートしたい

gymgym

総合スコア97

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/02/19 07:25

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にインポートしたいのですが、どのように実行すればよいでしょうか。

また、高速化も図りたいのでその点も考慮していただくとありがたいです。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/02/19 07:30 編集

1列目は最初の行は読み飛ばすのでしょうか? またCSVだと、セパレータとエンクロージャがあると思うのですが?
sazi

2019/02/19 07:35

>形は(90607238, 2) の意味が分かりません。
hayataka2049

2019/02/19 12:32

>saziさん 恐らくですが、pandasのDataFrameのshapeを表しており、日付時刻と文字列の2カラムで90607238レコードあるという意味だと思われます。
wwbQzhMkhhgEmhU

2019/02/19 13:43

MySQLはほとんど使ったことないのですが、まずはCSVからLOADコマンド一発でimportする方法で試してみて、「格納したデータの用途なども考えて、実際DBに移行すべきなのか」を明確にした後、pythonから好きなモジュールでINSERT叩いてどれくらいになるか見てみればいいかと思います。 DBの必要性とSQL叩く方式で高速化にどの程度の時間をかけたいか次第で、LOADで行くのかチューニングしたINSERTで行くのか考えればいいのではないでしょうか? 速度はテーブルの設計やインデックスにも依存しますので、そこも参照方法次第でチューニングした後に、ローディングの方法も考えた方がいいと思います。なお、大量INSERT時はINDEXを消すか無効化(できるのか知りません)した方が速いDBが多いです。
gymgym

2019/02/21 08:31

ご回答ありがとうございます。 参考にさせていだきます。
sazi

2019/02/21 09:14

> hayataka2049さん DataFrameで調べてみました。 90,607,238件ならそこそこの件数ですけど、カーディナリティの高いタイムスタンプなら特段考慮は不要そうですね。
guest

回答1

0

ベストアンサー

そこで、MySQLを活用していこうと思っています。

データの容量は4GBほどで、形は(90607238, 2)です。

データ容量は 4 GB程度ということなので、MySQL で問題ないと思います。

MySQLにCSVをインポートする上で、カラムの型はどのように設定すればよいでしょうか。

MySQL のカラムの型ですが、

1列目の日付 : DateTime型
2列目の文字列(文字数の制限はなし) : TEXT型 or BLOB型

で良いと思います。

以上のようなデータをMySQLにインポートしたいのですが、どのように実行すればよいでしょうか。

Python では MySQL を操作するためのパッケージ(PyMySQL や mysqlclient など)が用意されているので、それらを利用するのが簡単でしょう。

また、高速化も図りたいのでその点も考慮していただくとありがたいです。

高速化については、一度 MySQL で速度計測してから考えた方が良いと思います。

投稿2019/02/19 12:42

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問