複数のCSVファイルを一括インポートする方法について

このQ&Aのポイント
  • 複数のCSVファイルを一度に複数のテーブルにインポートする方法についてわからず困っています。
  • 毎日同じ量のデータをインポートする必要があるため、2000ファイルを1つにまとめて1つのテーブルにインポートする方法では取得時間が長くなる可能性があります。
  • ファイル名などの固有の情報を付加して連結し、1つのファイルにしてからインポートする方法を考えています。
回答を見る
  • ベストアンサー

複数のCSVファイルの一括インポートについて

CSVファイルをインポートしたいと思っているのですが、 複数のファイルをいっぺんに複数のテーブルにインポートする方法が わからず困っています。200行8列の2000ファイルを、 テーブル1,テーブル2,テーブル3・・・・テーブル2000にそれぞれ 1ファイルずつを一回のSQL文でインポートするやり方です。 毎日ほぼ同じ量のデータをインポートする必要がありますので、 2000ファイルをファイル名などの固有の情報を付加し連結して、 1ファイルにしてしまい、1テーブルにインポートする方法だと SELECT文をかけたときに取得する時間がとてもかかってしまうような 気がしますので、、、

  • MySQL
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

CSVをINSERTタイプのSQL文にコンバートするプログラムを用意して バルクインサートするのがもっとも効率的だとおもいます

siryou
質問者

お礼

ありがとうございました。

関連するQ&A

  • CSV fileを指定してSQLへimport

    現在どうにかしてCSV fileのある一定の行と列を除いて SQLへimport出来ないかと困っています。 内容は: Excelで記入欄を作り他の人に記入してもらい 記入欄に記入してもらった情報を 反映させたいSQLのテーブル反映させたい。 環境 Win全般 dbisql Notepadに書いたtest-sql構文です --## test-import insert into test.test_def(obj_num, name_1, name_2, etc_1, etc_2) --##ここで指定したいSQLテーブルを指定し LOAD DATA INFILE 'd:\\test\\test.csv' --##ここで読み込ませたいCSVファイルを指定し FIELDS TERMINATED BY ',', LINES TERMINATED BY '\r\n' --##ここでCSVの形式を認識させ with(a,"b" filler, ・・・・と この辺で行き詰っています。。。 列1と行Aには入力してもらいたい説明を入力したいです。 (importしたくない列と行になります) 列2以降の行Bから行Gまでの5つの情報をimportしたいという状況です。 (列3、列4と次々B、C、D、E、F、Gに入力してもらう) 状況が解り難かったらすみません。 よろしくお願いします。

  • 複数CSVファイルを一括インポート

    お世話になります ■概要 Accessのボタンで複数のCSVファイルを一括にひとつのテーブルにインポートさせたいのですが ■内容 テキストボックス、参照ボタン、実行ボタンをフォーム上に設置 参照ボタンでダイアログボックスを表示させCSV複数選択し 選択内容がテキストへ反映。 実行ボタンで選択された複数CSVをインポートさせたいです 少し難しいと思いますが、わかる方ご教授よろしくお願い致します。

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

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

  • テーブルにcsvファイルをインポートできない

    かなり困っています。REDHAT LINUXでpostgresのテーブルにpsqlからのCOPYコマンドでcsvファイルのデータをインポートしようとしているのですが、文字数オーバーのエラーがでてしまいます。テーブルは2列で1つ目の列はCHAR(10)で2列目はINT4型です。csvファイルの内容はとりあえず1行だけ入れていて「"1234567890","1234"」を入れています。コマンドはpsqlで「COPY テーブル FROM 'ファイルのパス' USING DELIMITER ","」で行いました。エラーはおそらくインポートしたデータがおかしくなって変な桁数になっているのですが、どういうふうにおかしくなっているのかがよくわからないので対策できません。

  • 複数のCSVファイルををインポートできない

    はじめまして。 複数のCSVファイルを同時にDBにいれるやり方をネットで見つけましたが、うまくできません。SQL2008とSQL2005両方です。 http://www.databasejournal.com/features/mssql/article.php/3325701/Import-multiple-Files-to-SQL-Server-using-T-SQL.htm 手順は以下の通りです。 1.'xp_cmdshell'を動かす権限を付与 EXEC sp_configure 'show advanced options', 1 GO options. RECONFIGURE GO EXEC sp_configure 'xp_cmdshell', 1 GO RECONFIGURE GO 2.URLにあるBankのDBを作成、accountテーブルも作成。 HPの乗ってるSQLを動かして作成しました。CSVファイルもHPに出て るようにテキストエディタで作成しました。 3.usp_ImportMultipleFiles とusp_ImportMultipleFilesBCP のスト アドを作成。ここまではノーミスというかエラーはありません。 4.ストアドを実行:以下のストアドを実行するとエラー Exec usp_ImportMultipleFiles 'c:\myimport\', '*.csv', 'Account' 以下、エラーです。 (3 行処理されました) (1 行処理されました) (2 行処理されました) メッセージ 102、レベル 15、状態 1、行 2 ',' 付近に不適切な構文があります。 (1 行処理されました) メッセージ 102、レベル 15、状態 1、行 2 ',' 付近に不適切な構文があります。 (1 行処理されました) (1 行処理されました) 以下も同じでした。 Exec usp_ImportMultipleFiles 'c:\myimport\', '*.*', 'Account' 5.あきらめてBCPのほうを試しました。 Exec usp_ImportMultipleFilesBCP 'マシン名','Bank','c:\Myimport\','*.csv','Account' エラーはでませんが、accountテーブルをみても何もデータがありません。空のままです。logfileを見てもエラーはなくBCPのパラメータが記載されてます。 以下も同様です。 Exec usp_ImportMultipleFilesBCP 'マシン名','Bank','c:\Myimport\','*.*','Account' うまく複数のCSVを同時に連結して読み込むのはできないでしょうか?

  • DB2でのcsvファイルのインポート

    今、IBM DB2 for Windowsを扱っているのですが、 csvファイルのインポートが良くわかりません。 csv形式で保存されているファイルがあるのですが、 そのファイルを元にテーブルを作りたいんです。 SQL以外で、何か簡単にできる方法は無いのでしょうか? また、やり方を解説しているページがあれば教えてください。 お願いします。

  • CSVファイルインポート時の制限について

    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で作成できるとよいのですが、可能でしたら教えてください。

  • SQL*LoaderでCSVから指定した列のみインポートしたい。

    SQL*Loaderを用いてOracleのテーブルにデータを格納 しようと思っています。 格納するデータはカンマ区切りのCSVファイルです。 入力CSVファイルは他テーブル用のファイルなので、 ローダーで落とし込むテーブルとは列数が異なります。 ですので、「CSVの5列目の値をテーブルのAA_NOというフィールドに 格納する。ということが可能なのでしょうか?」 CSVファイルのある行が a,b,c,d,e,f というデータの場合、テーブルには a,e,f とインポートしたいのです。 よろしくお願いします。

  • SQLSever 一括インポートについて

    SQLserver で大量にあるCSVファイルをインポートしたいのですが コードが分かりません。 各Csvファイルには1行目に列名が書かれており、全て同じ構成となっております。 MSDNで調べて下記コードを見つけたのですがうまく起動しません。 「列名 'IntCol' が無効です。」と出てしまいます。 ------------------------------------------------------------ -- Query before update shows initial state of XmlCol values. SELECT * FROM T UPDATE T SET XmlCol =( SELECT * FROM OPENROWSET( BULK 'C:\SampleFolder\SampleData3.txt', SINGLE_BLOB ) AS x ) WHERE IntCol = 1 GO ------------------------------------------------------------ 単純に 「同じ構成の複数あるcsvファイルを1つのテーブルにインポートする」 というコードなのですが、どうやればよいのでしょうか?

  • 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