2

非常に便利なので外部テーブルを使用してcsvファイルをロードしたいのですが、同じファイルを2回続けてロードしないようにするにはどうすればよいですか? 以前と同じ情報である可能性があるため、ロードされたデータを検証できません。たとえば、ユーザーが2時間前と同じファイルをロードしないようにする方法を見つける必要があります。毎回別の名前でファイルをアップロードして、alter table コマンドを発行して外部テーブルの定義でファイルの名前を変更することも考えましたが、ちょっと危険に思えます。また、ファイルを区別するのに役立つシーケンスでファイルの各行をマークすることも考えましたが、手動でこれを行う必要があるため、クライアントがそれを受け入れるとは思えません (ファイルはどこかからエクスポートされます)。

ファイルの名前を変更してテーブルで変更を実行する以外に、外部テーブルに同じファイルをロードしないようにするより良い方法はありますか?

ありがとうございました

4

2 に答える 2

0

私はこのような解決策しか考えられません:

  1. データファイル名にタイムスタンプをエンコードします (例: YYYYMMDDHHMISS-file.csv)。YYYYMMDDHHMISS はタイムスタンプです。
  2. タイムスタンプ フィールドを持つテーブルを作成します (上記のように)。
  3. 次のようなシェル スクリプトを作成します。
    • データファイル名からタイムスタンプを抽出します。
    • タイムスタンプをパラメーターとして sqlscript を呼び出し、そのタイムスタンプが存在しない場合は 0 を返し、タイムスタンプが既に存在する場合は <>0 を返します。その場合、次のエラーでスクリプトを終了します: File: YYYYMMDDHHMISS-file.csv already loaded.
    • YYYYMMDDDHHMISS-file.csv を input-file.csv にコピーします。
    • input-file.csv ファイルをロードする SQL ローダー スクリプトを実行します。
    • 成功した場合: データベースにレコードを挿入するパラメータ タイムスタンプを指定して 2 番目の SQL スクリプトを実行し、ファイルが読み込まれたことを示し、元のファイルをバックアップ フォルダに移動します。
    • 失敗時: ロード スクリプトの失敗を報告します。
于 2016-12-07T01:51:43.317 に答える