Cambiado en la versión 2.6.
El modelo de esquema flexible de MongoDB permite que un campo determinado contenga datos de varios tipos, mientras que las bases de datos relacionales restringen las columnas a un único tipo de dato. El conector BI extrae una muestra de datos de MongoDB para generar un modelo de esquema relacional, pero conversiones de tipo pueden ocurrir conflictos cuando el BI Connector muestrea diferentes tipos de datos de un campo en documentos de MongoDB.
Existen dos categorías principales de conflictos de conversión de tipos que pueden ocurrir ante la presencia de múltiples tipos de datos: conflictos entre tipos escalares y conflictos que involucran tipos compuestos como documentos y arreglos.
Nota
El BI Connector solo utiliza el subconjunto de datos muestreados para detectar conflictos de tipo durante la generación del esquema. Si tu conjunto de datos contiene conflictos de tipo en un campo y los tipos en conflicto no están ambos presentes en la muestra, el esquema generado no estará preparado para resolver esos conflictos y puede provocar un aumento en la latencia de las consultas.
Para obtener más información sobre la configuración de muestreo, como por ejemplo ajustar la --samplesize y --schemaRefreshIntervalSecs, consulte opciones de esquema.
Conflictos escalar-escalar
Cuando se produce un conflicto escalar-escalar, BI Connector utiliza la siguiente estructura en retícula para determinar el mayor límite superior de los dos tipos de datos diferentes:

Ejemplo
Si un campo determinado contiene tipos int, double y string, el límite superior mínimo es string.
Cuando ocurre un conflicto escalar-escalar, el Conector BI inserta una fila en la tabla information_schema.COLUMNS y enumera los diferentes tipos muestreados en la columna COLUMN_COMMENT.
Conflictos compuestos
Los conflictos compuestos son conflictos de conversión de tipos que involucran un documento o un arreglo. Las siguientes secciones describen cómo el BI Connector resuelve ambos tipos de conflictos compuestos.
Conflictos de documentos
Cuando se produce un conflicto relacionado con un documento, el BI Connector muestra los campos del tipo de documento como columnas separadas utilizando notación de puntos. Por ejemplo, la colección conflict contiene los siguientes documentos:
{ _id: 0, a: "foo" } // "a" is scalar (string) { _id: 1, a: { a: "bar", b: "baz" } } // "a" is composite (document)
El BI Connector detecta un conflicto entre escalar y compuesto y genera el siguiente esquema relacional:
Tabla: conflict
_id | un(a) | a.a | a.b |
|---|---|---|---|
0 | "foo" |
|
|
1 |
| "bar" | "baz" |
Cuando se produce un conflicto que involucra a un documento, el BI Connector inserta una fila en la tabla information_schema.COLUMNS y enumera los diferentes tipos muestreados en la columna COLUMN_COMMENT.
Conflictos de arreglo
Cuando se produce un conflicto que involucra un arreglo, el conector BI crea una nueva tabla para el campo de conflicto con una columna para la clave externa, el índice del arreglo y el valor. El BI Connector descompone el arreglo en varias filas en una nueva tabla y rellena las columnas en consecuencia. Por ejemplo, la colección conflict contiene los siguientes documentos:
{ _id: 0, a: "foo" } // "a" is scalar (string) { _id: 1, a: ["bar", "baz"] } // "a" is composite (array)
El BI Connector renderiza lo anterior en las siguientes dos tablas:
Tabla: conflict
_id |
|---|
0 |
1 |
Tabla: conflict_a
_id | a_idx | un(a) |
|---|---|---|
0 |
| "foo" |
1 | 0 | "bar" |
1 | 1 | "baz" |
Cuando ocurre un conflicto que involucra un arreglo, el BI Connector:
Inserta una fila en la tabla
information_schema.COLUMNSy enumera los diferentes tipos muestreados en la columnaCOLUMN_COMMENTInserta una fila en la tabla
information_schema.TABLESque contiene información sobre cómo el arreglo se asigna a la fila en la tablainformation_schema.COLUMNS