ファイルDB連携で質問です。テーブルと同じレイアウトのテキストファイルを読込んで

このQ&Aのポイント
  • ファイルDB連携におけるベストな手法について質問です。テーブルと同じレイアウトのテキストファイルを読み込み、同一キーの存在やデータの変更を判定して、適切なSQL文を生成する方法を教えてください。
  • DBを活かしきれていないと感じる質問者が、ファイルDB連携において最適な方法を知りたいです。MySQL4を使用し、ファイルからテーブルにデータをインポートする手法を教えてください。
  • ファイルDB連携において、テーブルと同じレイアウトのテキストファイルを読み込み、同一キーの存在やデータの変更を判定し、適切なSQL文を生成する方法を教えてください。また、ファイルの行数が多い場合に重くなりすぎることを避けるための工夫も教えていただければと思います。
回答を見る
  • ベストアンサー

ファイルDB連携で質問です。

テーブルと同じレイアウトのテキストファイルを読込んで - 同一キーが存在し、データも同一なら何もしない - 同一キーが存在し、データが変更ならUPDATE文を作成 - 同一キーが存在しなければINSERT文を作成 しファイル出力したいのですが、 どんな手法がベストでしょうか? 私の考えつく方法はどうもDBを活かしきれていない気がします。DBはMySQL4でUNIONも使えるのですが、オラクルブロンズレベルでは思いつかず参っています。 ■テーブル(ファイルレイアウト)key1,key2は複合キー key1 key2 data1   1  0   5   2  3   6 ■処理の流れ ファイルがありテーブルが存在しなければ ファイル読込でテーブルへそのままインポート ↓ ファイルがありテーブルが存在したら、 既存テーブルをリネーム後に、 ファイル読込でテーブルへそのままインポート ↓ インポートしたテーブルを全件SELECTし、 リネームしたテーブルへ1件ずつSELECTマッチ処理を行った結果によりファイルへINSERTやSELECT文を出力していく。 ファイルの行数が多いと相当重い処理になりそうで。。

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

  • ベストアンサー
noname#86752
noname#86752
回答No.1

テキストファイルの内容から考えると、そのファイルは更新されたデータではなく「全データ」が入っているように思います。 だとしたら、いちいちinsertやupdateするよりは全部インポートしたほうが早いと思います。 この類の処理でのポイントは ・更新データの内容(全データなのか、更新データだけなのかなど) ・更新データの件数 だと思います。 今回は上記条件に追加して、過去のデータを何らかの理由で保存しておく必要があるのでしょう。(リネームして云々という処理があるから・・・) 頑張ってください。

natsuyori
質問者

お礼

今回は差分又は全件ファイル->DBで整形->差分ファイルを作成という変わった処理だったのですが、DELETE、INSERTにより更新が可能ということがわかった為、なんとかなりそうです。処理のポイントを整理する事はすごく大切ということが良くわかりました。ありがとうございます。

関連するQ&A

  • DB2のファイル読込み

    DB2にinsert文を書いているファイルを読込ませて、実行させたいのですが、ORACLEで@に該当するコマンドがDB2に存在するのでしょうか?存在するなら教えてください。

  • .netでのDB連携

    ASP.netのVB.NETを勉強していて簡単なシステムを作成しています。 簡単な帳票にデータを登録したり編集、削除したりするものです。 DB接続はできたのですが、DBからデータを呼び出す表示、イベントによるDBにデータを登録、そしてDBのデータを編集、削除する方法がみえてきません。 SQLのクエリを使用して行うのでしょうか? SELECT 呼び出す列 FROMテーブル  これだけではよびだせませんでした。 すいませんが、知恵をかしてください。 DB接続を行った後、

  • DBからファイルを参照

    たとえば、サーバ上に名前が十数個書かれた一つのファイルが存在しているとします。 その情報を、同サーバにあるDB(Oracle)から参照することは可能でしょうか? やりたいことは、SQLのSELECT文で、「そのファイルを参照してその名前をWHERE句で引数として、結果を出力させる」といった感じです。 「select from * from 名簿 WHERE "サーバ上にあるファイルを参照してそこにある情報(名前)" 」 このような形です。。。不可能そうだと思いつつ、聞いてみます。 わかりづらくて申し訳ありませんが、わかる方いらっしゃいましたら よろしくお願いします。

  • TruncateしたテーブルへのInsertの遅さが気になる

    こんにちわ。 日次処理として、毎晩ワークテーブルをTruncateしてInsertしなおすというプログラムを数年前に作りました。 このプログラムはVB6、ADO、OLE DBプロバイダはOracleのものを使っています。 他のテーブルからSelectし、それを元に1レコードずつInsert文を作っては実行を繰り返す処理で正直遅いのですが、このプログラムの動作が不思議です。 日々数十万件のInsertを行っているのですが、ログを確認すると最初の2万件のInsertには40分掛かるわりに最後の2万件は5分で終わるのです。 今まで処理時間の遅さが問題になることもなく、バグもなく動いているしであまり気にしていなかったのですが、最近なぜこのような動きになるのか気になってきました。 最初も最後もSelect結果に偏りはなく、Insert文を作る処理に掛かっている時間は同じようなものかと思います。 とすると、遅いのはDBでのInsert処理か?と考えています。 レコード件数が少ないうちのInsertには時間が掛かるものなんでしょうか? だとするとそれはなぜ? 別に処理速度を速くしたいとか言うことではなく、なぜInsertの処理時間にこれほどの差が生じるのかが気になっています。 なおこのテーブルは主キー以外に索引を作っていません。 Insert文を作る際の元になるデータは論理的な単位ごとにSelectします。1回がだいたい数十件ぐらいです。 またその論理的な単位の分のデータをInsertしおわるごとにcommitしています(数十件ごとのcommitになります)。

  • FLASHとDBの連携

    いつもお世話になっております。 お聞きしたいのはFLASHとDBを連携させるときについてなのですが phpであるsqlの関数から読み出したりできるのですが sqlに接続できるような関数はありますか? 見たかんじなさそうだったので となると サーバーサイドの言語でtxtファイルを出力させて それをFLASHで読み込むという DB→サーバーサイド言語→テキストファイル(変数ファイル)出力→ フラッシュswfファイルが読み込み解析→表示 という流れになると思いますが? これでよいでしょうか? いまからそういう構造のものを作ろうと思っているのですが これがスタンダードなやりかたなのか気になったので質問させて 頂きました。 特に変数の処理が上の方式だと工夫しないといけないので DBをもっと簡単にフラッシュファイルに読み込めるなら 中でも扱いやすいだろうな・・なんて考えています。 また、DBとフラッシュを連動させる場合の DB→フラッシュのデータ(レコード)の受け渡しについて なにか注意すべき点、工夫があれば教えていただきたいです。 よろしくお願いします。

  • レコードセットの値を一気にDBに

    access2007で開発しています。 レコードセットのデータをDBのテーブルに一気にいれる方法はないのでしょうか? 調べたところレコードセットをMOVENEXTで一件ずつ読込み、インサート文をなげている例はあったのですが、一気にいれる方法は見当たりませんでした。 さらにいうと元々はSQLで insert into テーブル1(・・・) select ・・・from テーブル2 としたかったのですが、executeすると´3065´選択クエリを実行できません´のエラーとなってしまいました。 すいませんが、ご教唆ねがいます。

  • 別のDB(Table)からの複数行のINSERT

    Wordpressにあるusermetaというテーブルに、 別のDBのテーブルからデータをINSERTしたいのですが、 #1241 - Operand should contain 1 column(s) というエラーが表示されてうまくいきませんでした。 具体的なSQL文は、 insert into ***_usermeta (umeta_id,user_id,meta_key,meta_value) select (null,tableBid,'first_name',''), (null,tableBid,'last_name',''), (null,tableBid,'nickname',tableBname), (null,tableBid,'***_capabilities','a:1:{s:10:\"subscriber\";b:1;}'), (null,tableBid,'***_user_level','0') from dbB.tableB where tableBname<> 'Admin' dbBのtableB にあるAdmin行以外を対象としています。 実際にはもう少しデータが多いのですが、select (null,uid,'first_name','') from ・・・ だけにしても同じエラーが出ましたので、構文の書き方が間違っていると感じています。 (別のDBではなく、同じDBの別のTableからのINSERTでも同じエラーが表示されました) 上記のようなケースの場合、どのようにSQL文を書けばよいのでしょうか? お分かりになられる方がいらっしゃいましたら、ご教示頂けますと幸いです。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • accessとオラクルの連携について

    お世話になります。アクセスでテーブルのデータをSQL文で取得し、 そのデータをオラクルのテーブルにinsertしたいと思ってます。 ただ、フィールドの数が40個もあるので insert into ・・・・Fields(0),Fields(1)・・・・ と記述するのはかなり面倒なので何かいい方法はないでしょうか よろしくお願いします。 なお、access側とオラクル側のテーブルは同じ型です。 ’ローカルテーブルのデータを取得 rec.Open "select * from tesuto", cnn ’取得したデータをinsertする Do Until rec.EOF sql= insert into value(Fields(0),Fields(1),・・・ rec1.Open "select * from tesuto1", cnn1 Loop

  • CSVファイルをアクセスのテーブルに出力する

    こんにちは Access VBA初心者です。 やりたい処理なのですが CSVファイルをmdb内であらかじめ作成されているテーブルに出力したいのですが、 最初にTransferTextwでワークのテーブルにインポートして そのワークテーブルを1レコードずつ読み込みmdbのあらかじめ作成されているテーブルにINSERTしていくという方法しか今思いつきません。 インポートするとワークテーブルはすべてテキスト型になっていますが、 それを違う型の項目にINSERTするということなど可能なのでしょうか? それとももっとスマートな方法があるのでしょうか? ざっくりと書いてしまいましたが、よろしくお願いいたします。

  • DBとHTMLファイルを検索したい

    PHP+MYSQLででDBの検索機能を作成しました。 現在問題なく動くのですが、DBだけでなくHTMLファイルに書かれた文字列の検索も一緒にできるように改造したいのです。 例えば検索条件1が山田、検索条件2が太郎として、 テーブルに[山田]、HTMLファイルに[太郎]があるものを検索結果としてヒットさせたいです。 テーブルのデータとHTMLファイルを結ぶ条件としてテーブルにID項目があり、例えばIDが1234だったら1234.htmlというファイルが必ず1つだけ存在します。 データの数は現在30程度ですが、今後増え続けます。 HTMLファイルは大体20kbほどあります。 ヒットしたデータのIDと同じ名前のHTMLファイルを1つ1つstrrposを使って調べるとなるとやはり処理は重くなりますか? ちょっと説明がわかりにくいかもしれませんが、何か良い方法はないでしょうか。 アドバイスお願いします。

    • 締切済み
    • PHP