フェデレーティッドデータベースインスタンスのクエリ
項目一覧
Atlas Data Federation のMongoDBクエリ言語(MQL)を使用して、データ ストアのデータをクエリおよび分析できます。 Atlas Data Federation はほとんどの標準サーバー コマンドをサポートしていますが、すべての標準サーバーコマンドではありません。 サポートされている MongoDB サーバーコマンドとサポートされていないMongoDBサーバーコマンドと集計パイプライン ステージの詳細については、 サポートされているMongoDBコマンド を参照してください。
データ ストア上のデータをクエリするには、フェデレーティッドデータベースインスタンスのストレージ構成に次の要素を定義する設定が含まれている必要があります。
フェデレーティッドデータベースインスタンス ストア。
フェデレーティッドデータベースインスタンス フェデレーティッドデータベースインスタンス ストアにマップされるフェデレーティッドデータベースインスタンス。
Atlas UIVisual Editor またはJSON Editor 、Atlas Data Federation CLI コマンド、Atlas Data Federation API エンドポイントを使用して、データストアのフェデレーティッドデータベースインスタンス ストレージ構成 を作成または更新できます。フェデレーティッドデータベースインスタンスのストレージ構成の詳細については、「フェデレーティッドデータベースインスタンスのデータストアの定義 」を参照してください。
Atlas Data Federation は、データ ストア内のデータに対してフェデレーティッドデータベースインスタンス構成で指定した仮想データベースとコレクションを作成します。 フェデレーティッドデータベースインスタンスに接続してクエリ を実行すると、Atlas Data Federation はデータに対してクエリを処理し、クエリ結果を返します。 オプションで、クエリの Atlas Data Federation が処理するデータ量に制限を設定して、コストを管理できます。
注意
Atlas Data Federation は、ドキュメント内のフィールドの順序を保持しない列指向ストレージを使用します。 したがって、Atlas Data Federation は、埋め込みドキュメント等価クエリやドキュメント フィールドでのソートなど、フィールド順序を区別するクエリをサポートしていません。
フェデレーティッドデータベースインスタンスに対してクエリを実行するには、データベースユーザーは次のいずれかのロールを持っている必要があります。
クエリを実行する 名前空間 の 検索 特権を持つ カスタムロール
フェデレーティッドデータベースインスタンスに対して最大 30 個のクエリを同時に実行できます。
S3バケットまたは Azure Blog ストレージ コンテナ内のデータ。
MongoDB Atlas クラスター内のドキュメント。
Atlas Online Archive にアーカイブされたデータ。
一般にアクセス可能なURLでホストされているファイル内のデータ。
次のセクションには、データ ストア内のデータに対してクエリを実行する方法に関連する情報が含まれています。
S3 でのデータのクエリ
フェデレーティッドデータベースインスタンス を配置 する際、読み取りと書込みの両方の権限を持つ S3 バケット またはAmazon Web Services S3 s3 :PutObject を指定した場合 権限に応じて、 {313$out
を S に使用してクエリ結果を S3 バケットに保存することもできます。
S3データストアでオブジェクトを正常に作成または更新すると、Data Federation は後続の読み取り要求に対してそのオブジェクトの最新バージョンを返し、オブジェクトのすべてのリスト操作にも変更が反映されます。 クエリに複数のステージが含まれている場合、各ステージは、そのステージが処理されるにつれてデータ ストアから利用可能な最新データを受け取ります。
デフォルトでは、Atlas Data Federation は、 S 3データ ストアの Data Federation に対するクエリに対して、特定の順序でドキュメントを返しません。 Atlas Data Federation はパーティションを同時に読み取り、クエリで$sort
を使用して順序を定義しない限り、基礎となるストレージ応答順序によって Atlas Data Federation が最初に返されるドキュメントが決まります。 たとえば、同じfindOne()
クエリを 2 回実行すると、異なるドキュメントが表示されます。また、 $skip
を使用すると、クエリで$sort
が使用されていない場合、異なるドキュメントがスキップされる可能性があります。
クエリの結果を返すために Atlas Data Federation が処理するデータ量には「Data Processed」コストが発生し、Atlas Data Federation が返すデータ量は「Data Returned」コストが発生します。 たとえば、10 GB のファイルの場合、「返されたデータ」コストに加えて、次の「データ処理」コストが発生します。
パーティションがない場合、Atlas Data Federation はファイル全体を読み取りて、クエリの結果を返します。 したがって、10 GB の「Data Processed」コストが発生します。
それぞれ 1 GB のパーティションが 10 個ある場合、Atlas Data Federation は 1 つのパーティションをターゲットにして読み取りを行います。 したがって、1 GB の「Data Processed」コストが発生します。
プロジェクト内のすべてのフェデレーティッドデータベースインスタンスに対してクエリ制限を設定して、データの処理量を制限 できます。 詳細については、「 Atlas Data Federation のクエリ制限の管理 」を参照してください。
注意
データをパーティショニングしても、データ処理コストの削減は保証されません。 たとえば、すべてのデータをクエリする空の$match
クエリを実行した場合、パーティションの数に関係なく、Atlas Data Federation はコレクション全体を読み取る必要があります。
Azure BLOB ストレージでのデータのクエリ
フェデレーティッドデータベースインスタンスを配置するときは、読み取りと書込みの両方の権限を持つ Azure Blog ストレージ コンテナを指定できます。
クエリの結果を返すために Atlas Data Federation が処理するデータ量には「Data Processed」コストが発生し、Atlas Data Federation が返すデータ量は「Data Returned」コストが発生します。 たとえば、10 GB のファイルの場合、「返されたデータ」コストに加えて、次の「データ処理」コストが発生します。
パーティションがない場合、Atlas Data Federation はファイル全体を読み取りて、クエリの結果を返します。 したがって、10 GB の「Data Processed」コストが発生します。
それぞれ 1 GB のパーティションが 10 個ある場合、Atlas Data Federation は 1 つのパーティションをターゲットにして読み取りを行います。 したがって、1 GB の「Data Processed」コストが発生します。
プロジェクト内のすべてのフェデレーティッドデータベースインスタンスに対してクエリ制限を設定して、データの処理量を制限 できます。 詳細については、「 Atlas Data Federation のクエリ制限の管理 」を参照してください。
Google Cloud PlatformストレージでのデータのクエリGoogle Cloud Platform
フェデレーティッドデータベースインスタンスを配置するときに、読み取り権限と書込み権限の両方を持つGoogle CloudGoogle Cloud Platform Platform Storageバケットを指定できます。
クエリの結果を返すために Atlas Data Federation が処理するデータ量には「Data Processed」コストが発生し、Atlas Data Federation が返すデータ量は「Data Returned」コストが発生します。 たとえば、10 GB のファイルの場合、「返されたデータ」コストに加えて、次の「データ処理」コストが発生します。
パーティションがない場合、Atlas Data Federation はファイル全体を読み取りて、クエリの結果を返します。 したがって、10 GB の「Data Processed」コストが発生します。
それぞれ 1 GB のパーティションが 10 個ある場合、Atlas Data Federation は 1 つのパーティションをターゲットにして読み取りを行います。 したがって、1 GB の「Data Processed」コストが発生します。
プロジェクト内のすべてのフェデレーティッドデータベースインスタンスに対してクエリ制限を設定して、データの処理量を制限 できます。 詳細については、「 Atlas Data Federation のクエリ制限の管理 」を参照してください。
Atlas クラスターでのデータのクエリ
フェデレーティッドデータベースインスタンスを介して Atlas クラスターに対してクエリを実行すると、Atlas Data Federation はクラスターをクエリするときに、フェデレーティッドデータベースインスタンスへの接続に使用したappName
に基づいてappName
を設定します。 たとえば、 appName
をmyApp
に設定してフェデレーティッドデータベースインスタンスに接続すると(つまり appName = "myApp"
)では、クラスターに次の接続を実行するときに appName
が設定されAtlas Data Federation 。
atlas-data-federation|myApp
Atlas コレクションの 1 つだけにマップされている Atlas Data Federation 内のコレクションをクエリすると、Atlas Data Federation はプロキシとして機能し、クエリを Atlas に転送します。 When acting as a proxy, Atlas Data Federation doesn't scan data into its virtual collection to process the query thus improving performance and reducing cost. この最適化は、複数の Atlas コレクションにマップされている Atlas Data Federation コレクションに対するクエリでは 使用できません 。
例
次のフェデレーティッドデータベースインスタンス・ストレージの構成を検討してください。
{ "stores" : [ { "name" : "atlas-store", "provider": "atlas", "clusterName": "myCluster", "projectId": "5e2211c17a3e5a48f5497de3" } ], "databases" : [ { "name" : "atlas-db", "collections" : [ { "name" : "foo", "dataSources" : [ { "storeName" : "atlas-store", "database" : "myFooData", "collection" : "foo" } ] }, { "name" : "barbaz", "dataSources" : [ { "storeName" : "atlas-store", "database" : "myBarData", "collection" : "bar" }, { "storeName" : "atlas-store", "database" : "myBazData", "collection" : "baz" } ] } ] } ] }
上記のストレージ構成では、Atlas Data Federation はfoo
コレクションに対するクエリのプロキシとして機能し、クエリを Atlas に転送します。 このパフォーマンスとコストの最適化は、 barbaz
が複数の Atlas コレクションにマッピングされているため、 barbaz
コレクションのクエリでは使用できません。
Atlas$out
また、 を してAtlas にクエリ結果を保存することもできます。
Atlas クラスター上のコレクション内のドキュメントを正常に作成または更新すると、Data Federation は後続の読み取りリクエストとコレクションのすべてのリスト操作に対してそのドキュメントの最新バージョンを返し、変更を反映します。 クエリに複数のステージが含まれている場合、各ステージは、そのステージが処理されるにつれてデータ ストアから利用可能な最新データを受け取ります。
Atlas は、クラスター データに対するクエリを Atlas クラスター監査ログ に記録します。 データベースユーザーのログエントリの形式は次のとおりです。
<SERVICE_NAME>-<CUSTOMER_DATA_LAKE_NAME>-<DATABASE_USER_NAME>
たとえば、Atlas で"user" : "CN=atlasDataLake-DataLake0-test_datalake0"
として構成されているデータベースユーザーの場合、Atlas クラスター監査ログのログエントリは次のようになります。
{ "atype" : "authenticate", "ts" : { "$date" : "2022-04-29T13:17:54.020+00:00" }, "local" : { "ip" : "XXXX", "port" : 27017 }, "remote" : { "ip" : "XXXXX", "port" : 10844 }, "users" : [ { "user" : "CN=atlasDataLake-DataLake0-test_datalake0", "db" : "$external" } ], "roles" : [ { "role" : "backup", "db" : "admin" }, { "role" : "readWriteAnyDatabase", "db" : "admin" }, { "role" : "clusterMonitor", "db" : "admin" }, { "role" : "enableSharding", "db" : "admin" }, { "role" : "atlasAdmin", "db" : "admin" }, { "role" : "dbAdminAnyDatabase", "db" : "admin" } ], "param" : { "user" : "CN=atlasDataLake-DataLake0-test_datalake0", "db" : "$external", "mechanism" : "MONGODB-X509" }, "result" : 0 }
注意
Atlas クラスター監査ログでは、接続メカニズムは常にMONGODB-X509
です。
Atlas Online Archive でのデータのクエリ
クエリの場合、Atlas Data Federation は、Atlas Online Archive の作成中にフィールドに対して作成したパーティションを使用します。 パーティション内のフィールドの順序は、複合インデックスの場合と同様に重要です。 データは、最初のフィールド、その後 2 番目のフィールドという順にクエリ用に最適化されます。 Atlas Data Federation は、パーティションを順番に解析します。クエリで特定のパーティションが省略される場合、Atlas Data Federation は省略されたパーティションに続くパーティションの使用効率が低下します。
Atlas Data Federation は、パーティションがないフィールドに対するクエリをサポートする際、パフォーマンスが低下します。
HTTPまたは HTTPS URLでのデータのクエリ
Data Federation は、コレクション内の各URLに対して 1 つのパーティションも作成します。 フェデレーティッドデータベースインスタンスに接続してクエリを実行すると、Data Federation はデータに対してクエリを処理し、クエリ結果を返します。
フェデレーティッドクエリの実行
Atlas Data Federation を使用して、Atlas クラスター、 S 3バケットまたは Azure Blob Storage コンテナ、 HTTP URL、オンライン アーカイブ内のデータの統合ビューをクエリおよび分析できます。 フェデレーティッドクエリの場合、フェデレーティッドデータベースインスタンスのストレージ構成には、以下を定義する設定が含まれている必要があります。
S 3またはAzure 、Atlas、Atlas、Online Archive、 HTTPストア。
注意
Atlas Data Federation は、クラウドプロバイダー間のフェデレーティッドクエリをサポートしていません。 そのため、 Amazon Web Services S3バケットおよびAzure Blob Storage コンテナに保存されているデータに対してフェデレーティッドクエリを実行することはできません。 Atlasクラスターをサポートしているクラウドプロバイダーに関係なく、 AtlasクラスターとAmazon Web Services S3バケットまたはAzure Blob ストレージ コンテナのデータに対してフェデレーティッドクエリを同時に実行できます。
S 3バケットまたは Azure Blog ストレージ、Atlas クラスター、オンラインアーカイブ、 HTTPストアにマップされる仮想コレクションを持つフェデレーティッドデータベースインスタンス。
フェデレーティッドデータベースインスタンスのストレージ構成を作成または更新するには、Atlas UI Visual EditorまたはJSON Editor 、Atlas Data Federation CLIコマンド、Atlas Data Federation APIエンドポイントを使用します。 フェデレーティッドデータベースインスタンスのストレージ構成の詳細については、「フェデレーティッドデータベースインスタンスのデータストアの定義 」を参照してください。
フェデレーティッドデータベースインスタンスに接続してフェデレーティッドクエリを実行すると、Data Federation は Atlas クラスター、 S 3バケットまたは Azure Blob Storage コンテナ、および仮想データベースとコレクション内のHTTP URLのデータを組み合わせて、データの和集合を返します。結果。
クエリ制限の構成
Atlas Data Federation が処理するクエリのデータ量を制限して、コストを管理できます。 Atlas Data Federation がクエリの処理するデータ量を制限するには、フェデレーティッドデータベースインスタンスごとまたはプロジェクト内のすべてのフェデレーティッドデータベースインスタンスに対してクエリ制限を構成できます。 データの処理量が設定した該当制限値に達すると、Atlas Data Federation は新しいクエリを実行せず、制限に達したというエラーをクライアント アプリケーションに返します。 詳細については、「 Atlas Data Federation のクエリ制限の管理 」を参照してください。
トラブルシューティング
エラー:現在、Atlas Data Federation のクエリ処理の待機時間が増加しています。 エンジニアリング チームが調査しています。 通常のサービスはすぐに再開されます。もう一度お試しください。
Atlas Data Federation は、 リソースの競合 により Atlas Data Federation がクエリを実行できない場合にのみこのエラーを返します。 クエリを再度実行することをお勧めします。