Alterado na versão 2.6.:
O modelo de esquema flexível do MongoDB permite que um determinado campo contenha dados de vários tipos, enquanto o relational database restringem as colunas a um único tipo de dados. O BI Connector coleta amostras de dados do MongoDB para gerar um modelo de esquema relacional, mas podem ocorrer conflitos de conversão de tipos quando o BI Connector coleta amostras de diferentes tipos de dados de um campo em documentos do MongoDB.
Existem duas categorias principais de conflitos de conversão de tipo que podem ocorrer na presença de vários tipos de dados: conflitos entre tipos escalares e conflitos envolvendo tipos compostos, como documentos e arrays.
Observação
O BI Connector usa somente o subconjunto de amostra de seus dados para detectar conflitos de tipo durante a geração de esquema. Se o seu conjunto de dados contiver conflitos de tipo em um campo e os tipos conflitantes não estiverem presentes na amostra, o esquema gerado não estará preparado para resolver esses conflitos e poderá resultar no aumento da latência da query.
Para obter mais informações sobre a configuração de amostragem, como definir --samplesize e --schemaRefreshIntervalSecs, consulte Opções de esquema.
Conflitos escalar-escalar
Quando ocorre um conflito escalar-scalar, o BI Connector usa a seguinte rede para determinar o menor limite superior dos dois tipos de dados diferentes:

Exemplo
Se um determinado campo contiver tipos int, double e string , o limite superior pelo menos será string.
Quando ocorre um conflito escalar-scalar, o BI Connector insere uma linha na tabela information_schema.COLUMNS e lista os diferentes tipos de amostra na coluna COLUMN_COMMENT .
Conflitos de composição
Conflitos compostos são conflitos de conversão de tipo envolvendo um documento ou uma array. As seções a seguir descrevem como o BI Connector resolve os dois tipos de conflitos compostos.
Conflitos de documento
Quando ocorre um conflito envolvendo um documento, o BI Connector exibe os campo do tipo de documento como colunas separadas usando notação de ponto. Por exemplo, a coleção conflict contém os seguintes documentos:
{ _id: 0, a: "foo" } // "a" is scalar (string) { _id: 1, a: { a: "bar", b: "baz" } } // "a" is composite (document)
O BI Connector detecta um conflito escalar-composto e gera o seguinte esquema relacional:
Tabela: conflict
_id | uma | aa | ab |
|---|---|---|---|
0 | "foo" |
|
|
1 |
| "bar" | "baz" |
Quando ocorre um conflito envolvendo um documento, o BI Connector insere uma linha na tabela information_schema.COLUMNS e lista os diferentes tipos de amostra na coluna COLUMN_COMMENT .
Conflitos de array
Quando ocorre um conflito envolvendo uma array, o BI Connector cria uma nova tabela para o campo de conflito com uma coluna para a chave estrangeira, índice de array e valor. O BI Connector desenrola a array em várias linhas na nova tabela e preenche as colunas adequadamente. Por exemplo, a collection conflict contém o seguinte documento:
{ _id: 0, a: "foo" } // "a" is scalar (string) { _id: 1, a: ["bar", "baz"] } // "a" is composite (array)
O BI Connector renderiza os itens acima nas duas tabelas a seguir:
Tabela: conflict
_id |
|---|
0 |
1 |
Tabela: conflict_a
_id | a_idx | uma |
|---|---|---|
0 |
| "foo" |
1 | 0 | "bar" |
1 | 1 | "baz" |
Quando ocorre um conflito envolvendo uma array, o BI connector:
Insere uma linha na tabela
information_schema.COLUMNSe lista quaisquer tipos diferentes amostrados na colunaCOLUMN_COMMENTInsere uma linha na tabela
information_schema.TABLEScontendo informações sobre como a array mapeia para a linha na tabelainformation_schema.COLUMNS