mongotranslate
MongoDB工具 >MongoDB BI连接器 >将关系架构映射到MongoDB > 采样类型冲突
在2.6版中进行了更改。
MongoDB的灵活模式模型允许给定字段包含多种类型的数据,而关系数据库将列限制为单一数据类型。BI Connector从MongoDB采样数据以生成关系架构模型,但是 当BI Connector从MongoDB文档中的字段采样不同的数据类型时,可能会发生类型转换冲突。
在存在多种数据类型的情况下,类型转换冲突有两种主要类型:标量类型之间的冲突以及涉及文档和数组等复合类型的冲突。
注意
BI连接器仅使用采样的数据子集来检测架构生成期间的类型冲突。如果您的数据集在字段上包含类型冲突,并且示例中没有同时存在两个冲突类型,则生成的架构将无法解决这些冲突,并且可能导致查询延迟增加。
有关采样配置的更多信息,例如设置--samplesize
和
--schemaRefreshIntervalSecs
,请参阅Schema Options。
当发生标量-标量冲突时,BI连接器将使用以下晶格来确定两种不同数据类型的最小上限:
例
如果给定字段包含int
,double
和string
类型,则最小上限为string
。
当发生标量-标量冲突时,BI Connector将在information_schema.COLUMNS
表中插入一行,并在COLUMN_COMMENT
列中列出不同的采样类型。
复合冲突是涉及文档或数组的类型转换冲突。以下各节描述BI连接器如何解决两种类型的复合冲突。
当涉及文档的冲突发生时,BI连接器会使用点符号将文档类型的字段显示为单独的列。例如,该conflict
集合包含以下文档:
BI Connector检测到标量-复合冲突,并生成以下关系架构:
表: conflict
_ID | 一个 | a | b |
---|---|---|---|
0 | “ foo” | NULL |
NULL |
1个 | NULL |
“酒吧” | “巴兹” |
当涉及文档的冲突发生时,BI连接器会在information_schema.COLUMNS
表中插入一行,并在COLUMN_COMMENT
列中列出不同的采样类型。
当发生涉及数组的冲突时,BI连接器会为冲突字段创建一个新表,并在表中包含外键,数组索引和值的列。BI Connector将数组展开为新表中的多行,并相应地填充各列。例如,该
conflict
集合包含以下文档:
BI Connector将以上内容呈现到以下两个表中:
表: conflict
_ID |
---|
0 |
1个 |
表: conflict_a
_ID | a_idx | 一个 |
---|---|---|
0 | NULL |
“ foo” |
1个 | 0 | “酒吧” |
1个 | 1个 | “巴兹” |
当涉及阵列的冲突发生时,BI连接器:
information_schema.COLUMNS
表格中插入一行,并列出该COLUMN_COMMENT
列中采样的所有不同类型information_schema.TABLES
表中插入一行,其中包含有关数组如何映射到information_schema.COLUMNS
表中行的信息