Overview
バージョン 2.3 の新機能:
デフォルトでは、 mongosqldは接続された MongoDB インスタンスの各コレクションをサンプリングし、スキーマのリレーショナル表現を生成し、メモリにキャッシュします。
注意
authenticationを有効にしている場合は、MongoDB ユーザーに適切な権限があることを確認してください。 以下の「ユーザー権限」を参照してください。
デフォルトでは、 mongosqldはスキーマ生成後にデータを自動的に再サンプリングしません。 --schemaRefreshIntervalSecsオプションを指定すると、 mongosqldにデータを自動的に再サンプリングし、固定スケジュールでスキーマを再生成するように指示します。
mongosqldが作成するスキーマが BI ワークロードのニーズを満たさない場合は、必要に応じてスキーマ ファイルを手動で生成し、編集できます。
サンプリング モードの詳細については、「サンプリング モード参照チャート 」を参照してください。
キャッシュされたサンプリングのユーザー権限
MongoDB インスタンスが認証を使用し、キャッシュされたサンプリングを使用する場合は、BI Connector インスタンスも認証を使用する必要があります。 mongosqldプログラムを介して MongoDB に接続する管理者ユーザーには、データのサンプリング元になるすべての名前空間からの読み取り権限が必要です。
すべての名前空間のサンプリング
すべての名前空間をサンプリングする場合は、管理者ユーザーに次の特権が必要です。
listDatabases(クラスター上)listCollections各データベースfind各データベース
または、組み込みのreadAnyDatabaseロールを持つユーザーを作成します。
use admin db.createUser( { user: "<username>", pwd: "<password>", roles: [ { "role": "readAnyDatabase", "db": "admin" } ] } )
注意
readAnyDatabaseロールをユーザーに付与する前に、このロールに含まれるすべての特権に注意してください。
すべての名前空間をサンプリングするには、 オプションを指定せずにmongosqld --sampleNamespacesを起動します。
mongosqld --auth --mongo-username <username> --mongo-password <password>
特定の名前空間のサンプル
特定の名前空間をサンプリングするには、管理者ユーザーに次の特権が必要です。
listCollectionsすべてのコレクションがサンプリングされる各データベースのfind各コレクションまたはすべてのコレクションがサンプリングされる各データベースの場合
または、組み込みのreadAnyDatabaseロールを持つユーザーを作成します。 このロールを持つユーザーの作成例については、「すべての名前空間のサンプル」セクションを参照してください。
注意
readAnyDatabaseロールをユーザーに付与する前に、このロールに含まれるすべての特権に注意してください。
次の例では、 データベース内のすべてのコレクションをサンプリングするために必要な最小限の特権を持つ mongo shell にtest カスタムロール を作成します。
新しいユーザーを作成し、新しく作成したロールを割り当てます
db.createUser( { user: "<username>", pwd: "<password>", roles: [ "samplingReader" ] } )
注意
上記の例のユーザーにはlistDatabases特権がないため、mongosqld を実行中の場合は、 --sampleNamespacesオプションを使用してデータをサンプリングするデータベースを指定する必要があります
認証を有効にして を起動するmongosqld
認証を有効にしてmongosqldを実行し、 --sampleNamespacesオプションを使用してtestデータベース内のすべてのコレクションのデータをサンプリングします。
mongosqld --auth --mongo-username <username> --mongo-password <password> \ --sampleNamespaces 'test.*'