Docs 菜单
Docs 主页
/
BI Connector
/

采样类型冲突

在此页面上

  • 标量-标量冲突
  • 复合冲突

在 2.6 版本中进行了更改

MongoDB 灵活的模式模型允许给定字段包含多种类型的数据,而关系数据库将列限制为单一数据类型。 BI Connector 从 MongoDB 中采样数据以生成关系模式模型,但当 BI Connector 从 MongoDB 文档中的字段中采样不同数据类型时,可能会发生类型转换冲突。

存在多种数据类型时,可能会出现两种主要类型的类型转换冲突:标量类型之间的冲突以及涉及文档和数组等复合类型的冲突。

注意

发生标量-标量冲突时,BI Connector 使用以下格子来确定两种不同数据类型的最小上界:

标量-标量类型点阵
点击放大

例子

如果给定字段包含intdoublestring类型,则最小上界为string

发生标量-标量冲突时,BI Connector 会在information_schema.COLUMNS表中插入一行,并在COLUMN_COMMENT列中列出不同的采样类型。

复合冲突是指涉及文档或数组的类型转换冲突。 以下部分描述了 BI Connector 如何解决这两类复合冲突。

当发生涉及文档的冲突时,BI Connector 将文档类型的字段显示为使用点表示法的单独列。 例如, conflict collection 包含以下文档:

{ _id: 0, a: "foo" } // "a" is scalar (string)
{ _id: 1, a: { a: "bar", b: "baz" } } // "a" is composite (document)

BI Connector 检测到标量-复合冲突并生成以下关系模式:

表: conflict

_id
aa
ab
0
"foo"
NULL
NULL
1
NULL
"bar"
"baz"

当发生涉及文档的冲突时,BI Connector 会在information_schema.COLUMNS表中插入一行,并在COLUMN_COMMENT列中列出不同的采样类型。

当发生涉及数组的冲突时,BI Connector 会为冲突字段创建一个新表,其中包含用于外键、数组索引和值的列。 BI Connector 将数组展开为新表中的多行,并相应地填充各列。 例如, conflict collection 包含以下文档:

{ _id: 0, a: "foo" } // "a" is scalar (string)
{ _id: 1, a: ["bar", "baz"] } // "a" is composite (array)

BI Connector 将上述内容呈现为以下两个表:

表: conflict

_id
0
1

表: conflict_a

_id
a_idx
0
NULL
"foo"
1
0
"bar"
1
1
"baz"

当发生涉及数组的冲突时,BI Connector 会:

  • information_schema.COLUMNS表中插入一行,并在COLUMN_COMMENT列中列出采样的所有不同类型

  • information_schema.TABLES表中插入一行,其中包含有关数组如何映射到information_schema.COLUMNS表中的行的信息

后退

地理空间数据