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 BI Connector amostras de dados do MongoDB para gerar um modelo de esquema relacional, mas os conflitosde conversão de tipo podem ocorrer quando o BI Connector 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