Docs Menu
Docs Home
/ /

Lenguaje de definición relacional de documentos

Lenguaje de definición relacional de documentos (DRDL) define una vista relacional de un esquema MongoDB.

mongodrdl toma muestras de documentos de sus colecciones de MongoDB y deriva un DRDL archivo de esos documentos. luego utiliza el esquema definido enmongosqld los DRDL archivos para permitir que los clientes MySQL consulten sus datos de MongoDB.

El DRDL archivo enumera sus bases de datos, tablas y columnas en YAML formato.

schema:
- db: <database name>
tables:
- table: <SQL table name>
collection: <MongoDB collection name>
pipeline:
- <optional pipeline elements>
columns:
- Name: <MongoDB field name>
MongoType: <MongoDB field type>
SqlName: <mapped SQL column name>
SqlType: <mapped SQL column type>

Dados documentos de la siguiente forma en la colección abc en la base de datos test:

{
"_id": ObjectId(),
"close": 7.45,
"detail": { "a": 2, "b": 3 }
}

Ejecute para generar un esquema basado en esta mongodrdl colección:

mongodrdl -d test -c abc -o schema.drdl

El archivo de esquema generado (schema.drdl) se parece al siguiente:

schema:
- db: test
tables:
- table: abc
collection: abc
pipeline: []
columns:
- Name: _id
MongoType: bson.ObjectId
SqlName: _id
SqlType: varchar
- Name: close
MongoType: float64
SqlName: close
SqlType: numeric
- Name: detail.a
MongoType: float64
SqlName: detail.a
SqlType: numeric
- Name: detail.b
MongoType: float64
SqlName: detail.b
SqlType: numeric

El Conector de BI asigna campos que siempre contienen el mismo tipo de datos al modelo relacional. La generación de esquemas se centra en los siguientes casos:

Numeric

BI Connector utiliza el tipo numérico más preciso que coincide con los documentos muestreados.

Si un campo de una colección siempre tiene el mismo tipo de datos, BI Connector utiliza ese tipo.

Si un campo de una colección puede contener valores de punto flotante o números enteros, BI Connector utiliza el tipo numeric.

Fechas

BI Connector trata cualquier campo de tipo data_date como el timestamp tipo SQL.

Marcas de tiempo

BI Connector ignora cualquier campo de tipo data_timestamp.

ObjectID

BI Connector trata cualquier campo de tipo data_oid como el tipo SQL varchar.

UUID

BI Connector trata cualquier campo de tipo UUID como el tipo SQL varchar.

Geoespacial

Si una colección contiene un índice geoespacial, BI Connector asigna el campo indexado a una matriz de coordenadas numéricas de longitud y latitud.

Consulte Datos geoespaciales para ver un ejemplo.

BI Connector no reconoce los campos geoespaciales al leer de una vista.

Campos heterogéneos

Si un campo contiene tipos inconsistentes, BI Connector elige el tipo que se muestrea con mayor frecuencia.

Si un campo puede contener un tipo o una matriz de ese tipo, el esquema generado siempre especifica que el campo contiene una matriz.

Para obtener más información, consulte ¿Cómo puedo omitir datos incompatibles con mi definición de tipo DRDL?.

BI Connector asigna documentos incrustados a campos simples que tienen un . carácter separador, lo que hace que parezcan similares a la forma en que haría referencia a ellos usando la notación de puntos en una consulta MongoDB.

Si bien Tableau cita correctamente los identificadores, dentro de las expresiones SQL ad-hoc debe escribir entre comillas dobles cada identificador que contenga . caracteres o caracteres con mayúsculas y minúsculas.

Considere el siguiente documento:

{
"_id": 1,
"familyName": "Partridge",
"hometown" : "Hollywood Hills",
"address" : { "street": "123 Main Street",
"city" : "Hollywood",
"state" : "CA",
"zip" : "90210" },
"members_since" : ISODate("2002-04-12T00:00:00Z")
}

Al ejecutar en una colección que contiene este documento, se generan los siguientes campos en el esquema mongodrdl generado:

_id

numeric

familyName

varchar

hometown

varchar

address.street

varchar

address.city

varchar

address.state

varchar

address.zip

varchar

members_since

timestamp

BI Connector expone matrices a herramientas de inteligencia empresarial utilizando dos colecciones: una sin la matriz y la otra con un documento por elemento de la matriz.

Si ejecuta en una colección mongodrdl llamada families que contiene el siguiente documento:

{
"_id": 1,
"familyName": "Partridge",
"hometown" : "Hollywood Hills",
"familyMembers" : [
{
"firstname" : "Shirley",
"age" : 42,
"attributes" : [
{ "name" : "instrument", "value" : "singer" },
{ "name" : "role", "value" : "mom" }
]
},
{
"firstname" : "Keith",
"age" : 18,
"attributes" : [
{ "name" : "instrument", "value" : "guitar" },
{ "name" : "role", "value" : "son" }
]
},
{
"firstname" : "Laurie",
"age" : 16,
"attributes" : [
{ "name" : "instrument", "value" : "keyboard" },
{ "name" : "role", "value" : "sister" }
]
}]
}

Esto da como resultado las tres tablas siguientes:

families

_id

numeric

familyName

varchar

hometown

varchar

families_familyMembers

_id

numeric

familyMembers.age

numeric

familyMembers.firstname

varchar

familyMembers_idx

numeric

families_familyMembers_attributes

_id

numeric

familyMembers.attributes.name

varchar

familyMembers.attributes.value

varchar

familyMembers.attributes_idx

numeric

familyMembers_idx

numeric

Puede combinar estas tablas para ver los datos en un formato desnormalizado. Por ejemplo, puede listar las personas mencionadas en el esquema anterior junto con su información familiar mediante la siguiente consulta:

SELECT f.*, m.`familyMembers.firstname`
FROM families_familyMembers m
JOIN families f
ON m._id = f._id;

Si proporciona la --preJoined opción a, BI Connector agrega los campos del documento contenedor al documento de cada elemento de la matriz, "uniendo previamente" la mongodrdl tabla.

En el ejemplo anterior, las tablas contendrían las siguientes columnas adicionales:

families_familyMembers

familyName

varchar

hometown

varchar

families_familyMembers_attributes

familyMembers.age

numeric

familyMembers.firstname

varchar

familyMembers_idx

numeric

familyName

varchar

hometown

varchar

Puede agregar una columna de tipo mongo.Filter a una colección en su DRDL archivo. Este tipo de columna le permite realizar una consulta $match personalizada.

Por ejemplo, dado el siguiente esquema que describe una nube de puntos con hasta tres componentes:

schema:
- db: test
tables:
- table: points
collection: points
pipeline: []
columns:
- Name: _id
MongoType: bson.ObjectId
SqlName: _id
SqlType: varchar
- Name: x
MongoType: float64
SqlName: x
SqlType: numeric
- Name: "y"
MongoType: float64
SqlName: "y"
SqlType: numeric
- Name: z
MongoType: float64
SqlName: z
SqlType: numeric
- Name: filter
MongoType: mongo.Filter
SqlName: filter
SqlType: varchar

Puede seleccionar sólo puntos tridimensionales utilizando la siguiente consulta:

SELECT x, y, z
FROM points
WHERE filter='{"z": {"$exists": true}}';

MongoDB 3.4 presenta vistas de solo lectura que puede utilizar para filtrar datos incompatibles.

Por ejemplo, puede crear una vista en la base de datos test que contenga solo documentos que contengan un número en el campo grade de una colección grades:

db.runCommand( { create: "numericGrades", viewOn: "grades", pipeline: [ { "$match": { "grade": { "$type": "number" } } } ] } )

Luego puede usar mongodrdl para generar un esquema a partir de esta vista como lo haría con una colección:

mongodrdl -d test -c numericGrades

BI Connector puede utilizar canales de agregación como parte del esquema para transformar documentos de la colección en el formato adecuado para las tablas relacionales.

Por ejemplo, considera un documento simple en una colección llamada simpleFamilies:

{
"_id": 1,
"familyName": "Partridge",
"familyMembers" : [ "Shirley", "Keith", "Laurie"]
}

mongodrdl genera un esquema con las tablas simpleFamilies simpleFamilies_familyMembersy.

La tabla simpleFamilies_familyMembers enumera cada miembro de la familia y tiene la siguiente secuencia:

pipeline:
- $unwind:
includeArrayIndex: familyMembers_idx
path: $familyMembers

Este pipeline utiliza $unwind para crear un nuevo registro para cada nodo de familyMembers. El esquema rastrea el índice del arreglo en el campo familyMembers_idx.

Si una colección contiene un 2d 2dsphere índice geoespacial o, BI Connector asigna el campo indexado a una matriz de coordenadas numéricas de longitud y latitud.

Dada la siguiente colección:

db.points.createIndex( { pos : "2dsphere" } )
db.points.insertOne({
pos : { type: "Point", coordinates: [ -73.97, 40.77 ] },
name: "Central Park",
category : "Parks"
})

BI Connector genera el siguiente esquema:

schema:
- db: test
tables:
- table: points
collection: points
pipeline: []
columns:
- Name: _id
MongoType: bson.ObjectId
SqlName: _id
SqlType: varchar
- Name: category
MongoType: string
SqlName: category
SqlType: varchar
- Name: name
MongoType: string
SqlName: name
SqlType: varchar
- Name: pos.coordinates
MongoType: geo.2darray
SqlName: pos.coordinates
SqlType: numeric[]

BI Connector no reconoce los campos geoespaciales al leer de una vista.

Volver

Configurar TLS para el conector de BI

En esta página