mongodb というタイプによって認識される MongoDB トランスレーターは、MongoDB データベースにあるデータのリレーショナルデータベースビューを提供します。このトランスレーターは、Data Virtualization SQL クエリーを MongoDB ベースのクエリーに変換することができます。これは、すべての SELECT、INSERT、UPDATE、DELETE コールを提供します。
MongoDB は、独自のクエリー言語を持つドキュメントベースの「スキーマレス」データベースです。これは、リレーショナルデータベース概念または SQL クエリー言語と完全にマッピングされません。スケーラビリティーやパフォーマンスを向上させるために、MongoDB などの NOSQL ストアを使用するシステムが増えています。たとえば、監査ログの保存や Web サイトデータの管理などのアプリケーションは MongoDB に適しており、リレーショナルデータベースの構造は必要ありません。MongoDB は JSON ドキュメントをプライマリーストレージユニットとして使用し、それらのドキュメントには親ドキュメント内に追加の組み込みドキュメントを含めることができます。組み込みドキュメントを使用することで、MongoDB は、リレーショナルデータベースでクエリーを行うために重複したデータまたは結合を要求する正規化のために関連情報を同じ場所に配置し、リレーショナルデータベースでクエリーを実行します。
MongoDB が Data Virtualization と連携するには、MongoDB トランスレーターが、リレーショナルデータベースとドキュメントベースのストレージ間のバランスを実現できる MongoDB ストアを設計することです。「スキーマなしの」設計の利点は、開発時に非常に適しています。しかし、「スキーマレス」設計では、アプリケーションのバージョン間の移行時に問題を引き起こす可能性があり、データのクエリー時に、返された情報の効率的な使用が可能になります。
困難であり、既存の MongoDB コレクションに基づいてスキーマを取得することができないため、Data Virtualization は他の変換者と比較して、逆順で問題を順守します。MongoDB を使用する場合は、Data Virtualization メタデータを使用して MongoDB スキーマを定義する必要があります。Data Virtualization は、リレーショナルデータベースをメタデータとしてのみ許可するため、テーブル、手順、および関数を使用して、リレーショナルデータベース用語で MongoDB スキーマを定義する必要があります。MongoDB の目的で、Data Virtualization メタデータが拡張され、テーブルに定義されたエクステンションプロパティーを提供して MongoDB ベースのドキュメントに変換するようになりました。これらのエクステンションプロパティーを使用すると、MongoDB ドキュメントが構造化され、保存される方法を定義できます。テーブルで定義された関係(primary-key、external-key)と、そのカーディナリティー(ONE-to-ONE、ONE-to-MANY、MANY-to-ONE)に基づいて、関連の情報をコロケーションの親ドキュメントと共に埋め込むことができるようにマッピングされます。そのため、リレーショナルデータベースベースの設計ですが、MongoDB でドキュメントベースのストレージです。
リレーショナルデータベースを使用しているユーザーで、データを MongoDB に移動/移行して、現在実行しているエンドユーザーアプリケーションを変更せずにスケーリングとパフォーマンスを活用します。
シーケンスされた SQL 開発者であるが、MongoDB の経験がないユーザー。これにより、MongoDB を直接アプリケーション開発者として使用する場合と比較して、エントリーのバリアが低くなります。
MongoDB ベースのデータを他のエンタープライズデータソースのデータと統合したいユーザー。
CREATE DATABASE nothwind;
USE DATABASE nothwind;
CREATE SERVER local FOREIGN DATA WRAPPER mongodb OPTIONS ("resource-name" 'java:/mongoDS');
CREATE SCHEMA northwind SERVER local;
SET SCHEMA northwind;
IMPORT FROM SERVER local INTO northwind;
CREATE DATABASE nothwind;
USE DATABASE nothwind;
CREATE SERVER local FOREIGN DATA WRAPPER mongodb OPTIONS ("resource-name" 'java:/mongoDS');
CREATE SCHEMA northwind SERVER local;
SET SCHEMA northwind;
IMPORT FROM SERVER local INTO northwind;
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
MongoDB トランスレーターは、シナリオにおける既存のドキュメントコレクションに基づいてメタデータを派生させることができます。ただし、複雑なドキュメントを使用する場合は、メタデータの解釈が正確になる可能性があります。このような場合には、メタデータを定義する必要があります。たとえば、以下の例のように DDL を使用してスキーマを定義できます。
<vdb name="nothwind" version="1">
<model name="northwind">
<source name="local" translator-name="mongodb" connection-jndi-name="java:/mongoDS"/>
<metadata type="DDL"><![CDATA[
CREATE FOREIGN TABLE Customer (
customer_id integer,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
]]> </metadata>
</model>
<vdb>
<vdb name="nothwind" version="1">
<model name="northwind">
<source name="local" translator-name="mongodb" connection-jndi-name="java:/mongoDS"/>
<metadata type="DDL"><![CDATA[
CREATE FOREIGN TABLE Customer (
customer_id integer,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
]]> </metadata>
</model>
<vdb>
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Data Virtualization を使用してテーブルに対して以下の INSERT 操作が実行されると、MongoDB トランスレーターは MongoDB にドキュメントを作成します。
INSERT INTO Customer(customer_id, FirstName, LastName) VALUES (1, 'John', 'Doe');
INSERT INTO Customer(customer_id, FirstName, LastName) VALUES (1, 'John', 'Doe');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
{
_id: ObjectID("509a8fb2f3f4948bd2f983a0"),
customer_id: 1,
FirstName: "John",
LastName: "Doe"
}
{
_id: ObjectID("509a8fb2f3f4948bd2f983a0"),
customer_id: 1,
FirstName: "John",
LastName: "Doe"
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
PRIMARY KEY がテーブルに定義されている場合、その列名は MongoDB コレクションで "_id"
フィールドとして自動的に使用され、以下の例のようにドキュメント構造は MongoDB に保存されます。
CREATE FOREIGN TABLE Customer (
customer_id integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Customer (
customer_id integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
{
_id: 1,
FirstName: "John",
LastName: "Doe"
}
{
_id: 1,
FirstName: "John",
LastName: "Doe"
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Customer テーブルで複合 PRIMARY KEY を定義すると、結果となるドキュメント構造は以下の例のようになります。
CREATE FOREIGN TABLE Customer (
customer_id integer,
FirstName varchar(25),
LastName varchar(25),
PRIMARY KEY (FirstName, LastName)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Customer (
customer_id integer,
FirstName varchar(25),
LastName varchar(25),
PRIMARY KEY (FirstName, LastName)
) OPTIONS(UPDATABLE 'TRUE');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
{
_id: {
FirstName: "John",
LastName: "Doe"
},
customer_id: 1,
}
{
_id: {
FirstName: "John",
LastName: "Doe"
},
customer_id: 1,
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
{
_id: 1,
FirstName: "John",
LastName: "Doe"
Score: [89, "ninety", 91.0]
}
{
_id: 1,
FirstName: "John",
LastName: "Doe"
Score: [89, "ninety", 91.0]
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
ユーザーは function array_get
を使用してアレイ内の個別のアイテムを取得したり、ARRAYTABLE を使用してアレイを表形式構造に変換することもできます。
組み込みドキュメントがアレイにある場合でも、埋め込みドキュメントの処理はスカラー値とアレイとは異なることに注意してください。
トランスレーターは通常の式、MongoDB::Code、MongoDB::MinKey、MongoDB::MaxKey、および MongoDB::OID では機能しません。
同じキーの混合タイプの値を含むドキュメントでは、列を検索不可としてマークする必要があります。そうでないと、MongoDB は列に対して述語と正しく一致しません。キーは、混合タイプとして、1 つのドキュメントの文字列値として表され、別のドキュメントの整数として使用されます。詳細は、以下の表の importer.sampleSize プロパティー
を参照してください。
インポーターのプロパティー
Expand 名前 説明 デフォルト
excludeTables
インポートから除外する正規表現。
null
includeTables
インポートからのテーブルを含む正規表現。
null
sampleSize
構造を判断するためのサンプルドキュメントの数。ドキュメントに別のフィールドがある場合、または異なるタイプのフィールドがある場合は、1 を超える値である必要があります。
1
fullEmbeddedNames
埋め込みテーブル名の前に親を付けるかどうか(例: parent_embedded)。false の場合、テーブルの名前はフィールドの名前になり、既存のテーブルまたは他の埋め込みテーブルと競合する可能性があります。
false
Show more
MongoDB で複雑な埋め込みドキュメントを定義しない場合、Data Virtualization は参加処理にステップを表示し、その機能を提供します。ただし、MongoDB 自体の力を利用してデータのクエリーを行い、不必要なデータを組み込み、パフォーマンスを改善したい場合は、これらの複雑なドキュメントの構築について確認する必要があります。
MongoDB トランスレーターは、複雑な「組み込み」ドキュメントの構築に役立つ他の Teiid メタデータプロパティーと 2 つの追加のメタデータプロパティーを定義します。Data Virtualization スキーマのメタデータの詳細は、「スキーマオブジェクトの DDL メタデータ」 を参照してください。DDL で以下のメタデータプロパティーを使用できます。
teiid_mongo:EMBEDDABLE
つまり、このテーブルで定義されたデータは、任意 の親ドキュメントの「埋め込み可能な」ドキュメントとして含めることができます。親ドキュメントは外部キー関係で参照されます。このシナリオでは、Data Virtualization は MongoDB ストアに複数のデータのコピーと、独自のコレクションにあるデータのコピーと、このテーブルと関係のある各親テーブルのコピーを保持します。組み込み可能な別のテーブル内に埋め込み可能なテーブルをネスト化することもできますが、一部制限があります。テーブルでこのプロパティーを使用します。テーブルが存在すると、その関係がすべて含まれます。たとえば、「製品」のカテゴリーを定義する「カテゴリー」テーブルは製品とは独立しており、「製品」テーブルに埋め込むことができます。
teiid_mongo:MERGE
これは、このテーブルのデータが定義された親テーブルにマージされることを意味します。親ドキュメントに埋め込まれたデータのコピーは 1 つだけです。親ドキュメントは、外部キー関係を使用して定義されます。
上記のプロパティーと FOREIGN KEY 関係を使用して、MongoDB で複雑なドキュメントを構築する方法を説明します。
指定されたテーブルには、MongoDB でネスト化のタイプを定義する teiid_mongo:EMBEDDABLE
プロパティーまたは teiid_mongo:MERGE
プロパティーのいずれかを含めることができます。1 つのテーブル内で両方のプロパティーを使用することはできません。
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Address (
CustomerId integer,
Street varchar(50),
City varchar(25),
State varchar(25),
Zipcode varchar(6),
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Address (
CustomerId integer,
Street varchar(50),
City varchar(25),
State varchar(25),
Zipcode varchar(6),
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
デフォルトでは、サンプルデータと同様に MongoDB で 2 つの異なるコレクションを生成します。
Customer
{
_id: 1,
FirstName: "John",
LastName: "Doe"
}
Address
{
_id: ObjectID("..."),
CustomerId: 1,
Street: "123 Lane"
City: "New York",
State: "NY"
Zipcode: "12345"
}
Customer
{
_id: 1,
FirstName: "John",
LastName: "Doe"
}
Address
{
_id: ObjectID("..."),
CustomerId: 1,
Street: "123 Lane"
City: "New York",
State: "NY"
Zipcode: "12345"
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
テーブルの OPTIONS 句で teiid_mongo:MERGE
拡張プロパティーを使用することで、MongoDB のストレージを単一コレクションに強化できます。
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Address (
CustomerId integer PRIMARY KEY,
Street varchar(50),
City varchar(25),
State varchar(25),
Zipcode varchar(6),
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE', "teiid_mongo:MERGE" 'Customer');
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Address (
CustomerId integer PRIMARY KEY,
Street varchar(50),
City varchar(25),
State varchar(25),
Zipcode varchar(6),
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE', "teiid_mongo:MERGE" 'Customer');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
これにより、以下のように MongoDB で単一のコレクションが生成されます。
Customer
{
_id: 1,
FirstName: "John",
LastName: "Doe",
Address:
{
Street: "123 Lane",
City: "New York",
State: "NY",
Zipcode: "12345"
}
}
Customer
{
_id: 1,
FirstName: "John",
LastName: "Doe",
Address:
{
Street: "123 Lane",
City: "New York",
State: "NY",
Zipcode: "12345"
}
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
上記の両方のテーブルは、SQL コマンドで JOIN 句を使用してクエリーできる単一のコレクションにマージされます。この場合、子/追加レコードが存在すると、「teiid_mongo:MERGE " extension property is right choice」という親テーブルからは意味がありません。
子テーブルに定義されている Foreign キーは、親テーブルと子テーブルの両方で Primary Keys を参照し、1-2-One 関係を形成する必要があります。
たとえば、仮想データベースを以下の DDL のように定義すると、以下のようになります。
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
CustomerId integer,
OrderDate date,
Status integer,
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
CustomerId integer,
OrderDate date,
Status integer,
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
その後、1 人の顧客には MANY Orders を指定できます。MongoDB ドキュメントの保存方法を定義するオプションは 2 つあります。スキーマの場合、カスタマーテーブルの CustomerId は Order テーブル(順不同の目的で のみ 使用されるカスタマー情報)でのみ参照され、使用できます。
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
CustomerId integer,
OrderDate date,
Status integer,
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE', "teiid_mongo:MERGE" 'Customer');
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
CustomerId integer,
OrderDate date,
Status integer,
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE', "teiid_mongo:MERGE" 'Customer');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
これは、以下のようなカスタマーテーブルの単一のドキュメントを生成します。
{
_id: 1,
FirstName: "John",
LastName: "Doe",
Order:
[
{
_id: 100,
OrderDate: ISODate("2000-01-01T06:00:00Z")
Status: 2
},
{
_id: 101,
OrderDate: ISODate("2001-03-06T06:00:00Z")
Status: 5
}
...
]
}
{
_id: 1,
FirstName: "John",
LastName: "Doe",
Order:
[
{
_id: 100,
OrderDate: ISODate("2000-01-01T06:00:00Z")
Status: 2
},
{
_id: 101,
OrderDate: ISODate("2001-03-06T06:00:00Z")
Status: 5
}
...
]
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Customer テーブルが Order テーブル以外のテーブルで参照される場合は、「teiid_mongo:EMBEDDABLE」プロパティーを使用します。
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE', "teiid_mongo:EMBEDDABLE" 'TRUE');
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
CustomerId integer,
OrderDate date,
Status integer,
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Comments (
CommentID integer PRIMARY KEY,
CustomerId integer,
Comment varchar(140),
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE', "teiid_mongo:EMBEDDABLE" 'TRUE');
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
CustomerId integer,
OrderDate date,
Status integer,
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Comments (
CommentID integer PRIMARY KEY,
CustomerId integer,
Comment varchar(140),
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId)
) OPTIONS(UPDATABLE 'TRUE');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
これにより、MongoDB に 3 つの異なるコレクションが作成されます。
Customer
{
_id: 1,
FirstName: "John",
LastName: "Doe"
}
Order
{
_id: 100,
CustomerId: 1,
OrderDate: ISODate("2000-01-01T06:00:00Z")
Status: 2
Customer:
{
FirstName: "John",
LastName: "Doe"
}
}
Comment
{
_id: 12,
CustomerId: 1,
Comment: "This works!!!"
Customer:
{
FirstName: "John",
LastName: "Doe"
}
}
Customer
{
_id: 1,
FirstName: "John",
LastName: "Doe"
}
Order
{
_id: 100,
CustomerId: 1,
OrderDate: ISODate("2000-01-01T06:00:00Z")
Status: 2
Customer:
{
FirstName: "John",
LastName: "Doe"
}
}
Comment
{
_id: 12,
CustomerId: 1,
Comment: "This works!!!"
Customer:
{
FirstName: "John",
LastName: "Doe"
}
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
ここで見ると、カスタマーテーブルのコンテンツは参照先の他のテーブルのデータと共に組み込まれています。これにより、これらの埋め込みドキュメントが複数 MongoDB トランスレーターで自動的に管理される重複したデータが作成されます。
すべてのコピーを更新する操作が複数あるため、「teiid_mongo:EMBEDDABLE」プロパティーでテーブルに対して生成される SELECT、INSERT、DELETE 操作はすべてアトミックです。MongoDB にはトランザクションがないため、Data Virtualization は今後のリリースで TEIID-2957 でトランザクションフレームワークを自動的に補正する予定です。
親テーブルには、複数の「組み込み」と、その中に「マージ」ドキュメントを含めることができ、1 つ以上のドキュメントに限定されません。ただし、MongoDB ではドキュメントサイズが制限されていると 16 MB を超える可能性があることに注意してください。
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
OrderDate date,
Status integer
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE OrderDetail (
OrderID integer,
ProductID integer,
PRIMARY KEY (OrderID,ProductID),
FOREIGN KEY (OrderID) REFERENCES Order (OrderID),
FOREIGN KEY (ProductID) REFERENCES Product (ProductID)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Products (
ProductID integer PRIMARY KEY,
ProductName varchar(40)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
OrderDate date,
Status integer
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE OrderDetail (
OrderID integer,
ProductID integer,
PRIMARY KEY (OrderID,ProductID),
FOREIGN KEY (OrderID) REFERENCES Order (OrderID),
FOREIGN KEY (ProductID) REFERENCES Product (ProductID)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Products (
ProductID integer PRIMARY KEY,
ProductName varchar(40)
) OPTIONS(UPDATABLE 'TRUE');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
以下のような DDL を変更します。
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
OrderDate date,
Status integer
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE OrderDetail (
OrderID integer,
ProductID integer,
PRIMARY KEY (OrderID,ProductID),
FOREIGN KEY (OrderID) REFERENCES Order (OrderID),
FOREIGN KEY (ProductID) REFERENCES Product (ProductID)
) OPTIONS(UPDATABLE 'TRUE', "teiid_mongo:MERGE" 'Order');
CREATE FOREIGN TABLE Products (
ProductID integer PRIMARY KEY,
ProductName varchar(40)
) OPTIONS(UPDATABLE 'TRUE', "teiid_mongo:EMBEDDABLE" 'TRUE');
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
OrderDate date,
Status integer
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE OrderDetail (
OrderID integer,
ProductID integer,
PRIMARY KEY (OrderID,ProductID),
FOREIGN KEY (OrderID) REFERENCES Order (OrderID),
FOREIGN KEY (ProductID) REFERENCES Product (ProductID)
) OPTIONS(UPDATABLE 'TRUE', "teiid_mongo:MERGE" 'Order');
CREATE FOREIGN TABLE Products (
ProductID integer PRIMARY KEY,
ProductName varchar(40)
) OPTIONS(UPDATABLE 'TRUE', "teiid_mongo:EMBEDDABLE" 'TRUE');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
これにより、以下のようなドキュメントが生成されます。
{
_id : 10248,
OrderDate : ISODate("1996-07-04T05:00:00Z"),
Status : 5
OrderDetails : [
{
_id : {
OrderID : 10248,
ProductID : 11
Products : {
ProductID: 11
ProductName: "Hammer"
}
}
},
{
_id : {
OrderID : 10248,
ProductID : 14
Products : {
ProductID: 14
ProductName: "Screw Driver"
}
}
}
]
}
Products
{
{
ProductID: 11
ProductName: "Hammer"
}
{
ProductID: 14
ProductName: "Screw Driver"
}
}
{
_id : 10248,
OrderDate : ISODate("1996-07-04T05:00:00Z"),
Status : 5
OrderDetails : [
{
_id : {
OrderID : 10248,
ProductID : 11
Products : {
ProductID: 11
ProductName: "Hammer"
}
}
},
{
_id : {
OrderID : 10248,
ProductID : 14
Products : {
ProductID: 14
ProductName: "Screw Driver"
}
}
}
]
}
Products
{
{
ProductID: 11
ProductName: "Hammer"
}
{
ProductID: 14
ProductName: "Screw Driver"
}
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
制限事項
MongoDB では、ネストされたアレイを処理する機能が制限されているため、ドキュメントのネストされた埋め込みは制限されています。複数のレベルで「EMBEDDABLE」プロパティーをネストすることは OK ですが、MERGE を持つ 2 つ以上のレベルは推奨されません。また、1 行にドキュメントサイズ 16 MB を超過しないように注意してください。そのため、ディープネストは推奨されません。
関連するテーブル間で JOINS(「EMBEDDABLE」または「MERGE」プロパティーのいずれかを使用する必要があります)。それ以外の場合は、クエリーがエラーが発生します。Data Virtualization が正しく計画および JOINS と連携するようにするには、2 つのテーブルが相互に埋め込まれてい ない 場合は、関係を表す Foreign キーで allow-joins=false プロパティーを使用します。以下に例を示します。
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
CustomerId integer,
OrderDate date,
Status integer,
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId) OPTIONS (allow-join 'FALSE')
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Customer (
CustomerId integer PRIMARY KEY,
FirstName varchar(25),
LastName varchar(25)
) OPTIONS(UPDATABLE 'TRUE');
CREATE FOREIGN TABLE Order (
OrderID integer PRIMARY KEY,
CustomerId integer,
OrderDate date,
Status integer,
FOREIGN KEY (CustomerId) REFERENCES Customer (CustomerId) OPTIONS (allow-join 'FALSE')
) OPTIONS(UPDATABLE 'TRUE');
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
上記の例では、Data Virtualization は 2 つのコレクションを作成しますが、ユーザーにとって以下のようなクエリーが発行されると、
SELECT OrderID, LastName FROM Order JOIN Customer ON Order.CustomerId = Customer.CustomerId;
SELECT OrderID, LastName FROM Order JOIN Customer ON Order.CustomerId = Customer.CustomerId;
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
上記のプロパティーがないと、JOIN 処理がエラーになる代わりに、Data Virtualization エンジンでエラーが発生します。
上記のプロパティーを使用し、MongoDB ドキュメント構造を慎重に設計する場合、Data Virtualization トランスレーターは、コロケーションに基づいてデータをインテリジェントな場所に照合し、クエリー中にデータを活用できます。
CREATE FOREIGN FUNCTION geoIntersects (columnRef string, type string, coordinates double[][]) RETURNS boolean;
CREATE FOREIGN FUNCTION geoWithin (ccolumnRef string, type string, coordinates double[][]) RETURNS boolean;
CREATE FOREIGN FUNCTION near (ccolumnRef string, coordinates double[], maxdistance integer) RETURNS boolean;
CREATE FOREIGN FUNCTION nearSphere (ccolumnRef string, coordinates double[], maxdistance integer) RETURNS boolean;
CREATE FOREIGN FUNCTION geoPolygonIntersects (ref string, north double, east double, west double, south double) RETURNS boolean;
CREATE FOREIGN FUNCTION geoPolygonWithin (ref string, north double, east double, west double, south double) RETURNS boolean;
CREATE FOREIGN FUNCTION geoIntersects (columnRef string, type string, coordinates double[][]) RETURNS boolean;
CREATE FOREIGN FUNCTION geoWithin (ccolumnRef string, type string, coordinates double[][]) RETURNS boolean;
CREATE FOREIGN FUNCTION near (ccolumnRef string, coordinates double[], maxdistance integer) RETURNS boolean;
CREATE FOREIGN FUNCTION nearSphere (ccolumnRef string, coordinates double[], maxdistance integer) RETURNS boolean;
CREATE FOREIGN FUNCTION geoPolygonIntersects (ref string, north double, east double, west double, south double) RETURNS boolean;
CREATE FOREIGN FUNCTION geoPolygonWithin (ref string, north double, east double, west double, south double) RETURNS boolean;
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
サンプルクエリーは以下のようになります。
SELECT loc FROM maps where mongo.geoWithin(loc, 'LineString', ((cast(1.0 as double), cast(2.0 as double)), (cast(1.0 as double), cast(2.0 as double))))
SELECT loc FROM maps where mongo.geoWithin(loc, 'LineString', ((cast(1.0 as double), cast(2.0 as double)), (cast(1.0 as double), cast(2.0 as double))))
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
ビルトインの Geometry タイプを使用する同じ関数(前述の一覧の関数バージョンは非推奨となり、今後のバージョンで削除されます)。
CREATE FOREIGN FUNCTION geoIntersects (columnRef string, geo geometry) RETURNS boolean;
CREATE FOREIGN FUNCTION geoWithin (ccolumnRef string, geo geometry) RETURNS boolean;
CREATE FOREIGN FUNCTION near (ccolumnRef string, geo geometry, maxdistance integer) RETURNS boolean;
CREATE FOREIGN FUNCTION nearSphere (ccolumnRef string, geo geometry, maxdistance integer) RETURNS boolean;
CREATE FOREIGN FUNCTION geoPolygonIntersects (ref string, geo geometry) RETURNS boolean;
CREATE FOREIGN FUNCTION geoPolygonWithin (ref string, geo geometry) RETURNS boolean;
CREATE FOREIGN FUNCTION geoIntersects (columnRef string, geo geometry) RETURNS boolean;
CREATE FOREIGN FUNCTION geoWithin (ccolumnRef string, geo geometry) RETURNS boolean;
CREATE FOREIGN FUNCTION near (ccolumnRef string, geo geometry, maxdistance integer) RETURNS boolean;
CREATE FOREIGN FUNCTION nearSphere (ccolumnRef string, geo geometry, maxdistance integer) RETURNS boolean;
CREATE FOREIGN FUNCTION geoPolygonIntersects (ref string, geo geometry) RETURNS boolean;
CREATE FOREIGN FUNCTION geoPolygonWithin (ref string, geo geometry) RETURNS boolean;
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
サンプルクエリーは以下のようになります。
SELECT loc FROM maps where mongo.geoWithin(loc, ST_GeomFromGeoJSON('{"coordinates":[[1,2],[3,4]],"type":"Polygon"}'))
SELECT loc FROM maps where mongo.geoWithin(loc, ST_GeomFromGeoJSON('{"coordinates":[[1,2],[3,4]],"type":"Polygon"}'))
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Data Virtualization の Geo Spatial 関数ライブラリーでは、「st_geom..」メソッドが複数あります。
MongoDB トランスレーターは以下の機能で使用できます。
Grouping.
マッチング。
並び替え。
フィルタリング。
制限。
GridFS に保存されている LOB の使用。
複合プライマリーおよび外部キー。
デフォルトでは、クエリーを直接実行する手順の名前は native と呼ばれます。デフォルト名を変更する方法は、9章翻訳者 の「 実行プロパティーの上書き」を 参照してください。
MongoDB トランスレーターは、Data Virtualization の解析または解決を行わずに、アドホックの集約クエリーをソースに対して直接実行する手順を提供します。この手順の結果のメタデータは Data Virtualization には認識されないため、アレイの場所 1(1)に単一の Blob を含むオブジェクトアレイとして返されます。この Blob には JSON ドキュメントが含まれます。XMLTABLE は、クライアントアプリケーションが使用できるように表形式の出力を使用できます。
上記の例では、「city」と呼ばれるコレクションは、「FREEDOM」に一致するフィルターで検索され、「ネイティブ」の手順を使用して、ネストされたテーブル機能を使用して出力が XMLTABLE コンストラクトに渡され、この手順からの出力が JSONTOXML 関数に送信され、XML の結果が表形式で公開されます。
直接クエリーは形式でなければなりません。
"collectionName;{$pipeline instr}+"
"collectionName;{$pipeline instr}+"
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Data Virtualization 8.10 から、MongoDB トランスレーターは remove、drop、createIndex などの Shell タイプの java スクリプトコマンドを実行することもできます。この場合は、コマンドの形式にする必要があります。
"$ShellCmd;collectionName;operationName;{$instr}+"
"$ShellCmd;collectionName;operationName;{$instr}+"
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
たとえば、以下のようになります。
"$ShellCmd;MyTable;remove;{ qty: { $gt: 20 }}"
"$ShellCmd;MyTable;remove;{ qty: { $gt: 20 }}"
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow