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
です。
型マッピング
MongoDB | ClickHouse |
---|---|
bool, int32, int64 | 任意の数値型, String |
double | Float64, String |
date | Date, Date32, DateTime, DateTime64, String |
string | String |
document | String(をJSONとして) |
array | Array, String(をJSONとして) |
oid | String |
binary | 列にある場合はString, 配列またはドキュメントにある場合はbase64エンコードされた文字列 |
uuid (binary subtype 4) | UUID |
その他すべて | String |
MongoDBドキュメントにキーが見つからない場合(たとえば、カラム名が一致しない場合)、デフォルト値またはNULL
(カラムがnullableの場合)が挿入されます。
OID
WHERE句でString
をoid
として扱いたい場合は、テーブルエンジンの最後の引数にカラム名を指定してください。
これは、MongoDBでデフォルトでoid
型を持つ_id
カラムでレコードをクエリする際に必要となる場合があります。
テーブルの_id
フィールドが他の型(たとえばuuid
)の場合、空のoid_columns
を指定する必要があります。さもないと、このパラメータのデフォルト値である_id
が使用されます。
デフォルトでは、_id
のみがoid
カラムとして扱われます。
この場合、出力は0
になります。ClickHouseはanother_oid_column
がoid
型であることを知らないため、修正しましょう:
サポートされている句
単純な式を持つクエリのみがサポートされています(例えば、WHERE field = <定数> ORDER BY field2 LIMIT <定数>
)。
そのような式はMongoDBクエリ言語に変換され、サーバー側で実行されます。
この制限をすべて無効にするには、mongodb_throw_on_unsupported_queryを使用してください。
その場合、ClickHouseはクエリを最善の努力で変換しようとしますが、これにより全テーブルスキャンやClickHouse側での処理が発生する可能性があります。
リテラルの型を明示的に設定することが常に望ましいです。なぜならMongoは厳密な型フィルターを必要とするからです。
たとえば、Date
でフィルタリングしたい場合:
これは機能しません。Mongoは文字列をDate
にキャストしないため、手動でキャストする必要があります。
これはDate
、Date32
、DateTime
、Bool
、UUID
に適用されます。
使用例
MongoDBに sample_mflix データセットがロードされていると仮定します。
MongoDBのコレクションからデータを読み取ることを可能にするClickHouseのテーブルを作成します:
クエリ:
トラブルシューティング
DEBUGレベルのログで生成されたMongoDBクエリを見ることができます。