このトピックでは、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 の列を設定します。
  • name:列の名前を設定します。
  • type:列のデータ型を設定します。
  • splitter:区切り文字を設定します。 このパラメーターは、文字列を配列に変換する必要がある場合にのみ指定してください。 配列は、MongoDB ではサポートしていますが、Data Integration ではサポートされていません。 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"
            }
        ]
    }
}
現在、配列からデータ要素を取得することはできません。