1

ややきしむ OLTP の DW を作成しています。

私が直面している問題は、OLTP データベースにあまりデータの整合性がないことです。例として、郊外のフィールドがあります。

この郊外フィールドは OLTP UI のフリー テキスト フィールドです。つまり、フィールドに値があり、さらに空の文字列と NULL 値があります。

通常、これをどのように処理しますか?私が思いついたシナリオは次のとおりです。

  1. データをそのままインポートする (理想的ではない)
  2. 私の ETL プロセスでは、空の文字列を NULL と同じように扱い、DW で「不明」という単語に置き換えます。
  3. 空の文字列と NULL の両方を空の文字列として DW にインポートします

参考までに、Microsoft BI スタック (SQL Server、SSIS、SSAS、SSRS) を使用しています。

4

2 に答える 2

4

NULL簡単に言えば、ソース システムで空の文字列が何を意味するかによって異なります。

この一般的な質問 (処理) は、ここここここNULLなどでよく議論されています。覚えておくべき最も重要な点は、データ ウェアハウスは単なるデータベースであるということです。非常に特殊なタイプのスキーマを持ち、1 つの目的のために設計されている場合もありますが、それでも単なるデータベースであり、一般的なアドバイスが適用されます。NULL

(ちなみに、私は時々、「データ ウェアハウス」よりも「レポート データベース」について話したいと思います。なぜなら、それは物事を大局的に捉えるためです。DBA や開発者の中には、巨大なサーバー ファームや複数年にわたる ETL プロジェクトの計画を立て始める人もいます。彼らは「データ ウェアハウス」という言葉を聞くとすぐに理解しますが、最終的には単なるレポート データベースです)。

とにかく、どこで使用したいかは完全には明らかではありませんがNULL、ディメンションの属性のようです。

私は(おそらく)あなたの3つのアプローチのいずれも使用しませんが、それはあなたのデータの意味に依存します. データをそのままインポートすることは有用ではありません。データ ウェアハウスの価値の一部は、データがクリーンアップされ、一貫性があることにあります。これにより、他のディメンションに沿ったデータのクエリと比較がはるかに簡単になります。

空の文字列を「不明」に置き換えることは正しい場合と正しくない場合があります。ソース システムで空の文字列は何を意味しますか? 「郊外がないということ」と「郊外があるかどうかわからないということ」には大きな違いがあります。空の文字列が「郊外なし」を意味し、「不明」を意味すると仮定すると、空の文字NULL列をそのままインポートしますが、NULL「不明」に置き換えます。これを行う主な理由は、Suburb フィールドがレポートのフィルター条件として使用される場合、ユーザー (および場合によってはレポート ツール) が非フィールドを操作しやすくなるためです。NULL「UNKNOWN」のような値。また、ソース システムに一貫性がなく、空の文字列と NULL の意味がわからない場合は、最初にそれを明確にし、理想的にはソース システムも修正する必要があります (DWH のもう 1 つの利点は、矛盾を特定するのに役立つことです)およびソース システムでのデータ処理エラー)。

NULLs を空の文字列に変換するというあなたの最後のアイデアも同じ問題です:NULLソース システムで a は実際には何を意味するのでしょうか? 「郊外ではない」という意味なら空の文字列に置き換えるのがおそらく良い考えですが、それ以外の意味なら別のものとして扱うべきです。

要約すると、私の好みは空の文字列をそのままインポートし、NULL「UNKNOWN」に変換することですが、これが実際にあなたの場合に意味があるかどうかはわかりません。すべては特定のデータとその意味に依存するため、この質問に対する単一の答えはありません。ただしNULL、データ ウェアハウス (またはその他のデータベース) で使用しても、ソース システムがデータを処理する方法を明確に理解して一貫して使用する限り、問題はありません。

于 2013-04-18T14:23:13.537 に答える
1

意味的には、NULL は通常、未定義/不明を意味します。一方、"" 空の文字列は、値が空であることがわかっていることを意味します。郊外の例では、 NULL は、指定されたレコードに郊外があるかどうかがわからないことを意味し、 "" は、指定されたレコードに郊外がないことを意味する可能性があります。

状況で NULL と "" の意味が同じである場合は、DW にインポートする前に両方の値を同じもの ("" など) に正規化して、後でレポートを作成しやすくすることをお勧めします (NULL = を持たないようにするため)。 50 と "" = 34 であり、それらを合計する必要があります)。

于 2013-04-18T03:22:27.627 に答える