MongoDB
MongoDBエンジンはリードオンリーのテーブルエンジンであり、リモートの MongoDB コレクションからデータを読み取ることができます。
MongoDB v3.6+ サーバーのみがサポートされています。
Seed list(mongodb+srv
) はまだサポートされていません。
テーブルの作成
エンジンパラメータ
パラメータ | 説明 |
---|---|
host:port | MongoDBサーバーのアドレス。 |
database | リモートデータベース名。 |
collection | リモートコレクション名。 |
user | MongoDBユーザー。 |
password | ユーザーパスワード。 |
options | オプション。MongoDB接続文字列の オプション をURL形式の文字列で指定。例: 'authSource=admin&ssl=true' |
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 | 任意の数値型(Decimalを除く), Boolean, String |
double | Float64, String |
date | Date, Date32, DateTime, DateTime64, String |
string | String, 正しくフォーマットされた場合の任意の数値型(Decimalを除く) |
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の _id
カラムが oid
型であるため、レコードを _id
カラムでクエリする際に必要です。
テーブル内の _id
フィールドが他の型、例えば uuid
の場合、空の oid_columns
を指定する必要があります。さもなくば、このパラメータのデフォルト値 _id
が使用されます。
デフォルトでは、_id
のみが oid
カラムとして扱われます。
この場合、出力は 0
になります。ClickHouseは another_oid_column
が oid
型であることを認識しないため、これを修正しましょう:
サポートされる句
単純な式を持つクエリのみがサポートされています(例えば、 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のテーブルを作成します:
クエリ:
トラブルシューティング
DEBUGレベルのログで生成されたMongoDBクエリを確認できます。