2011-02-04 6 views
0

ジャンクデータを固定しています。私の目標は、すべてのデータをOracleデータベースにアップロードすることです。私はこれでほぼ成功しました。制御ファイルをSQL * Loader CTLファイルに変換するルートをとっており、ほとんどの場合は機能しています。アップロードDB2データ - 私は関連するDB2コントロールファイルで(7ギガバイト程度)データのDB2エクスポートを与えてきた

しかし、私は、データファイルの一部がそのデータに一致すると明らかな問題を引き起こして、データベースにロードされた列の一部にターミネータとジャンクデータが含まれて発見しました。たとえば、列には '9930027130'が含まれ、長さ(trim(col))= 14:4バイトの迷惑データが表示されます。

私の質問は、システムからこのジャンクデータを排除するための最良の方法は何か、ですか? SQL * Loaderを実行する前に、データを分析してヌル/ジャンクをスペースで置き換えるスクリプトを作成することしか考えられません。

答えて

2

、まさに、「ジャンク」のあなたの定義は何ですか?

あなたは列がデータのみの10個の文字を含める必要があることを知っている場合、たとえば、あなたがコントロールファイルにNULLIF(LENGTH(<<column>>) > 10)を追加することができます。あなたは列が数字(または英数字)をのみ含有することがわかっている場合は、カスタムデータクレンジング機能(すなわちSTRIP_NONNUMERIC)を書くことができますし、あなたの要件に応じて、すなわち

COLUMN_NAME position(1:14) CHAR "STRIP_NONNUMERIC(:LAST_NAME)", 

、制御ファイルからのことを呼んで、これらのクレンジングロジックが複雑になる可能性があります。大量のデータをロードして毎晩大量のデータをクリーンアップするデータウェアハウスでは、データを一度にロードしてクリーンアップするのではなく、一連のデータクレンジングと検証ルールが適用されるため、一連のステージングテーブルを使用してデータが移動されます。一般的なアプローチは、たとえば、SQL * Loader(または外部表)を使用してクレンジングなしですべてのデータをVARCHAR2(4000)列にロードすることです。次に、別のプロセスを使用して、データをステージングテーブルに移動します。ステージングテーブルには、変換できなかったデータ(つまり、NUMBER列の非数値データ、不可能な日付など)が適切なデータ型にNULLに変換されます。別のプロセスが実行され、ドメインルールを適用する別のステージングテーブルにデータが移動されます。社会保障番号は9桁、緯度は-90〜90桁、州コードは州のルックアップテーブルにいてください。検証の複雑さによっては、データを追加のステージング表に移動するプロセスが増え、より厳密な検証ルールのセットを適用できます。

+0

ジャンクデータは実際のデータに続く「\ 0」とランダムバイトをしました。 StipJunkData(strDat char) 戻り値 は ですbegin return substr(strDat、1、instr(strDat、chr(0)) - 1このメソッドは、 ); end; **ご協力いただきありがとうございます。 – MatthewToday

1

"の欄には、(トリム(COL))= 14の長さが表示されます、 '9930027130' を含める必要があります。ジャンク4バイトのデータを"

を奇妙な文字を決定するためにSELECT DUMP(COL)を行います。次に、それらが常に無効であるか、場合によっては有効であるか、有効であるか間違って解釈されるかどうかを決定します。

関連する問題