NULL
簡単に言えば、ソース システムで空の文字列が何を意味するかによって異なります。
この一般的な質問 (処理) は、ここ、ここ、ここNULL
などでよく議論されています。覚えておくべき最も重要な点は、データ ウェアハウスは単なるデータベースであるということです。非常に特殊なタイプのスキーマを持ち、1 つの目的のために設計されている場合もありますが、それでも単なるデータベースであり、一般的なアドバイスが適用されます。NULL
(ちなみに、私は時々、「データ ウェアハウス」よりも「レポート データベース」について話したいと思います。なぜなら、それは物事を大局的に捉えるためです。DBA や開発者の中には、巨大なサーバー ファームや複数年にわたる ETL プロジェクトの計画を立て始める人もいます。彼らは「データ ウェアハウス」という言葉を聞くとすぐに理解しますが、最終的には単なるレポート データベースです)。
とにかく、どこで使用したいかは完全には明らかではありませんがNULL
、ディメンションの属性のようです。
私は(おそらく)あなたの3つのアプローチのいずれも使用しませんが、それはあなたのデータの意味に依存します. データをそのままインポートすることは有用ではありません。データ ウェアハウスの価値の一部は、データがクリーンアップされ、一貫性があることにあります。これにより、他のディメンションに沿ったデータのクエリと比較がはるかに簡単になります。
空の文字列を「不明」に置き換えることは正しい場合と正しくない場合があります。ソース システムで空の文字列は何を意味しますか? 「郊外がないということ」と「郊外があるかどうかわからないということ」には大きな違いがあります。空の文字列が「郊外なし」を意味し、「不明」を意味すると仮定すると、空の文字NULL
列をそのままインポートしますが、NULL
「不明」に置き換えます。これを行う主な理由は、Suburb フィールドがレポートのフィルター条件として使用される場合、ユーザー (および場合によってはレポート ツール) が非フィールドを操作しやすくなるためです。NULL
「UNKNOWN」のような値。また、ソース システムに一貫性がなく、空の文字列と NULL の意味がわからない場合は、最初にそれを明確にし、理想的にはソース システムも修正する必要があります (DWH のもう 1 つの利点は、矛盾を特定するのに役立つことです)およびソース システムでのデータ処理エラー)。
NULL
s を空の文字列に変換するというあなたの最後のアイデアも同じ問題です:NULL
ソース システムで a は実際には何を意味するのでしょうか? 「郊外ではない」という意味なら空の文字列に置き換えるのがおそらく良い考えですが、それ以外の意味なら別のものとして扱うべきです。
要約すると、私の好みは空の文字列をそのままインポートし、NULL
「UNKNOWN」に変換することですが、これが実際にあなたの場合に意味があるかどうかはわかりません。すべては特定のデータとその意味に依存するため、この質問に対する単一の答えはありません。ただしNULL
、データ ウェアハウス (またはその他のデータベース) で使用しても、ソース システムがデータを処理する方法を明確に理解して一貫して使用する限り、問題はありません。