Docs Menu
Docs Home
/
BI Connector
/

ドキュメント関係定義言語

項目一覧

  • ファイル形式
  • フィールド型
  • 埋め込みドキュメント
  • カスタムフィルター
  • 集計パイプライン

ドキュメント関係定義言語( DRDL )は、MongoDB スキーマのリレーショナルビューを定義します。

mongodrdlは MongoDB コレクションからドキュメントをサンプリングし、それらのドキュメントからDRDLファイルを生成します。 mongosqldDRDLファイルに定義されたスキーマを使用して、MySQL クライアントが MongoDB データをクエリできるようにします。

DRDLファイルには、 YAML のデータベース、テーブル、列が一覧表示されます 形式。

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>

データベースtest内のコレクションabcに次の形状のドキュメントがあるとします。

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

このコレクションに基づいてスキーマを生成するには、 mongodrdlを実行します。

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

生成されたスキーマ ファイル( schema.drdl )は、次のようになります。

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

BI Connector は、常に同じデータ型を含むフィールドをリレーショナルモデルにマッピングします。 スキーマ生成は、次のケースを特別に処理します。

Numeric

BI Connector は、サンプリングされたドキュメントに一致する最も正確な数値型を使用します。

コレクション内のフィールドのデータ型が常に同じデータ型の場合、BI Connector はその型を使用します。

コレクション内のフィールドに浮動小数点値または整数のいずれかを含めることができる場合、BI Connector はタイプnumericを使用します。

日付
BI Connector は、 data_date型の任意のフィールドをSQL timestamp型として扱います。
タイムスタンプ
BI Connector はdata_timestampタイプのフィールドを無視します。
ObjectID
BI Connector は、 data_oid型の任意のフィールドを SQL 型varcharとして扱います。
UUID
BI Connector は、 UUID 型の任意のフィールドを SQL 型varcharとして扱います。
地理空間

コレクションに地理空間インデックスが含まれている場合、BI Connector はインデックス フィールドを数値経度緯度座標の配列にマッピングします。

例については、「地理空間データ」を参照してください。

BI Connector は、ビューから読み取るときに地理空間フィールドを認識しません。

異種フィールド

フィールドに一貫性のないタイプが含まれている場合、BI Connector は最も頻繁にサンプリングされたタイプを選択します。

フィールドに型またはその型の配列のいずれかを含めることができる場合、生成されたスキーマでは常にフィールドに配列が含まれていることを指定します。

詳細については、「DRDL タイプの定義と互換性のないデータをスキップするにはどうすればよいですか? 」を参照してください。

BI Connector は、埋め込みドキュメントを.区切り文字を持つ単純フィールドにマッピングし、MongoDB クエリでドット表記を使用して参照する方法と同様に表示します。

Tableauは識別子を適切に引用しますが、アドホック SQL 内では、 .文字または混合大文字と小文字を含むすべての識別子を二重引用符で囲む必要があります。

次の文書をご覧ください。

{
"_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")
}

このドキュメントを含むコレクションでmongodrdlを実行すると、生成されたスキーマに次のフィールドが表示されます。

_id
numeric
familyName
varchar
hometown
varchar
address.street
varchar
address.city
varchar
address.state
varchar
address.zip
varchar
members_since
timestamp

BI Connectorは、配列がないコレクションと、配列要素ごとに 1 つのドキュメントを持つコレクションの 2 つのコレクションを使用して、 business intelligenceツールに配列を公開します。

次のドキュメントを含むfamiliesという名前のコレクションでmongodrdlを実行する場合:

{
"_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" }
]
}]
}

その結果、次の 3 つの表が作成されます。

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

これらのテーブルを結合して、非正規化された形式でデータを表示できます。 たとえば、次のクエリを使用して、上記スキーマにある という名前の人物とそのファミリー情報を一覧表示できます。

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

--preJoinedmongodrdl オプションを指定すると、BI Connector は含むドキュメントのフィールドを各配列要素のドキュメントに追加し、テーブルに「事前結合」します。

前の例では、テーブルには次の追加の列が含まれています。

families_familyMembers
familyName
varchar
hometown
varchar
families_familyMembers_attributes
familyMembers.age
numeric
familyMembers.firstname
varchar
familyMembers_idx
numeric
familyName
varchar
hometown
varchar

DRDLファイルのコレクションには、 mongo.Filterタイプの列を追加できます。 この列タイプでは、カスタム$matchクエリを実行できます。

たとえば、最大 3 つのコンポーネントを含むポイントのクラウドを記述する次のスキーマがあるとします。

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

次のクエリを使用して 3 次元ポイントのみを選択できます。

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

MongoDB 3.4では、互換性のないデータをフィルタリングするために使用できる読み取り専用ビューが導入されています。

たとえば、 testデータベースに、 gradesコレクションのgradeフィールドに数値を含むドキュメントのみを含むビューを作成できます。

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

次に、 mongodrdlを使用して、コレクションと同様にこのビューからスキーマを生成できます。

mongodrdl -d test -c numericGrades

BI Connector は、コレクションのドキュメントを関係テーブルの適切な形式に変換するために、スキーマの一部として集計パイプラインを使用できます。

たとえば、 simpleFamiliesという名前のコレクション内の単純なドキュメントを考えてみましょう。

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

mongodrdlは、テーブルsimpleFamiliessimpleFamilies_familyMembersを含むスキーマを生成します。

テーブルsimpleFamilies_familyMembersは各ファミリー メンバーを列挙し、次のパイプラインを持ちます。

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

このパイプラインは$unwindを使用してfamilyMembersの各メンバーに新しいレコードを作成します。 スキーマは、フィールドfamilyMembers_idxの配列インデックスを追跡します。

コレクションに2dまたは2dsphere地理空間インデックスが含まれている場合、BI Connector はインデックス フィールドを数値経度緯度座標の配列にマッピングします。

次の コレクションがあるとします。

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

BI Connector は、次のスキーマを生成します。

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 は、ビューから読み取るときに地理空間フィールドを認識しません。

戻る

BI Connector の TLS の構成