こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

accessの読み取りデータ量について

accessについて質問させていただきます。

扱いたいcsvが5万行×2000列(1Gbyte強)と膨大となっており、excel上でコピーして他のファイルに貼り付けるなど編集作業が一切できない状態となってます。そこでVisualStudioを用いてCのプログラミングで分割しようとしましたが、ファイルを開くfopen時点で「イメージサイズが最大許容サイズを超えています」と表示されエラーになります。

そこでネットで手段を探したところ、accessは大量のデータ処理に向いているとありました。最大255列?で分割していけるようなので、VBAを学んで挑戦しようと考えているのですが、そもそも自分が扱おうとしているデータ量をaccessで扱えるかが心配です。
推測の範囲でもよいので、回答お願いします。

投稿日時 - 2013-10-31 18:47:59

QNo.8328568

困ってます

質問者が選んだベストアンサー

ファイルの必要な部分を切り出すだけでしたら、
Windowsの場合だとawkあるいはsedあたりでしょうか。
行番号や列番号を特定して切り出せます。
UNIX系のOSが利用できるのでしたら、cut, head, tailを組み合わせる方が簡単です。(Windowsでも相当するツールがあるかも知れませんが)
10GBを越えるような巨大なファイルでも対応できます。


データ処理を含めたプログラムを作るのでしたら、
1GB程度ですので、テキストデータを一気にメモリに読み込んで処理することも可能です。RubyやPythonなどで処理するのが簡単なように思います。
頭から読んでいって処理するのでしたらテキストでデータを持っておき、順番に読み込み計算する。
メモリ上に置いて置けないほど巨大でランダムにデータを取り出す必要が有るのでしたら、SQLiteなどのデータベースソフトと組み合わせる方法をとっています。(Ruby+activerecord+SQLite3を使っています)

投稿日時 - 2013-11-01 12:17:07

お礼

すごいですね、そんなに色々と方法があるとは知りませんでした!示していただいたソフトの概略を見た限り、かなりいけそうな気がします!がんばって勉強してみます!
回答ありがとうございました。

投稿日時 - 2013-11-01 13:59:27

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

大変大雑把ですが日本郵便に郵便番号のCSVファイルがあります。
Ken_All.csv で12MB程度です。
これをAccessで読むと20MBのファイルサイズになります。
約1.7倍ですので、そちらのファイルだと1.7GBの計算になります。
Accessはファイルサイズの限界が2GBですので、
Access内部でのワークスペースも考慮すると無理だと思います。
(読み込ませたとしても後の加工ができない)
また、フィールド数は255に制限されていますので
2000列のCSVファイルだと無条件に256以降はインポートの際に切り捨てられます。
今2002・2010でしか試せない環境にあるので何とも言えませんが、
2013でも読み込みの開始位置を1~250、251~500・・・とは
してくれないと思います。
なので、あえてAccessで試そうとは思わないほうが良いと考えます。

他のちゃんとしたデータベースでもカラム数は
http://d.hatena.ne.jp/GARAPON/20110809/1312880645
のように2000列をいっぺんには無理です。
何とかして分割しなくてはいけませんが、
「C言語におけるファイル入出力の高速化」
http://www.cc.u-tokyo.ac.jp/support/press/news/VOL8/No5/data_no1_0609.pdf
↑直リンです。
を眺めると大きなファイルサイズでも読み書き出来そうな雰囲気ですよ。
(違っていましたらゴメンなさい)
C は全くわかりませんので、この辺にて。

投稿日時 - 2013-10-31 23:26:00

お礼

やはりaccessでも無理そうですか…。リンク先に関しては非常にありがたいです!どうやら、まだまだ探し方が足りなかったようですね。色々と方法を探してみたいと思います。
回答ありがとうございました!

投稿日時 - 2013-11-01 13:46:33

あなたにオススメの質問