Microsoft Accessで3.5GB程度のCSVを読み込ませたかったのですが、インポートできませんでした。おそらくファイルが大きすぎるのだと思います。

ソフトウェアは問わない(もはやAccessじゃなくてもよくWindows上で動作するDBであればなんでもいい)ので、大容量のCSVのインポートが可能な方法を探しています。
200万行ほどあります。

回答の条件
  • 1人50回まで
  • 登録:2006/08/14 22:44:34
  • 終了:2006/08/15 03:03:53

ベストアンサー

id:pmakino No.7

まきのっぴ回答回数355ベストアンサー獲得回数282006/08/14 23:37:05

ポイント50pt

Access 標準の MDB 形式のデータベースは上限 2GB の制限があるので、それにひっかかっているのではないかと思います。(それ以前に何か別の問題にひっかかっている可能性もあり得ますが…)


このような場合、自分なら ActivePerlDBD::SQLite モジュールをインストールし、CSV をパースして SQLite の DB に INSERT する簡単なスクリプトを書きます。(実際に約1000万行、3GB 程度のデータを INSERT し処理したことがあります)


しかし、その方法では Access の GUI が使えなくなってしまうため、不便ですし、いちいちスクリプトを書かなければならないという問題があります。

ここでの最大の問題は「Access を使っていること」ではなく「MDB データベースを使っていること」にあると思われるので、MDB ではなく MySQL や PostgreSQL と対応する ODBC ドライバを使って Access 経由で操作すればよりスマートに解決できそうです。

ということで、@IT:Windows TIPS -- Tips:データベース・サーバのフロントエンドとしてAccessを利用する等を参考に Access + ODBC + MySQL という構成にしてみてはいかがでしょうか?

id:kamiochiai

ありがとうございます。

私の質問が割とあいまいな中でここまで引き出してくださり感謝してます。



この辺で閉じさせていただきます。

いろんな角度からご回答いただきましてありがとうございました!!

2006/08/15 03:01:36

その他の回答(6件)

id:acute_hello_to No.1

acute_hello_to回答回数47ベストアンサー獲得回数12006/08/14 22:53:56

ポイント30pt

CSVを直接インポートさせるのではなく、VBAでファイルを読み込んで、SQL分でINSERTさせるプログラムを作成して、試しては如何でしょうか?

同じように、数十万行のデータを読み込ませたときには、やはりインポートではうまくいきませんでしたが、プログラムでは処理できました。

id:kamiochiai

なるほど、直接のインポートは難しいわけですね。

ありがとうございます。

2006/08/14 23:06:15
id:mass3 No.2

mass3回答回数118ベストアンサー獲得回数152006/08/14 23:02:58

ポイント30pt

Postgresqlはいかがでしょうか?

http://www.postgresql.jp/

MS-Accessと違って操作にはある程度のSQLの知識が必要ですが、

UNIXサーバ由来の本格的なRDBMSです。200万行のデータも問題なく扱えると思います。

商用にも無料で使うことができます。(クライアント数による料金もありません)

ダウンロードはこちらから(↓)

http://www.postgresql.org/ftp/binary/v8.1.4/win32/

postgresql-8.1.4-1-ja.zipをダウンロードしてください。

出てきたexeファイルを実行してインストールします。

一緒にインストールされるpgAdmin3である程度の管理はGUIでできます。

CSVのインポートはコマンドラインからやった方がよいと思います。

(psqlの\copyコマンドを使います。)

日本語のマニュアルは

http://www.postgresql.jp/document/

にあります。

id:kamiochiai

なるほど、

Windows上ではポストグレスは使ったことがなかったので、試してみようと思います。

2006/08/14 23:07:37
id:bash0C7 No.3

bash0C7回答回数7ベストアンサー獲得回数02006/08/14 23:08:56

ポイント30pt

Microsoft SQL Server: SQL Server 2005 Express Edition

MicrosoftのSQL Server Express Editionはいかがでしょうか。

Accessと同じMicrosoft製なので、他のDBに比べて乗り換えは容易と思われます。

id:kamiochiai

ありがとうございます。

ファイルサイズに問題がなければやってみようと思います。

2006/08/15 02:51:35
id:b-wind No.4

b-wind回答回数3344ベストアンサー獲得回数4402006/08/14 23:15:21

ポイント30pt

http://www.hioki.co.jp/jp/download/3169/csvcut_j.html

どんな方法でインポートするにせよ、ちょっとファイルが大きすぎます。

まずは分割して少しずつロードしてみてはいかがでしょうか?

id:kamiochiai

3分割ぐらいで試してみようと思います。

いずれにしてもAccessではmdb1個の上限がありダメっぽいです

2006/08/15 02:52:48
id:kurukuru-neko No.5

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/08/14 23:24:40

ポイント50pt

200万行= 2.0 * 1000 * 1000

3.5GB = 3.5 * 1000 * 1000 * 1000 / 2000000

= 1750 Char

===================

無料で使えるのは、MySQL,PostgreSQL。

有料だとSQL Server,Oracle等

PostGreSQLだとCOPY

http://www.postgresql.jp/document/pg721doc/reference/sql-cop...

MYSQLだとcsvのテーブルをタイプを定義して

別のテーブルにコピーすればよい。

CSVファイルをimportする場合、一度にimportすると

やはり止まるような気がする。

複数に分けてimportした方がよいと思います。

===============================================

PostGreSQL

Maximum size for a database unlimited

http://www.postgresql.org/docs/faqs.FAQ.html

MySQL 5.1

FAT32 2G NTFS 2TB

http://dev.mysql.com/doc/refman/5.0/en/table-size.html

Accessは最大データベースサイズ 2G

http://office.microsoft.com/ja-jp/assistance/HP052741431041....

MS系 SQL Server Express

データベースサイズの制限 4G

インポート機能がないので ×

http://www.microsoft.com/japan/sql/prodinfo/features/compare...

Oracle 10g Express edition

データベースサイズの制限 4G

http://www.oracle.com/technology/products/database/xe/index....

id:kamiochiai

求めている理想的な回答がいただけて嬉しいです。

上限のないポストグレスに分があるみたいですね。

2006/08/15 02:54:22
id:bigpon777 No.6

bigpon777回答回数1ベストアンサー獲得回数02006/08/14 23:24:51

ポイント40pt

accessはファイルサイズの上限が2GBで、それを超えるとエラーが出てインポートできないですね。私も困った経験があります。

対策ですが、

1 目的にもよりますが、複数のmdbファイルに分散してテーブルを保存し、新しく3つ目のmdbファイルからクエリで抽出する方法

2 本格的なDBに移行(オープンソースのPostgreSQLやMySQLなら無料なので気軽に手を出しやすいかも。windows版もちゃんとあるようです)

※3 office2007の登場を待つ。(まだもう少し先の話ですが、access2007が2GBの壁を突破してくることを期待するとか。これは解答として曖昧すぎるので参考までに)

以上、その膨大なデータの用途がわからないのでこれ以上の提案は難しいですが、時間がないなら複数のmdbファイルに分散する1の方法、勉強する時間と意欲があるなら2の本格的なデータベースの利用をお勧めします。

id:kamiochiai

1 の方法は現実的ですね。

試してみようと思います。

2006/08/15 02:54:53
id:pmakino No.7

まきのっぴ回答回数355ベストアンサー獲得回数282006/08/14 23:37:05ここでベストアンサー

ポイント50pt

Access 標準の MDB 形式のデータベースは上限 2GB の制限があるので、それにひっかかっているのではないかと思います。(それ以前に何か別の問題にひっかかっている可能性もあり得ますが…)


このような場合、自分なら ActivePerlDBD::SQLite モジュールをインストールし、CSV をパースして SQLite の DB に INSERT する簡単なスクリプトを書きます。(実際に約1000万行、3GB 程度のデータを INSERT し処理したことがあります)


しかし、その方法では Access の GUI が使えなくなってしまうため、不便ですし、いちいちスクリプトを書かなければならないという問題があります。

ここでの最大の問題は「Access を使っていること」ではなく「MDB データベースを使っていること」にあると思われるので、MDB ではなく MySQL や PostgreSQL と対応する ODBC ドライバを使って Access 経由で操作すればよりスマートに解決できそうです。

ということで、@IT:Windows TIPS -- Tips:データベース・サーバのフロントエンドとしてAccessを利用する等を参考に Access + ODBC + MySQL という構成にしてみてはいかがでしょうか?

id:kamiochiai

ありがとうございます。

私の質問が割とあいまいな中でここまで引き出してくださり感謝してます。



この辺で閉じさせていただきます。

いろんな角度からご回答いただきましてありがとうございました!!

2006/08/15 03:01:36
  • id:akibare
    CSVを外部テーブルとしてリンクをすれば2GBの制限を越えられると思いますよ。クエリとか実行するのに恐ろしく時間がかかると思いますけどね。別製品を考える場合はMS SQL Server 2005 Expressとかも良いかもしれません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません