このトピックでは、MongoDB Reader でサポートされるデータ型およびパラメーター、およびコードエディターを使用した設定方法について説明します。
MongoDBリーダーは、Java クライアント (MongoClient ) を使用してリモートの MongoDBデータベースに接続し、データベースからデータを読み取ります。 最新バージョンの MongoDB では、データベースロックからドキュメントロックへロック機能が改善されました。 MongoDB の強力なインデックス機能により、MongoDB Reader は MongoDB データベースから効率的にデータを読み取ることができます。
- ApsaraDB for MongoDB を使用する場合、MongoDB データベースにはデフォルトで root アカウントが設定されています。 セキュリティ上の懸念から、Data Integration では、MongoDBデータベースアカウントを使用した MongoDB データベースへのアクセスのみをサポートしています。 MongoDB との接続を追加する場合は、アクセスに root アカウントを使用しないでください。
- queries の JavaScript構文はサポートされていません。
MongoDB リーダーは、指定されたルールに従って MongoDB データベース内のデータを分割し、複数のスレッドを使用してデータベースからデータを読み取り、Data Integration で読み取り可能な形式に変換します。
データ型
MongoDB Reader は、MongoDB のほとんどのデータ型をサポートしています。 目的のデータ型がサポートされていることを確認してください。
下表に、MongoDB Reader でサポートされているデータ型を示します。
カテゴリー | MongoDB のデータ型 |
---|---|
Long | INT、LONG、DOCUMENT.INT、およびDOCUMENT.LONG |
Double | DOUBLE および DOCUMENT.DOUBLE |
String | STRING、ARRAY、DOCUMENT.STRING、DOCUMENT.ARRAY、および COMBINE |
Date | DATE および DOCUMENT.DATE |
Boolean | BOOLEAN および DOCUMENT.BOOLEAN |
Byte | BYTES および DOCUMENT.BYTES |
- DOCUMENT 型は、埋め込まれたドキュメントを格納するために使用されます。 OBJECT 型とも呼ばれます。
- 以下に、COMBINE 型の使用方法について説明します。
MongoDB Reader が MongoDBデータベースからデータを読み取る際、MongoDB ドキュメントの複数のフィールドを結合して JSON 文字列に変換します。
たとえば、doc1、doc2、および doc3 は、フィールドが異なる 3 つの MongoDBドキュメントで、キーと値のペアではなくキーで表されます。 キー a および b は、3 つのドキュメントすべてに共通のフィールドを表します。 キー x_n は、固定されていないフィールドを表します。
doc1: a b x_1 x_2
doc2: a b x_2 x_3 x_4
doc3: a b x_5
これら 3 つの MongoDB ドキュメントを MaxCompute にインポートするには、保持するフィールドを指定し、各結合文字列に名前を設定し、設定ファイルで各結合文字列のデータ型を COMBINE に設定する必要があります。 結合された各文字列の名前が、ドキュメント内のすべての既存のフィールド間で一意であることを確認してください。
"column": [ { "name": "a", "type": "string", }, { "name": "b", "type": "string", }, { "name": "doc", "type": "combine", } ]
下表に、MaxCompute の出力を示します。odps_column1 odps_column2 odps_column3 a b {x_1,x_2} a b {x_1,x_2,x_3} a b {x_5}
パラメーター
パラメーター | 説明 | 必須/任意 | デフォルト値 |
---|---|---|---|
datasource | 接続の名前を設定します。 追加された接続の名前と同じである必要があります。 コードエディターで接続を追加できます。 | 必須 | なし |
collectionName | MongoDB のコレクション名を設定します。 | 必須 | なし |
column | MongoDB の列を設定します。
|
必須 | なし |
query | MongoDBからデータを取得するためのフィルター条件を設定します。 時間タイプのデータのみサポートされています。 例えば、 "query":"{'operationTime':{'$gte':ISODate('${last_day}T00:00:00.424+0800')}}" を使用して、operationTime で指定された、 $ で指定された日の00:00 以降の時刻のデータを取得できます。 上記のJSON文字列で、$ {last_day}
は DataWorks のスケジューリングパラメーターです。 書式は $[yyyy-mm-dd] です。 必要に応じ、MongoDB でサポートされる条件演算子 ($gt、$lt、$gte、$lte)、論理演算子
(and、or)、および関数 (max、min、sum、avg、ISODate) を使用できます。 詳細については、「コードエディターを使用した MongoDB Reader
の設定」をご参照ください。
|
任意 | なし |
コードレス UI を使用した MongoDB Reader の設定
現在、コードレスユーザーインターフェイスは MongoDB Reader をサポートしていません。
コードエディターを使用した MongoDB Reader の設定
以下のコードでは、ノードが MongoDB データベースからデータを読み取るよう設定されます。 パラメーターの詳細については、前述のパラメーターの説明をご参照ください。
{
"type":"job",
"version":"2.0",// バージョン番号。
"steps":[
{
"category": "reader",
"name": "Reader",
"parameter": {
"datasource": "datasourceName", // 接続名。
"collectionName": "tag_data", // MongoDB コレクションの名前。
"query": "", // MongoDB からデータを取得する際の絞り込み条件。
"column": [
{
"name": "unique_id", // フィールド名。
"type": "string" // データ型。
},
{
"name": "sid",
"type": "string"
},
{
"name": "user_id",
"type": "string"
},
{
"name": "auction_id",
"type": "string"
},
{
"name": "content_type",
"type": "string"
},
{
"name": "pool_type",
"type": "string"
},
{
"name": "frontcat_id",
"type": "array",
"splitter": ""
},
{
"name": "categoryid",
"type": "array",
"splitter": ""
},
{
"name": "gmt_create",
"type": "string"
},
{
"name": "taglist",
"type": "array",
"splitter": " "
},
{
"name": "property",
"type": "string"
},
{
"name": "scorea",
"type": "int"
},
{
"name": "scoreb",
"type": "int"
},
{
"name": "scorec",
"type": "int"
},
{
"name": "a.b",
"type": "document.int"
},
{
"name": "a.b.c",
"type": "document.array",
"splitter": " "
}
]
},
"stepType": "mongodb"
},
{// 以下のテンプレートは、Stream Writer の設定に使用。 For more information, see the corresponding topic.
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// 許容されるダーティデータレコード数の上限。
},
"speed":{
"throttle":false,// 帯域幅スロットリングを使用するかどうかを指定。 A value of false indicates that the bandwidth is not throttled. A value of true indicates that the bandwidth is throttled. The maximum transmission rate takes effect only if you set this parameter to true.
"concurrent":1,// 同時実行スレッド数の上限。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}