オプションのフィールドおよびレコードの指定
このタスクについて
フラット・ファイル・スキーマでオプションのフィールドまたはレコードを作成するときは、フラット・ファイル・データがどのように解析されるかを理解することが重要です。そうすれば、あいまいさを防止するようにフラット・ファイル・スキーマを設計することができます。 例えば、区切り文字で区切られているルート・ノードと 3 つの子ストリング・フィールドを持つフラット・ファイル・スキーマを作成し、子ストリング・フィールドの field1 が必須、field2 がオプション、field3 が必須だとすると、実行時に次のデータを解析する場合にスキーマの文法はあいまいになります。
A,C
このフラット・ファイル・データは次の 2 とおりに解析される可能性があります。
- field1 は A に等しく、かつ field2 は B に等しい
- field1 は A に等しく、かつ field3 は C に等しい
オプション・フィールドの後に必須フィールドを指定すると、正しく解析できないあいまいな文法が定義されます。 オプション・フィールドの後に必須レコードを指定しても、正しく解析できないあいまいな文法が定義されます。
このフラット・ファイル・スキーマを、field1 が必須、field2 がオプション、field3 がオプションという 3 つの子ストリング・フィールドを含むように再定義しても、この問題は修正されません。フラット・ファイル・データ A,C が解析されるとき、field1 が A に等しく、field2 が C に等しくなるためです。ここでもスキーマの文法はあいまいです。つまりこれは望ましい結果ではありません。望ましいのは値 C が field3 に割り当てられることです。 必須レコードの後に 2 つのオプション・レコードを指定しても、あいまいな文法が定義されます。