SQLITEでCSVインポート方法

このQ&Aのポイント
  • SQLITEのデータベースにCSVをインポートする方法について
  • Access VBAを利用してCSVをインポートする方法とその問題点
  • CSVをデータベースに高速に取り込む方法について
回答を見る
  • ベストアンサー

SQLITEでCSVインポート方法

SQLITEのデータベースにCSVをインポートしたいと思っています。 ローカルにCSVファイルを配置し、サーバーに取り込む事をしたいのですが、疑問が1点。 Access VBAを利用しようと思っています。下記のサイトを参考にしています。 http://billyboy.blog81.fc2.com/blog-entry-203.html# INSERTをかければ問題なくインサートする事ができました。ただ、1万件のデータを取り込む時は1万回Insertを発行することになります。 かなり時間がかかるため、良い方法がないでしょうか? 今後はPHPとかも勉強して、PHPからも同様の事がやりたいと思っています。 CSVをデータベースに高速に取り込む方法があったらお教えください。宜しくお願いします。

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

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

SQLiteは、insert文1つに、1行のデータしか書けないので、万を超えると結構たいへんですね。 defaultではtransaction off で、1行insertの度に、ファイル書き換えが発生するのでとても遅くなります。 transaction を使うと、on memory で複数回insertして最後にcommit時にファイル書き込みしますので、格段に速くなります。rollback すると、ファイルに書き込まずにデータが破棄されます。 あまり大量の処理はしたことがないのですが、千行(500K byte)くらいならcsv読みとり時間+1Mの書き込み時間程度で出来たと思います(phpのPDO接続利用時)。万を超えると、メモリーの容量問題になってくるかもしれません。 SQL文でtransaction 実行するには以下参照。 http://net-newbie.com/sqlite/lang.html#transaction AccessVBAの方は、使ったこと無いけど、ご呈示ページの最後にtransaction利用法が載ってますね。SQLite接続の時も、BeginTrans メソッドってうまく機能してるのかな? あと、SQLite3では、完全一括実行は、コマンドラインツールでしか出来ません。 http://www.sqlite.org/ からツールをダウンロードしてインストールする必要があります。 インストール解説ページは以下 http://www.dbonline.jp/sqliteinstall/install/index1.html ツールを起動して、importコマンドを利用します。 http://www.dbonline.jp/sqlite/manage/index2.html

mellow91
質問者

お礼

>transaction を使うと、on memory で複数回insertして最後にcommit時にファイル書き込みしますので、格段に速くなります。 こんな方法があったとは知りませんでした、さっそく試してみます。 コマンドラインで一括インポートすることもできるのですね。VBAでなんらかのコードを作って、コマンドラインに渡して.importしたら何となくできそうな気もします。こちらも試してみます!ありがとうございます!

関連するQ&A

  • csvファイルのデータをSQLiteに入力したい

    PHP初心者です。 題のとおり、csvファイルのデータを、サーバー上にあるSQLiteのデータベースのテーブル内に入力したいのですが、PHPでのコードはどのようにすれば良いのでしょうか? ローカルのパソコンでSQLiteテーブルに変換してからアップロードしてもOKかと思い、tksqliteというソフトも試してみましたが、使い方がさっぱり分からず上手くいきませんでした。 どなたかお助けくださいませ。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 【ACCESS】インポート定義を使わないCSVインポート

    ACCESS VBAにてMDBにSQL文でCSVデータをINSERTしようとしています。INSERT自体はうまくいったのですが、データの型をうまくそろえられません。2日程ネットサーフィンしているものの良いサンプルを見つけられません。有識者の方、ご存知でしたら是非教えてください! まず、CSVデータは以下のようなものです。 ===aaa.csv=== 00000001,2009/1/31 00000002,2009/1/31 ・ ・ A000001,2009/1/31 Z000002,2009/1/31 ========== これを 既存テーブル:aaa_TBLに取り込ませたく、以下のSQL文を書きました。 INSERT INTO aaa_TBL(カラム1,カラム2) SELECT FORMAT([aaa#CSV].F1,'0000000'),[aaa#CSV].F2 FROM aaa#csv IN 'C:\' 'Text;HDR=NO' これにて「0000001」と「000002」等のレコードは正常に取り込むことができましたが、「A000001」「B000002」等のデータは取り込まれず、NULLにて登録されておりました。 (aaa_TBL自体はカラム1=テキスト型、カラム2=日付型でCreateされております。) これを回避したく、いろんなサイトを訪問したのですが、ほとんどがインポート定義を使った方法を推奨しておりました。 しかしながら、私にはどうしてもインポート定義が理解できないんです! 「VBAにて○○.iniを作成する方法」などをよく見かけるんですが、できるだけ他の方法を検討したいと考えております。(今後、ACCESS VBAから他言語への乗り換えを考えているとか、他CSVにてインポートされるテーブルの数が30個程あるので、インポート定義ファイルの管理がつらいな・・・とか色々他にも理由はあるんですが・・・・) 何か良い方法はないでしょうか?! やはりインポート定義を作らないとだめでしょうか?! その場合、簡単なサンプルコードなどを頂けますと非常に助かります。。。(MSサイトのサンプルコードは理解できませんでした。。。) まだVBAを勉強し始めて2週間なので、色々突っ込みどころはあると思いますが、どうぞよろしくお願いしますm(_ _)m

  • 大容量CSVのインポート方法を教えて下さい

    いつもお世話になっています。 どうしても自分で解決出来なかったので質問させて下さい、宜しくお願い致します。 ----------------------------------------------- <環境> ・さくらのレンタルサーバー ・管理ツールphpmyadminを使用 <やりたい事> ・80MB以上のCSVを一度にインポートしたい(カラム数などは一致している) <問題点> ・phpmyadminのインポートは最長: 16,384 KB ・インポート時に「SJISエンコーディングへ変換」する必要がある ----------------------------------------------------- 現状は、CSVファイルをローカルでサイズ指定分割して 細かくインポートを行っています。 ですが、毎日行う作業なのでとても不便に感じているので ツールもしくはプログラムで対処出来ないかと捜索中です。 自分の知識は、VBA&PHP&C#が触った程度。oracleSQLがまぁまぁ出来る程度です。 何か良い方法は無いでしょうか? ご教授お願い致します。 もし足りない情報があれば指摘して下さい。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • PHPの記述でSQLiteのテーブルにCSV読み

    PHPの記述で、SQLiteのテーブルにCSVをインポートする記述をご存じでしたら教えてください。 CSVは数値,文字,文字,文字という形式です。 CSVからデータを取得はできますが、テーブルに流すところが不明です。

    • ベストアンサー
    • PHP
  • EXCELからデータベース(SQLite)に登録

    EXCELの各セルのデータをデータベースに登録したいのですが、調べてもいまいちピンと来ないので質問させて頂きました。 データベースの内容を読み込んでEXCELに表示・保存させることはできたのですがEXCELからデータベースに登録する方法が解りません。 データベースからEXCELへの方法はPHP言語でCSV変換ファイルを作成しました。できれば逆もPHP言語で変換ファイルを作成したいと思っています。 適当なツール名やサンプルプログラムがあると助かります。 宜しくお願いします。 環境 OS:XP 言語:PHP5.1.6 ローカルサーバ:Apache2.0 データベース:SQLite

    • ベストアンサー
    • PHP
  • インターフェースからCSVを取り込んで、MySQLにインポート

    インターフェースからCSVを取り込んで、MySQLにインポート ブラウザのインターフェースからCSVファイルを選択して、MySQLにインポートするようにしたいのですが、 (1)ファイルのアップロード (2)サーバー上にある(アップロードされた)CSVファイルをMySQLにインポート という手順で処理するほかないでしょうか? ローカルのCSVファイルを直接MySQLにインポートするような画期的な方法(ライブラリなど)あったらいいなと思い質問します。 PHPのバージョン:5.2 MySQLのバージョン:5.1 です。 まだ基本設計の段階なので、具体的な質問になっておらず申し訳ありませんが、 よろしくお願いします。

    • 締切済み
    • PHP
  • SQLiteのテーブルデータ移行について

    SQLiteについて質問します。 よろしくお願いします。 [環境] WindowsXP pro sp3 sqlite 3.6.9 [やりたいこと] SQLiteのテーブルのデータを、別のSQLiteのデータベースに移行したい。 ただし、移行の操作はすべてコマンドプロンプト上で実行したい。 [現状] 移行したいテーブルのデータをCSV形式でアウトプット出来ています。 [困っていること] 1.移行したいテーブルのデータに改行が入っていると、インポートに失敗してしまう。 >うまくインポートできる例 1,2,"あいうえお",5,6,2011/10/21 >インポートに失敗する例 1,2,"あいう えお",5,6,2011/10/21 2.CSVの文字列データの先頭と最後尾にある「"」も一緒にインポートされてしまう。 1,2,"あいうえお",5,6,2011/10/21 このデータをインポートした場合、 1|2|あいうえお|5|6|2011/10/21 この様にインポートしたいが、 1|2|"あいうえお"|5|6|2011/10/21 この様にインポートされてしまう。

  • VBAでCSVファイルをインポートする方法について

    VBAでCSVファイルをインポートする方法について OS:ウィンドウズXP Access Version:2000 AccessVBAでcsvファイルをインポートするマクロを作っています。 現在、インポート定義を利用して、データ型を指定したインポートができているのですが、1点だけ問題があり、質問します。 インポートするcsvファイルのA列にIDが入力されています。 そのA列の末尾に、ID(数値型)ではない「<b>32</b><br />」という値が入っています。 Accessのテーブルでは、このIDのフィールドは数値型で管理している為、この1レコードだけ エラーとなり、エラーテーブルが作られ、また、インポート先のテーブルには空のレコードができてしまいます。 この末尾の行については、IDではない「<b>32</b><br />」以外は何もデータが入っていない為、 インポートする必要がありません。 もし可能であれば、csvファイルのA列(Accessテーブルでは数値型のIDというフィールド)が数値ではない場合、 その行のインポートをスキップするような処理がVBAで作成できるとよいのですが、可能でしたら教えてもらえないでしょうか。 ※以下はVBAを作成する為に仮に用意し、読込を行っているcsvファイルと、VBAソースになります。 ○csvファイル名:インポート用csvファイル.csv 内容: ID,テキスト1,テキスト2,テキスト3,テキスト4,メモ1,メモ2, 1,a,A,z,Z,あ,ん, 2,b,B,y,Y,い,を, 3,c,C,x,X,う,わ, 4,d,D,w,W,え,ろ, 5,e,E,v,V,お,れ, 6,f,F,u,U,か,る, 7,g,G,t,T,き,り, 8,h,H,s,S,く,ら, 9,i,I,r,R,け,よ, 10,j,J,q,Q,こ,ゆ, <b>32</b><br />,,,,,, ○VBAソース Dim FN As String Dim Res As Integer WizHook.Key = 51488399 Res = WizHook.GetFileName(0, "", "", "", FN, "", _ "csvファイル(*.csv)|*.csv", 0, 0, 4, True) WizHook.Key = 0 If Res = 0 Then DoCmd.TransferText , "csvインポート定義", "インポートテーブル", FN MsgBox "csvファイルをインポートしました", vbOKOnly End If

  • Access2000のCSVファイルのインポートについて

    Access2000でCSVファイルをインポートしようと思っています。 インポート方法は、VBAで 「DoCmd.TransferText acImportDelim, , "テーブル名", "ファイル名"」を使用しています。 この時に、CSVファイルが次のようなデータです。 F1,F2,F3 0010,0200,0001A12 0011,0201,0021B12 (実際は、1000件近いデータです) これをインポートすると、 F1,F2,F3 10,200,1A12 11,201,21B12 となってしまいます。 頭の「0」を省きたくないのです。 文字列として取り込めないでしょうか? CSVのデータに""を自動でつける方法はないでしょうか? Accessの外部データの取り込みを使うと、文字列として指定できるのですが、VBAを使いワンクリックでデータを取り込もうとしています。 よろしくお願いします。

  • Access2000 csvファイルのインポート

    Access2000のVBAを使用してcsvファイルを用意されたテーブルにインポートをしたいのですが、 やっかいな条件があります。 ある決められたフォルダに複数のファイルが存在している、そこから全てのCSVファイルを読み込み、3フィールド目(1行目はタイトル行)の値が「"3"」のものだけインポートする。 あるフィールドには、255文字以上のフィールド(改行文字あり)があります。このフィールドはインポートしてもしなくてもよい 今までは、インポート定義を設定してインポートしていたのですが、csvファイルを判別して、インポート前にフィールドの判別をする方法がわかりません。また、255文字以上の対応もうまくいきません。