Conflitos de tipo de amostragem
Nesta página
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 os bancos de dados relacionais restringem as colunas a um único tipo de dados. O Connector BI coleta amostras de dados do MongoDB para gerar um modelo de esquema relacional, mas os conflitosde conversão de tipo podem ocorrer quando o Connector BI 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" | NULL | NULL |
1 | NULL | "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 | NULL | "foo" |
1 | 0 | "bar" |
1 | 1 | "baz" |
Quando ocorre um conflito envolvendo uma array, o BI connector:
Insere uma linha na tabela
information_schema.COLUMNS
e lista quaisquer tipos diferentes amostrados na colunaCOLUMN_COMMENT
Insere uma linha na tabela
information_schema.TABLES
contendo informações sobre como a array mapeia para a linha na tabelainformation_schema.COLUMNS