メインコンテンツまでスキップ
メインコンテンツまでスキップ

MongoDB

MongoDBエンジンはリモートの MongoDB コレクションからデータを読み取ることができる読み取り専用テーブルエンジンです。

MongoDB v3.6+ サーバーのみがサポートされています。
Seed list(mongodb+srv) はまだサポートされていません。

注記

問題が発生した場合は、問題を報告してください。また、レガシー実装を使用してみてください。
これは非推奨であり、次のリリースで削除されることに注意してください。

テーブルの作成

エンジンパラメータ

  • host:port — MongoDBサーバーのアドレス。

  • database — リモートデータベースの名前。

  • collection — リモートコレクションの名前。

  • user — MongoDBユーザー。

  • password — ユーザーパスワード。

  • options — MongoDB接続文字列オプション(オプションのパラメータ)。

ヒント

MongoDB Atlasクラウドを使用している場合、接続URLは「Atlas SQL」オプションから取得できます。
Seed list(mongodb**+srv**)はまだサポートされていませんが、将来のリリースで追加される予定です。

URIを渡すこともできます:

エンジンパラメータ

  • uri — MongoDBサーバーの接続URI

  • collection — リモートコレクションの名前。

型のマッピング

MongoDBClickHouse
bool, int32, int64任意の数値型, String
doubleFloat64, String
dateDate, Date32, DateTime, DateTime64, String
stringString, UUID
documentString(JSONとして)
arrayArray, String(JSONとして)
oidString
binaryカラムにある場合はString、配列またはドキュメントにある場合はbase64エンコードされた文字列
その他すべてString

MongoDBドキュメントにキーが見つからない場合(例えば、カラム名が一致しない場合)、デフォルト値または NULL(カラムがnullableの場合)が挿入されます。

サポートされる句

単純な式を持つクエリのみがサポートされています(例えば、WHERE field = <constant> ORDER BY field2 LIMIT <constant>)。
このような式はMongoDBのクエリ言語に変換され、サーバー側で実行されます。
このすべての制限を無効にするには、 mongodb_throw_on_unsupported_query を使用してください。
その場合、ClickHouseはクエリを最善の努力で変換しようとしますが、完全なテーブルスキャンおよびClickHouse側での処理を引き起こす可能性があります。

注記

リテラルの型は明示的に設定することが常に良いです。Mongoは厳格な型フィルタを要求します。
例えば、Dateでフィルタしたい場合:

これは動作しません。Mongoは文字列を Date にキャストしないため、手動でキャストする必要があります:

これは Date, Date32, DateTime, Bool, UUID に適用されます。

使用例

MongoDBに sample_mflix データセットがロードされていると仮定します。

MongoDBコレクションからデータを読み取ることができるClickHouseのテーブルを作成します:

クエリ:

トラブルシューティング

生成されたMongoDBクエリはDEBUGレベルのログに表示されます。

実装の詳細は、mongocxxおよびmongocのドキュメントで確認できます。