残念ながら動的な列構造を持つフラット ファイルがあります。値の階層に値があり、階層内の各層には独自の列があります。たとえば、フラット ファイルは次のようになります。
StatisticID|FileId|Tier0ObjectId|Tier1ObjectId|Tier2ObjectId|Tier3ObjectId|Status
1234|7890|abcd|efgh|ijkl|mnop|Pending
...
翌日の同じフィードは次のようになります。
StatisticID|FileId|Tier0ObjectId|Tier1ObjectId|Tier2ObjectId|Status
1234|7890|abcd|efgh|ijkl|Complete
...
問題は、私はすべての層についてあまり気にしないということです。最後の (下の) 層の ID と、層の列の一部ではない他のすべての行データのみを気にします。リレーショナル データベースに挿入するには、フィードをこれに似たものに正規化する必要があります。
StatisticID|FileId|ObjectId|Status
1234|7890|ijkl|Complete
...
最後の層のオブジェクト ID を決定し、説明されているようにデータを編成するための効率的で読みやすいメカニズムは何でしょうか? 私が行ったすべての試みは、私には不器用に感じます。
私がやったことのいくつか:
- 正規表現パターンの列名を調べ、階層化された列を特定し、名前の降順で並べ替え、最初のレコードを選択しようとしました...しかし、この方法で序数の列番号を失うため、見えませんでした良い。
- 参照するオブジェクトに必要な列を配置しました
IDictionary<string, int>
が、動的列の序数を確実に収集することは問題であり、これはかなり非パフォーマンスになるようです。