accessの読み取りデータ量について
- accessの読み取りデータ量について質問させていただきます。扱いたいcsvが5万行×2000列(1Gbyte強)と膨大となっており、excel上でコピーして他のファイルに貼り付けるなど編集作業が一切できない状態となってます。
- ファイルを開くfopen時点で「イメージサイズが最大許容サイズを超えています」と表示されエラーになります。そこでネットで手段を探したところ、accessは大量のデータ処理に向いているとありました。
- 最大255列で分割していけるようなので、VBAを学んで挑戦しようと考えているのですが、そもそも自分が扱おうとしているデータ量をaccessで扱えるかが心配です。推測の範囲でもよいので、回答お願いします。
- ベストアンサー
accessの読み取りデータ量について
accessについて質問させていただきます。 扱いたいcsvが5万行×2000列(1Gbyte強)と膨大となっており、excel上でコピーして他のファイルに貼り付けるなど編集作業が一切できない状態となってます。そこでVisualStudioを用いてCのプログラミングで分割しようとしましたが、ファイルを開くfopen時点で「イメージサイズが最大許容サイズを超えています」と表示されエラーになります。 そこでネットで手段を探したところ、accessは大量のデータ処理に向いているとありました。最大255列?で分割していけるようなので、VBAを学んで挑戦しようと考えているのですが、そもそも自分が扱おうとしているデータ量をaccessで扱えるかが心配です。 推測の範囲でもよいので、回答お願いします。
- その他(プログラミング・開発)
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ファイルの必要な部分を切り出すだけでしたら、 Windowsの場合だとawkあるいはsedあたりでしょうか。 行番号や列番号を特定して切り出せます。 UNIX系のOSが利用できるのでしたら、cut, head, tailを組み合わせる方が簡単です。(Windowsでも相当するツールがあるかも知れませんが) 10GBを越えるような巨大なファイルでも対応できます。 データ処理を含めたプログラムを作るのでしたら、 1GB程度ですので、テキストデータを一気にメモリに読み込んで処理することも可能です。RubyやPythonなどで処理するのが簡単なように思います。 頭から読んでいって処理するのでしたらテキストでデータを持っておき、順番に読み込み計算する。 メモリ上に置いて置けないほど巨大でランダムにデータを取り出す必要が有るのでしたら、SQLiteなどのデータベースソフトと組み合わせる方法をとっています。(Ruby+activerecord+SQLite3を使っています)
その他の回答 (1)
- nicotinism
- ベストアンサー率70% (1019/1452)
大変大雑把ですが日本郵便に郵便番号の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 は全くわかりませんので、この辺にて。
お礼
やはりaccessでも無理そうですか…。リンク先に関しては非常にありがたいです!どうやら、まだまだ探し方が足りなかったようですね。色々と方法を探してみたいと思います。 回答ありがとうございました!
関連するQ&A
- ExcelやAccessで統計したいです
私はExcel初心者で、VBAは使用したことがありません。またAccessはまったく使用したことがありません。 以下のことがExcelやAccessでは可能なのかおわかりの方、お返事いただけたらと思います。 現在、Excelで競艇の予想と結果の過去のデータを集計したり統計をとったりして検証しています。 データは手作業で入力しているのですが、競艇は1日に1場で12Rあり、全国で20場近く開催されているので年間のデータは膨大でとても手作業では対応しきれません。 データは「予想」と「結果」があります。1日分の「予想ファイル(CSV)」と「結果ファイル(TEXT)」があり、これが1年分あるのでファイル数は数千あります。 これらの膨大なファイルをExcelやAccessに取り込むというのは自動でできるのでしょうか? 私は現在はTEXTやCSVをコピー&ペーストなどで手作業で入力しているので非常にたいへんなのです。 Accessは使用したことがなく、このようなことが可能なのかもわかりません。 毎日増えていく予想・結果データをExcelかAccessに取り込んで集計データが更新されるようにしたいと思いますが、このようなことはExcelやAccessで可能でしょうか? Windows2000とExcel2000:Access2000を持っています。
- ベストアンサー
- オフィス系ソフト
- AccessでCSVの読み込み履歴を残したいです
Excel・Accessで時々CSVやタブ区切りファイルからデータを取り込んでいます。 ExcelではCSVファイルを取り込むとメニューの[ファイル(F)]のオープン履歴に残りますが、AccessでCSVファイルを読み込んだ履歴を残せるような設定等はありませんでしょうか? いつもAccessでは[ファイル(F)]-[外部データの取り込み(G)]-[インポート(I)...]からCSVファイルのデータを読み込んでいます。 使えるOfficeのバージョンは 97~2003 のいずれかです。 ※機能を見つけられないだけなのか、それとも実際に機能がないのかもよくわかっていませんので、無理なら無理と教えてもらえると助かります。
- ベストアンサー
- その他MS Office製品
- access データ更新
Access初心者です。 いま、自分がやってる業務の簡単なDBをaccessで作成しようとしてます。質問ですが、テーブル(1)とテーブル(2)、((1)(2)ともにフィールドは仮に、A列(ユニークなコード)、B、C、D(日付)、E(午前 or 午後)とした場合) テーブル(2)に日々CSVファイルをインポート。その際、テーブル(1)と(2)の差分((1)にあって(2)にないもの)をテーブル(1)に追加したいのと、テーブル(1)(2)両方あるが、D列、またはE列が、テーブル(1)と(2)が違った場合、テーブル(2)にあるデータを書き換えてテーブル(1)に保存するような、マクロを作りたいと考えてます。 不一致クエリとか使えば、出来そうな気がするんですが・・・ どなたか、ご存知の方、教えてください。
- 締切済み
- その他(データベース)
- csvファイルをAccessに取り込むとデータ数が増える
項目をカンマで区切っただけの単純なcsvファイルをAccessでインポートしてテーブルを作成したら、データ数が増えてしまいました。 (csvファイルをテキストで開いたときの行数と、Accessの行数が異なる) 5000件ぐらいなら、csvもAccessもデータ数は同じなのですが、データ数が大きくなると、csvとAccessのテーブルで6万件とかの差分が出てしまいます。 csvファイルとAccessで、データ数を同じにするにはどうしたら良いでしょうか。 参考になるURLでも良いので、教えて頂ければと思います。 よろしくお願いします!
- 締切済み
- その他(データベース)
- AccessからCSVファイルを作成するとき。
とあるページでAccessからCSV形式のファイルをエクスポートするときあは、ただエクスポートするだけでは並び順になっていない可能性が高いので、クエリからCSVファイルを作るほうがよいと書いてありました。 下記のやり方ではデータがうまくファイルに入らないのでしょうか? ご教授お願いいたします。 http://support.secure.ne.jp/manual/db/access.html
- ベストアンサー
- その他([技術者向] コンピューター)
- VBAでaccessのデータと比較…
エクセルVBAについてです。 正・誤の2列のみで構成されるエクセルの正誤表があります。フォームのボタン押下のイベントでこの正誤表の「誤」の列すべての値と、10項目程度からなるaccessのデータの正誤表の項目に該当する列の値を比較(検索)して、相違が見つかった場合に、accessデータの該当行をすべてCSV形式で出力するツールを作りたいです。 アタマが混乱中なので質問が分かりにくいと思いますが御力添え願えたら幸いです。
- 締切済み
- Visual Basic
- CSVデータをAccessのテーブルとして取り込み
アクセスを勉強しはじめた初心者です。 csv形式のデータをアクセスのテーブルとして取り込みたいのですが、日付データがうまく取り込めません。 csvでは日付データが「20110101」という形式になっているためだと思うのですが、これをアクセスに日付「2011/1/1」として取り込むことはできないのでしょうか? csvをエクセルで開いて書式を修正すればできたのですが、csvファイルがたくさんあるため、アクセス側でなんとかできないかと思っています。 よろしくおねがいします。
- ベストアンサー
- オフィス系ソフト
- 複数csvファイルのデータとファイル名をひとつのACCESSのテーブルにインポートしたい
1,000個以上のcsvファイルを、C:\tool\csvfiles\に格納し、C:\tool\にあるACCESSファイルのテーブル、「importfiles」にインポートするプログラムをVBAを作成したいです。 条件は、以下を満たしたいです。 ・1番右のフィールドにファイル名を追加したい ・それぞれのフィールドについて、データ型を指定したい ■CSVファイルのサンプル ファイル名(1):0009_xxx_0001.CSV データ内容(1): 部署コード 請求コード 日時 料金 0001 1234 090730 100 0001 1235 090730 150 ファイル名(2):0009_xzy_0002.CSV データ内容(2): 部署コード 請求コード 日時 料金 0002 2234 090730 100 0002 2235 090730 150 ■ACCESSでやりたいこと テーブル名:importfiles データ内容: ファイル名 部署コード 請求コード 日時 料金 0009_xxx_0001.CSV 0001 1234 090730 100 0009_xxx_0001.CSV 0001 1235 090730 150 0009_xzy_0002.CSV 0002 2234 090730 100 0009_xzy_0002.CSV 0002 2235 090730 150 データ型は料金は料金は数値型、それ以外はテキスト型です。 ACCESS 2003を試用しております。 transfertextではファイル名が取得できず、ほかの方法も見当がつかず、本当に困っています。 どなたかご存知の方、よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- Excel → Access データをインポート
OS WinXP Pro SP2 Office 2000 SP3 はじめまして。 マクロ(Excel VBA)を記述しているExcelファイル(Xls_Macro.xls)とインポート用データのExcelファイル(Xls_Data.xls)は別々のファイルになっていて、マクロを実行するとExcelファイルとインポート用データのExcelファイルのデータをAccessファイル(Access.mdb)にインポートする仕組みを開発しています。 インポート用データのExcelファイル(Xls_Data.xls)をADOで接続しレコードセットでデータを取得し、Accessファイル(Access.mdb)もADOで接続しレコードセットの「.AddNew」でAccessファイル(Access.mdb)に更新しようと考えています。 この考え方で問題ないのでしょうか!? もっと簡単な方法があるという方や、何か良い方法をお持ちの方 いらっしゃいましたら、よろしくお願いいたします。
- 締切済み
- その他(プログラミング・開発)
- アクセスのデータ削除について
Access97を使用して、受電内容のデータを管理しています。 ここ最近データが膨大になりサイズも当然大きくなり、 重くなってしまったので古いデータを削除する事にしました。 テーブルから削除するレコードを選んで「レコードの削除」を 行なってみたんですが、サイズが変わらないのです。 どのようにすればきちんと容量を減らす事ができるのでしょうか? ご指導のほどよろしくお願いいたします。。。
- ベストアンサー
- オフィス系ソフト
お礼
すごいですね、そんなに色々と方法があるとは知りませんでした!示していただいたソフトの概略を見た限り、かなりいけそうな気がします!がんばって勉強してみます! 回答ありがとうございました。