サンプリング型の競合
項目一覧
バージョン 2.6 で変更。
MongoDB の柔軟なスキーマ モデルにより、特定のフィールドに複数のタイプのデータを含めることができますが、関係データベースでは列が 1 つのデータ型に制限されます。 BI Connector は MongoDB からデータをサンプリングしてリレーショナル スキーマモデルを生成しますが、BI Connector が MongoDB ドキュメントのフィールドから異なるデータ型をサンプリングすると、 型変換の競合が発生する可能性があります。
複数のデータ型がある場合に発生する可能性のある型変換競合には、スカラー型間の競合と、ドキュメントや配列などの複合型に関係する競合の 2 つの主要なカテゴリがあります。
注意
BI Connector は、データのサンプリングされたサブセットのみを使用して、スキーマ生成中に型の競合を検出します。 データセットにフィールドで型の競合が含まれており、競合する型がサンプルに両方とも存在しなかった場合、生成されたスキーマはこれらの競合を解決するために準備されず、クエリ レイテンシが増加する可能性があります。
--samplesize
や--schemaRefreshIntervalSecs
の設定など、サンプリング構成の詳細については、「スキーマ オプション 」を参照してください。
スカラーとスカラーの競合
スカラーとスカラーの競合が発生すると、BI Connector は次のラッチを使用して、2 つの異なるデータ型の最小上限を決定します。
例
特定のフィールドにint
、 double
、 string
型が含まれている場合、最小上限はstring
です。
スカラーとスカラーの競合が発生すると、BI Connector はinformation_schema.COLUMNS
テーブルに 行を挿入し、 COLUMN_COMMENT
列にさまざまなサンプリングされた型を一覧表示します。
複合競合
複合競合とは、ドキュメントまたは配列に関係する型変換の競合です。 次のセクションでは、BI Connector が両方のタイプの複合競合を解決する方法について説明します。
ドキュメントの競合
ドキュメントを含む競合が発生した場合、BI Connector は ドット表記 を使用してドキュメント型のフィールドを個別の列として表示します。 たとえば、 conflict
コレクションには次のドキュメントが含まれています。
{ _id: 0, a: "foo" } // "a" is scalar (string) { _id: 1, a: { a: "bar", b: "baz" } } // "a" is composite (document)
BI Connector は、スカラー複合サイトの競合を検出し、次のリレーショナル スキーマを生成します。
表: conflict
_id | a | a.a | a.b |
---|---|---|---|
0 | "foo" | NULL | NULL |
1 | NULL | "bar" | "baz" |
ドキュメントに関連する競合が発生した場合、BI Connector はinformation_schema.COLUMNS
テーブルに 行を挿入し、 COLUMN_COMMENT
列にさまざまなサンプリングされたタイプを一覧表示します。
配列の競合
配列に関連する競合が発生した場合、BI Connector は競合フィールドに、外部キー、配列インデックス、および値の列を持つ新しいテーブルを作成します。 BI Connector は、 配列を新しいテーブルの複数行に展開し、それに応じて列に入力します。 たとえば、 conflict
コレクションには次のドキュメントが含まれています。
{ _id: 0, a: "foo" } // "a" is scalar (string) { _id: 1, a: ["bar", "baz"] } // "a" is composite (array)
BI Connector は上記を次の 2 つのテーブルにレンダリングします。
表: conflict
_id |
---|
0 |
1 |
表: conflict_a
_id | a_idx | a |
---|---|---|
0 | NULL | "foo" |
1 | 0 | "bar" |
1 | 1 | "baz" |
配列に関連する競合が発生した場合、BI Connector は次の処理を実行します。
information_schema.COLUMNS
表に行を挿入し、COLUMN_COMMENT
列でサンプリングされたさまざまなタイプを一覧表示します配列が
information_schema.COLUMNS
テーブルの行にどのようにマッピングされるかに関する情報をinformation_schema.TABLES
テーブルに挿入します