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

MongoDB

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

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

テーブルの作成

エンジンパラメータ

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

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

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

  • user — MongoDBユーザー。

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

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

  • oid_columns - WHERE句でoidとして扱うべきカラムのカンマ区切りリスト。デフォルトは_idです。

ヒント

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

別の方法として、URIを渡すこともできます:

エンジンパラメータ

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

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

  • oid_columns - WHERE句でoidとして扱うべきカラムのカンマ区切りリスト。デフォルトは_idです。

型マッピング

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

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

OID

WHERE句でStringoidとして扱いたい場合は、テーブルエンジンの最後の引数にカラム名を指定してください。 これは、MongoDBでデフォルトでoid型を持つ_idカラムでレコードをクエリする際に必要となる場合があります。 テーブルの_idフィールドが他の型(たとえばuuid)の場合、空のoid_columnsを指定する必要があります。さもないと、このパラメータのデフォルト値である_idが使用されます。

デフォルトでは、_idのみがoidカラムとして扱われます。

この場合、出力は0になります。ClickHouseはanother_oid_columnoid型であることを知らないため、修正しましょう:

サポートされている句

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

注記

リテラルの型を明示的に設定することが常に望ましいです。なぜならMongoは厳密な型フィルターを必要とするからです。
たとえば、Dateでフィルタリングしたい場合:

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

これはDateDate32DateTimeBoolUUIDに適用されます。

使用例

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

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

クエリ:

トラブルシューティング

DEBUGレベルのログで生成されたMongoDBクエリを見ることができます。

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