$out
$outは集計パイプラインによって返されたドキュメントを受け取り、指定されたコレクションに書き込みます。 $out演算子は、集計パイプラインの 最後のステージ である必要があります。 Atlas Data Federation では、次のいずれかに フェデレーティッドクエリ を使用する場合に、 $out を使用して、 で サポートさ れているフェデレーティッドデータベースインスタンス ストアまたは複数の サポートさ れているフェデレーティッドデータベースインスタンス ストアのいずれかからデータを書込むことができます。
Atlas クラスター名前空間
Amazon Web Services 読み取りおよび書込み権限を持つS3バケット
読み取りおよび書込み権限を持つAzure Blog ストレージ コンテナ
$out を使用するには、フェデレーティッドデータベースインスタンスに 接続 する必要があります。
必要な権限
次のものが必要です。
読み取りおよび書込み権限を持つ S3 バケット用に構成されたフェデレーティッドデータベースインスタンス、または s3 :PutObject 権限。
atlasAdminロールを持つ MongoDB ユーザー、または
outToS3
権限を持つカスタムロール。
次のものが必要です。
Azure ロール を持つ Azure Blog ストレージ用に構成されたフェデレーティッドデータベースインスタンス 。
atlasAdminロールを持つ MongoDB ユーザー、または
outToAzure
権限を持つカスタムロール。
次のものが必要です。
GCP サービスアカウントにアクセスできる Google Cloud Storage バケット用に構成されたフェデレーティッドデータベースインスタンス。
atlasAdminロールを持つ MongoDB ユーザー、または
outToGCP
権限を持つカスタムロール。
注意
$outを使用して、同じ Atlas クラスター上の別のデータベース内のコレクションに書き込むには、Atlas クラスターが MongoDB バージョン5.0以降である必要があります。
次のいずれかのロールを持つデータベースユーザーである必要があります。
次の特権を持つカスタムロール:
構文
1 { 2 "$out": { 3 "s3": { 4 "bucket": "<bucket-name>", 5 "region": "<aws-region>", 6 "filename": "<file-name>", 7 "format": { 8 "name": "<file-format>", 9 "maxFileSize": "<file-size>", 10 "maxRowGroupSize": "<row-group-size>", 11 "columnCompression": "<compression-type>" 12 }, 13 "errorMode": "stop"|"continue" 14 } 15 } 16 }
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "<storage-account-url>", 5 "containerName": "<container-name>", 6 "region": "<azure-region>", 7 "filename": "<file-name>", 8 "format": { 9 "name": "<file-format>", 10 "maxFileSize": "<file-size>", 11 "maxRowGroupSize": "<row-group-size>", 12 "columnCompression": "<compression-type>" 13 }, 14 "errorMode": "stop"|"continue" 15 } 16 } 17 }
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "<bucket-name>", 5 "region": "<aws-region>", 6 "filename": "<file-name>", 7 "format": { 8 "name": "<file-format>", 9 "maxFileSize": "<file-size>", 10 "maxRowGroupSize": "<row-group-size>", 11 "columnCompression": "<compression-type>" 12 }, 13 "errorMode": "stop"|"continue" 14 } 15 } 16 }
1 { 2 "$out": { 3 "atlas": { 4 "projectId": "<atlas-project-ID>", 5 "clusterName": "<atlas-cluster-name>", 6 "db": "<atlas-database-name>", 7 "coll": "<atlas-collection-name>" 8 } 9 } 10 }
フィールド
フィールド | タイプ | 説明 | 必要性 | ||||
---|---|---|---|---|---|---|---|
| オブジェクト | 集約パイプラインからドキュメントを書き込むロケーション。 | 必須 | ||||
| string | 集計パイプラインからドキュメントを書き込むS 3バケットの名前。 S 3への生成された呼び出しは、 たとえば、
| 必須 | ||||
| string | バケットがホストされているAmazon Web Servicesリージョンの名前。 省略した場合、 はフェデレーティッドデータベースインスタンス構成を使用して、指定された | 任意 | ||||
| string | 集計パイプラインからドキュメントを書き込むファイルの名前。ファイル名は、定数であることも、$out ステージに達するドキュメント内のフィールドから動的に作成されることもできます。指定したファイル名式はいずれも 重要: S3上に新しく生成されたファイルと同じ名前とパスを持つファイルがある場合、$outは既存のファイルを新しく生成されたファイルで上書きします。 S 3への生成された呼び出しは、 たとえば、
| 必須 | ||||
| オブジェクト | S 3内の ファイルの詳細。 | 必須 | ||||
s3 .format .name | 列挙 | S 3のファイルの形式。 値は次のいずれかになります。
1この形式の場合、 $outはMongoDB 拡張 JSON形式でデータを書込みます。 詳細については、「制限」を参照してください。 | 必須 | ||||
s3 .format .maxFileSize | バイト | S 3内のファイルの最大サイズ。 現在のファイルのファイル サイズ制限に達すると、 S 3に新しいファイルが作成されます。 最初のファイルでは、ファイル名拡張子の前に たとえば、 ドキュメントが
省略した場合、デフォルトは | 任意 | ||||
s3 .format .maxRowGroupSize | string | Perquet ファイル形式のみでサポートされています。 Farquet ファイルへの書き込み時に使用する最大行グループ サイズ。 省略した場合、デフォルトは | 任意 | ||||
s3 .format .columnCompression | string | Perquet ファイル形式のみでサポートされています。 Perquet ファイルをフォーマットするときに、Parquet ファイル内のデータを圧縮するために適用する圧縮タイプ。 有効な値は以下のとおりです。
省略した場合、デフォルトは 詳細については、 「サポートされているデータ形式」 を参照してください。 | 任意 | ||||
| 列挙 | ドキュメントの処理時にエラーが発生した場合に Atlas Data Federation が続行する方法を指定します。 たとえば、 Atlas Data Federation Atlas Data FederationがCSVファイルに書き込みを行っているときにドキュメント内の配列を検出した場合、 Atlas Data Federationはこの値を使用して、ドキュメントをスキップして他のドキュメントを処理するかどうかを決定します。 有効な値は以下のとおりです。
省略した場合、デフォルトは | 任意 |
フィールド | タイプ | 説明 | 必要性 | ||||
---|---|---|---|---|---|---|---|
| オブジェクト | 集約パイプラインからドキュメントを書き込むロケーション。 | 必須 | ||||
| string | 集計パイプラインからドキュメントを書き込む Azure ストレージ アカウントの URL 。 | 必須 | ||||
| string | 集計パイプラインからドキュメントを書き込むAzure Blob ストレージ コンテナの名前。 | 必須 | ||||
| string | Blob ストレージ コンテナをホストするAzureリージョンの名前。 | 必須 | ||||
| string | 集計パイプラインからドキュメントを書き込むファイルの名前。 定数値、または | 必須 | ||||
| オブジェクト | Azure Blog Storage 内の ファイルの詳細。 | 必須 | ||||
azure .format .name | 列挙 | Azure Blog Storage でのファイルの形式。 値は次のいずれかになります。
1この形式の場合、 $outはMongoDB 拡張 JSON形式でデータを書込みます。 詳細については、「制限」を参照してください。 | 必須 | ||||
azure .format .maxFileSize | バイト | Azure Blog Storage 内のファイルの最大サイズ。 現在のファイルのファイル サイズ制限に達すると、 $outは自動的に新しいファイルを作成します。 最初のファイルは、名前の後に たとえば、 ドキュメントが
省略した場合、デフォルトは | 任意 | ||||
azure .format .maxRowGroupSize | string | Perquet ファイル形式のみでサポートされています。 Farquet ファイルへの書き込み時に使用する最大行グループ サイズ。 省略した場合、デフォルトは | 任意 | ||||
azure .format .columnCompression | string | Perquet ファイル形式のみでサポートされています。 Perquet ファイルをフォーマットするときに、Parquet ファイル内のデータを圧縮するために適用する圧縮タイプ。 有効な値は以下のとおりです。
省略した場合、デフォルトは 詳細については、 「サポートされているデータ形式」 を参照してください。 | 任意 | ||||
| 列挙 | ドキュメントの処理中にエラーが発生した場合に Atlas Data Federation が続行する方法を指定します。 有効な値は以下のとおりです。
省略した場合、デフォルトは 詳細については、「 エラー 」を参照してください。 | 任意 |
フィールド | タイプ | 説明 | 必要性 | |
---|---|---|---|---|
| オブジェクト | 集約パイプラインからドキュメントを書き込むロケーション。 | 必須 | |
| string | 集計パイプラインからドキュメントを書き込む Google Cloud Storage バケットの名前。 Google Cloud への生成された呼び出しでは、 たとえば、
| 必須 | |
| string | バケットがホストされているAmazon Web Servicesリージョンの名前。 省略した場合、 はフェデレーティッドデータベースインスタンス構成を使用して、指定された | 任意 | |
| string | 集計パイプラインからドキュメントを書き込むファイルの名前。ファイル名は、定数であることも、$out ステージに達するドキュメント内のフィールドから動的に作成されることもできます。指定したファイル名式はいずれも 生成された Google Cloud Storage への呼び出しにより、 たとえば、
| 必須 | |
| オブジェクト | Google Cloud Storage 内のファイルの詳細。 | 必須 | |
gcs .format .name | 列挙 | Google Cloud Storage 内のファイルの形式。値は次のいずれかになります。
1この形式の場合、 $outはMongoDB 拡張 JSON形式でデータを書込みます。 詳細については、「制限」を参照してください。 | 必須 |
フィールド | タイプ | 説明 | 必要性 |
---|---|---|---|
| オブジェクト | 集約パイプラインからドキュメントを書き込むロケーション。 | 必須 |
| string | Atlas クラスターの名前。 | 必須 |
| string | Atlas クラスター上のコレクションの名前。 | 必須 |
| string | コレクションを含む Atlas クラスター上のデータベースの名前。 | 必須 |
| string | Atlas クラスターを含むプロジェクトの一意の識別子。 プロジェクト ID は、フェデレーティッドデータベースインスタンスを含むプロジェクトの ID である必要があります。 省略した場合、デフォルトはフェデレーティッドデータベースインスタンスを含むプロジェクトの ID。 | 任意 |
オプション
オプション | タイプ | 説明 | 必要性 | |
---|---|---|---|---|
| ブール値 | バックグラウンドで集計操作を実行するためのフラグ。 省略した場合、デフォルトは
現在実行中のクエリがフェデレーティッドデータベースインスタンスへの接続を完了または切断するのを待たずに、他の新しいクエリを送信すると同時に、クエリがバックグラウンドで実行され続ける場合は、このオプションを使用します。 | 任意 |
例
ファイル名を作成
次の例は、定数 string から、または $out ステージに到達するドキュメント内の同じまたは異なるデータ型のフィールドからファイル名を動的に作成するための $out 構文を示しています。
簡単な string の例
例
1 GiB のデータを圧縮BSONファイルとしてmy-s3-bucket
という名前のS 3バケットに書込み (write) したい。
次の$out構文を使用します。
1 { 2 "$out": { 3 "s3": { 4 "bucket": "my-s3-bucket", 5 "filename": "big_box_store/", 6 "format": { 7 "name": "bson.gz" 8 } 9 } 10 } 11 }
s3.region
は省略されているため、Atlas Data Federation は、 my-s3-bucket
という名前のバケットがホストされているリージョンをストレージ構成から決定します。 $outは、次の 5 つの圧縮BSONファイルを書込みます。
$outが
big_box_store/1.bson.gz
と名前を付けるファイルへの最初の200 MiB のデータ。s3.filename
の値は、各ファイル名で定数として機能します。 この値は、ドキュメント フィールドまたは値に依存しません。s3.filename
は区切り文字で終わるため、Atlas Data Federation は 定数の後にカウンターを追加します。区切り文字で終了しない場合、Atlas Data Federation は
big_box_store.1.bson.gz
のように 定数と カウンターの間に.
を追加します。s3.format.maxFileSize
を使用して最大ファイルサイズを変更しなかったため、Atlas Data Federation はデフォルト値の 200 MiB を使用します。
$outが
big_box_store/2.bson.gz
と名前を付ける新しいファイルへの 2 つ目の200 MiB のデータ。$outが
big_box_store/3.bson.gz
からbig_box_store/5.bson.gz
までの名前を付けるさらに 3 つのファイル。
ドキュメントの単一フィールド
例
90という名前の S3 バケットに JSON ファイルに MiBmy-s3-bucket
のデータを書込みたいと考えています。
次の$out構文を使用します。
1 { 2 "$out": { 3 "s3": { 4 "bucket": "my-s3-bucket", 5 "region": "us-east-1", 6 "filename": {"$toString": "$saleDate"}, 7 "format": { 8 "name": "json", 9 "maxFileSize": "100MiB" 10 } 11 } 12 } 13 }
$outは、バケットのルートにあるJSONファイルに90 MiB のデータを書込みます。 各JSONファイルには、同じsaleDate
値を持つすべてのドキュメントが含まれています。 $outは、string に変換されたドキュメントのsaleDate
値を使用して各ファイルに名前を付けます。
ドキュメントの複数のフィールド
例
176 MiB のデータをBSONファイルとしてmy-s3-bucket
という名前のS 3バケットに書き込みます。
次の$out構文を使用します。
1 { 2 "$out": { 3 "s3": { 4 "bucket": "my-s3-bucket", 5 "region": "us-east-1", 6 "filename": { 7 "$concat": [ 8 "persons/", 9 "$name", "/", 10 "$uniqueId", "/" 11 ] 12 }, 13 "format": { 14 "name": "bson", 15 "maxFileSize": "200MiB" 16 } 17 } 18 } 19 }
$outは176 MiB のデータをBSONファイルに書込みます。 各ファイルに名前を付けるには、 $outは次の要素を連結します。
次のドキュメントからの 定数string
persons/
とname
フィールドの string 値、フォワードスラッシュ(
/
)、uniqueId
フィールドの string 値、およびフォワードスラッシュ(
/
)。
各BSONファイルには、 name
とuniqueId
の値が同じすべてのドキュメントが含まれています。 $outは、ドキュメントのname
値とuniqueId
値を使用して各ファイルに名前を付けます。
ドキュメントの複数のタイプのフィールド
例
154 MiB のデータを圧縮JSONファイルとしてmy-s3-bucket
という名前のS 3バケットに書き込みます。
次の$out構文を考えてみましょう。
1 { 2 "$out": { 3 "s3": { 4 "bucket": "my-s3-bucket", 5 "region": "us-east-1", 6 "filename": { 7 "$concat": [ 8 "big-box-store/", 9 { 10 "$toString": "$storeNumber" 11 }, "/", 12 { 13 "$toString": "$saleDate" 14 }, "/", 15 "$partId", "/" 16 ] 17 }, 18 "format": { 19 "name": "json.gz", 20 "maxFileSize": "200MiB" 21 } 22 } 23 } 24 }
$outは圧縮されたJSONファイルに154 MiB のデータを書込みます。各ファイルには、同じstoreNumber
、 saleDate
、 partId
値を持つすべてのドキュメントが含まれています。 各ファイルに名前を付けるには、 $outは次の要素を連結します。
big-box-store/
の定数string値、storeNumber
フィールドの一意の店舗番号の string 値、フォワードスラッシュ(
/
)、saleDate
フィールドからの日付の string 値、フォワードスラッシュ(
/
)、partId
フィールドからの 部分 ID の string 値、およびフォワードスラッシュ(
/
)。
ファイル名を作成
次の例は、定数 string から、または $out ステージに到達するドキュメント内の同じまたは異なるデータ型のフィールドからファイル名を動的に作成するための $out 構文を示しています。
簡単な string の例
例
圧縮BSONファイルとして1 GiB のデータをAzureストレージ アカウントmystorageaccount
とmy-container
という名前のコンテナに書き込みます。
次の$out構文を使用します。
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "http://mystorageaccount.blob.core.windows.net/", 5 "container": "my-container", 6 "filename": "big_box_store/", 7 "format": { 8 "name": "bson.gz" 9 } 10 } 11 } 12 }
azure.region
は省略されているため、Atlas Data Federation は、 my-container
という名前のコンテナがストレージ構成からホストされているリージョンを決定します。 $outは、次の 5 つの圧縮BSONファイルを書込みます。
$outが
big_box_store/1.bson.gz
と名前を付けるファイルへの最初の200 MiB のデータ。azure.filename
の値は、各ファイル名で定数として機能します。 この値は、ドキュメント フィールドまたは値に依存しません。azure.filename
は区切り文字で終わるため、Atlas Data Federation は 定数の後にカウンターを追加します。区切り文字で終了しない場合、Atlas Data Federation は
big_box_store.1.bson.gz
のように 定数と カウンターの間に.
を追加します。azure.format.maxFileSize
を使用して最大ファイルサイズを変更しなかったため、Atlas Data Federation はデフォルト値の 200 MiB を使用します。
$outが
big_box_store/2.bson.gz
と名前を付ける新しいファイルへの 2 つ目の200 MiB のデータ。$outが
big_box_store/3.bson.gz
からbig_box_store/5.bson.gz
までの名前を付けるさらに 3 つのファイル。
ドキュメントの単一フィールド
例
という名前の Azure Blob 90Storage コンテナの JSON ファイルに MiBmy-container
のデータを書込みたいと考えています。
次の$out構文を使用します。
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "http://mystorageaccount.blob.core.windows.net/", 5 "container": "my-container", 6 "region": "eastus2", 7 "filename": {"$toString": "$saleDate"}, 8 "format": { 9 "name": "json", 10 "maxFileSize": "100MiB" 11 } 12 } 13 } 14 }
$outは、コンテナのルートにあるJSONファイルに90 MiB のデータを書込みます。 各JSONファイルには、同じsaleDate
値を持つすべてのドキュメントが含まれています。 $outは、string に変換されたドキュメントのsaleDate
値を使用して各ファイルに名前を付けます。
ドキュメントの複数のフィールド
例
という名前の Azure Blob Storage コンテナに BSON ファイルとして MiB のデータを書込み (write)176my-container
ます。
次の$out構文を使用します。
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "http://mystorageaccount.blob.core.windows.net/", 5 "container": "my-container", 6 "region": "eastus2", 7 "filename": { 8 "$concat": [ 9 "persons/", 10 "$name", "/", 11 "$uniqueId", "/" 12 ] 13 }, 14 "format": { 15 "name": "bson", 16 "maxFileSize": "200MiB" 17 } 18 } 19 } 20 }
$outは176 MiB のデータをBSONファイルに書込みます。 各ファイルに名前を付けるには、 $outは次の要素を連結します。
次のドキュメントからの 定数string
persons/
とname
フィールドの string 値、フォワードスラッシュ(
/
)、uniqueId
フィールドの string 値、およびフォワードスラッシュ(
/
)。
各BSONファイルには、 name
とuniqueId
の値が同じすべてのドキュメントが含まれています。 $outは、ドキュメントのname
値とuniqueId
値を使用して各ファイルに名前を付けます。
ドキュメントの複数のタイプのフィールド
例
圧縮されたJSONファイルとして154 MiB のデータをmy-container
という名前のAzure Blob Storage コンテナに書き込みます。
次の$out構文を考えてみましょう。
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "http://mystorageaccount.blob.core.windows.net/", 5 "container": "my-container", 6 "region": "eastus2", 7 "filename": { 8 "$concat": [ 9 "big-box-store/", 10 { 11 "$toString": "$storeNumber" 12 }, "/", 13 { 14 "$toString": "$saleDate" 15 }, "/", 16 "$partId", "/" 17 ] 18 }, 19 "format": { 20 "name": "json.gz", 21 "maxFileSize": "200MiB" 22 } 23 } 24 } 25 }
$outは圧縮されたJSONファイルに154 MiB のデータを書込みます。各ファイルには、同じstoreNumber
、 saleDate
、 partId
値を持つすべてのドキュメントが含まれています。 各ファイルに名前を付けるには、 $outは次の要素を連結します。
big-box-store/
の定数string値、storeNumber
フィールドの一意の店舗番号の string 値、フォワードスラッシュ(
/
)、saleDate
フィールドからの日付の string 値、フォワードスラッシュ(
/
)、partId
フィールドからの 部分 ID の string 値、およびフォワードスラッシュ(
/
)。
ファイル名を作成
次の例は、定数 string から、または $out ステージに到達するドキュメント内の同じまたは異なるデータ型のフィールドからファイル名を動的に作成するための $out 構文を示しています。
簡単な string の例
例
my-gcs-bucket
という名前の Google Cloud Storage バケットに、1 GiB のデータを圧縮 BSON ファイルとして書き込むとします。
次の$out構文を使用します。
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "my-gcs-bucket", 5 "filename": "big_box_store/", 6 "format": { 7 "name": "bson.gz" 8 } 9 } 10 } 11 }
gcs.region
は省略されているため、Atlas Data Federation は、 my-gcs-bucket
という名前のバケットがホストされているリージョンをストレージ構成から決定します。 $outは、次の 5 つの圧縮BSONファイルを書込みます。
$outが
big_box_store/1.bson.gz
と名前を付けるファイルへの最初の200 MiB のデータ。gcs.filename
の値は、各ファイル名で定数として機能します。 この値は、ドキュメント フィールドまたは値に依存しません。gcs.filename
は区切り文字で終わるため、Atlas Data Federation は 定数の後にカウンターを追加します。区切り文字で終了しない場合、Atlas Data Federation は
big_box_store.1.bson.gz
のように 定数と カウンターの間に.
を追加します。gcs.format.maxFileSize
を使用して最大ファイルサイズを変更しなかったため、Atlas Data Federation はデフォルト値の 200 MiB を使用します。
$outが
big_box_store/2.bson.gz
と名前を付ける新しいファイルへの 2 つ目の200 MiB のデータ。$outが
big_box_store/3.bson.gz
からbig_box_store/5.bson.gz
までの名前を付けるさらに 3 つのファイル。
ドキュメントの単一フィールド
例
my-gcs-bucket
という名前の Google Cloud Storage バケットに、90 MiB のデータを JSON ファイルに書き込むとします。
次の$out構文を使用します。
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "my-gcs-bucket", 5 "region": "us-central1", 6 "filename": {"$toString": "$saleDate"}, 7 "format": { 8 "name": "json", 9 "maxFileSize": "100MiB" 10 } 11 } 12 } 13 }
$outは、バケットのルートにあるJSONファイルに90 MiB のデータを書込みます。 各JSONファイルには、同じsaleDate
値を持つすべてのドキュメントが含まれています。 $outは、string に変換されたドキュメントのsaleDate
値を使用して各ファイルに名前を付けます。
ドキュメントの複数のフィールド
例
my-gcs-bucket
という名前の Google Cloud Storage バケットに、176 MiBのデータを BSON ファイルとして書き込むとします。
次の$out構文を使用します。
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "my-gcs-bucket", 5 "region": "us-central1", 6 "filename": { 7 "$concat": [ 8 "persons/", 9 "$name", "/", 10 "$uniqueId", "/" 11 ] 12 }, 13 "format": { 14 "name": "bson", 15 "maxFileSize": "200MiB" 16 } 17 } 18 } 19 }
$outは176 MiB のデータをBSONファイルに書込みます。 各ファイルに名前を付けるには、 $outは次の要素を連結します。
次のドキュメントからの 定数string
persons/
とname
フィールドの string 値、フォワードスラッシュ(
/
)、uniqueId
フィールドの string 値、およびフォワードスラッシュ(
/
)。
各BSONファイルには、 name
とuniqueId
の値が同じすべてのドキュメントが含まれています。 $outは、ドキュメントのname
値とuniqueId
値を使用して各ファイルに名前を付けます。
ドキュメントの複数のタイプのフィールド
例
my-gcs-bucket
という名前の Google Cloud Storageバケットに、154 MiB のデータを圧縮 JSON ファイルとして書き込むとします。
次の$out構文を考えてみましょう。
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "my-gcs-bucket", 5 "region": "us-central1", 6 "filename": { 7 "$concat": [ 8 "big-box-store/", 9 { 10 "$toString": "$storeNumber" 11 }, "/", 12 { 13 "$toString": "$saleDate" 14 }, "/", 15 "$partId", "/" 16 ] 17 }, 18 "format": { 19 "name": "json.gz", 20 "maxFileSize": "200MiB" 21 } 22 } 23 } 24 }
$outは圧縮されたJSONファイルに154 MiB のデータを書込みます。各ファイルには、同じstoreNumber
、 saleDate
、 partId
値を持つすべてのドキュメントが含まれています。 各ファイルに名前を付けるには、 $outは次の要素を連結します。
big-box-store/
の定数string値、storeNumber
フィールドの一意の店舗番号の string 値、フォワードスラッシュ(
/
)、saleDate
フィールドからの日付の string 値、フォワードスラッシュ(
/
)、partId
フィールドからの 部分 ID の string 値、およびフォワードスラッシュ(
/
)。
バックグラウンドでのクエリの実行
次の例では、 $out ステージで終了する集計パイプラインをバックグラウンドで実行するための $out 構文を示しています。
例
db.runCommand({ "aggregate": "my-collection", "pipeline": [ { "$out": { "s3": { "bucket": "my-s3-bucket", "filename": { "$toString": "$saleDate" } "format": { "name": "json" } } } } ], { "background" : true } })
$outは、バックグラウンドのバケットのルートにあるJSONファイルに書込みます。 各JSONファイルには、同じsaleDate
値を持つすべてのドキュメントが含まれています。 $outは、string に変換されたドキュメントのsaleDate
値を使用して各ファイルに名前を付けます。
例
db.runCommand({ "aggregate": "my-collection", "pipeline": [ { "$out": { "azure": { "serviceURL": "http://mystorageaccount.blob.core.windows.net/", "container": "my-container", "filename": {"$toString": "$saleDate"}, "format": { "name": "json" } } } } ], { "background" : true } })
$out は、バックグラウンドの Azure Blog ストレージ コンテナのルートにある JSON ファイルに書込みます。各JSONファイルには、同じsaleDate
値を持つすべてのドキュメントが含まれています。 $outは、string に変換されたドキュメントのsaleDate
値を使用して各ファイルに名前を付けます。
例
db.runCommand({ "aggregate": "my-collection", "pipeline": [ { "$out": { "gcs": { "bucket": "my-gcs-bucket", "filename": { "$toString": "$saleDate" } "format": { "name": "json" } } } } ], { "background" : true } })
$outは、バックグラウンドのバケットのルートにあるJSONファイルに書込みます。 各JSONファイルには、同じsaleDate
値を持つすべてのドキュメントが含まれています。 $outは、string に変換されたドキュメントのsaleDate
値を使用して各ファイルに名前を付けます。
例
db.runCommand({ "aggregate": "my-collection", "pipeline": [ { "$out": { "atlas": { "clusterName": "myTestCluster", "db": "sampleDB", "coll": "mySampleData" } } } ], { background: true } })
$outは、バックグラウンドでmyTestCluster
という名前の Atlas クラスター内のsampleDB.mySampleData
コレクションにバックグラウンドで書き込みを行います。
制限
string データ型
Atlas Data Federation は、ファイル名を解析するときに空の文字列( ""
)をnull
値として解釈します。 Atlas Data Federationで解析可能なファイル名を生成する場合は、 $convertを使用して null
値を持つ可能性のあるフィールド参照を空のstring onNull
値とラップします。
例
この例では、 フィールド値からファイル名を作成するときに、 year
フィールドの null 値を処理する方法を示しています。
1 { 2 "$out": { 3 "s3": { 4 "bucket": "my-s3-bucket", 5 "region": "us-east-1", 6 "filename": { 7 "$concat": [ 8 "big-box-store/", 9 { 10 "$convert": { 11 "input": "$year", 12 "to": "string", 13 "onNull": "" 14 } 15 }, "/" 16 ] 17 }, 18 "format": { 19 "name": "json.gz", 20 "maxFileSize": "200MiB" 21 } 22 } 23 } 24 }
一意のフィールドの数
CSV 、 TSV 、またはPerquetファイル形式に書き込む場合、Atlas Data Federation は 32000 を超える一意のフィールドをサポートしません。
CSV および TSV ファイル形式
CSV または TSV 形式に書き込む場合、Atlas Data Federation はドキュメント内の次のデータ型をサポートしません。
配列
DBポインタ
JavaScript
JavaScript コード(スコープ付き)
最小または最大のキー データ型
CSV ファイルでは、Atlas Data Federation はドット( .
)表記を使用してネストされたドキュメントを表します。 たとえば、Atlas Data Federation は CSV ファイルに{ x: { a: 1, b: 2 } }
を次のように書込みます。
x.a,x.b 1,2
Atlas Data Federation は、他のすべてのデータ型を string として表現します。 そのため、CSV ファイルから読み取られた MongoDB のデータ型は、データ型が書き込まれた元のBSONドキュメントのデータ型と異なる場合があります。
一部のファイル形式
Perquet の場合、Atlas Data Federation は null または未定義の値が欠落しているフィールドを読み取ります。これは、Parquet が null または未定義の値と欠落値を区別しないためです。 Atlas Data Federation はすべてのデータ型をサポートしていますが、JavaScript、正規表現など、Parquet に直接同等ではないBSONデータ型の場合は、次のようになります。
非 MongoDB ツールを使用して結果の一部のファイルを読み取れる表現を選択します。
MongoDB スキーマを Perquet ファイルのキーと値のメタデータに保存し、Parquet ファイルが Atlas Data Federation によって読み取られた場合に、Atlas Data Federation が正しいデータ型で元のBSONドキュメントを再構築できるようにします。
例
次のBSONドキュメントを検討します。
{ "clientId": 102, "phoneNumbers": ["123-4567", "234-5678"], "clientInfo": { "name": "Taylor", "occupation": "teacher" } } { "clientId": "237", "phoneNumbers" ["345-6789"] "clientInfo": { "name": "Jordan" } }
$out を S3 に使用して前述の BSON ドキュメントを Perquet 形式に書き込むと、 BSON ドキュメントの Perquet ファイル スキーマは次のようになります。
message root { optional group clientId { optional int32 int; optional binary string; (STRING) } optional group phoneNumbers (LIST) { repeated group list { optional binary element (STRING); } } optional group clientInfo { optional binary name (STRING); optional binary occupation (STRING); } }
S 3の一部のデータは次のようになります。
1 clientId: 2 .int = 102 3 phoneNumbers: 4 .list: 5 ..element = "123-4567" 6 .list: 7 ..element = "234-5678" 8 clientInfo: 9 .name = "Taylor" 10 .occupation = "teacher" 11 12 clientId: 13 .string = "237" 14 phoneNumbers: 15 .list: 16 ..element = "345-6789" 17 clientInfo: 18 .name = "Jordan"
上記の例は、Atlas Data Federation が複雑なデータ型を処理する方法を示しています。
Atlas Data Federation は、すべてのレベルのドキュメントを Compass グループにマッピングします。
Atlas Data Federation は、
LIST
論理型と必須の 3 レベルのリストまたは要素構造を使用して配列をエンコードします。 詳細については、「 リスト 」を参照してください。Atlas Data Federation は、多形BSONフィールドを複数の単一型列のグループにマッピングします。Parquet は多形列をサポートしていないためです。 Atlas Data Federation は、 BSONフィールドの後にグループに名前を付けます。 前の例では、Atlas Data Federation は、
clientId
という名前の多形フィールドに対してclientId
という名前の Perl グループを作成し、そのBSONタイプにちなんで命名された 2 つの子(int
とstring
)を持ちます。
string データ型
Atlas Data Federation は、ファイル名を解析するときに空の文字列( ""
)をnull
値として解釈します。 Atlas Data Federationで解析可能なファイル名を生成する場合は、 $convertを使用して null
値を持つ可能性のあるフィールド参照を空のstring onNull
値とラップします。
例
この例では、 フィールド値からファイル名を作成するときに、 year
フィールドの null 値を処理する方法を示しています。
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "http://mystorageaccount.blob.core.windows.net/", 5 "container": "my-container", 6 "region": "eastus2", 7 "filename": { 8 "$concat": [ 9 "big-box-store/", 10 { 11 "$convert": { 12 "input": "$year", 13 "to": "string", 14 "onNull": "" 15 } 16 }, "/" 17 ] 18 }, 19 "format": { 20 "name": "json.gz", 21 "maxFileSize": "200MiB" 22 } 23 } 24 } 25 }
一意のフィールドの数
CSV 、 TSV 、またはPerquetファイル形式に書き込む場合、Atlas Data Federation は 32000 を超える一意のフィールドをサポートしません。
CSV および TSV ファイル形式
CSV または TSV 形式に書き込む場合、Atlas Data Federation はドキュメント内の次のデータ型をサポートしません。
配列
DBポインタ
JavaScript
JavaScript コード(スコープ付き)
最小または最大のキー データ型
CSV ファイルでは、Atlas Data Federation はドット( .
)表記を使用してネストされたドキュメントを表します。 たとえば、Atlas Data Federation は CSV ファイルに{ x: { a: 1, b: 2 } }
を次のように書込みます。
x.a,x.b 1,2
Atlas Data Federation は、他のすべてのデータ型を string として表現します。 そのため、CSV ファイルから読み取られた MongoDB のデータ型は、データ型が書き込まれた元のBSONドキュメントのデータ型と異なる場合があります。
一部のファイル形式
Perquet の場合、Atlas Data Federation は null または未定義の値が欠落しているフィールドを読み取ります。これは、Parquet が null または未定義の値と欠落値を区別しないためです。 Atlas Data Federation はすべてのデータ型をサポートしていますが、JavaScript、正規表現など、Parquet に直接同等ではないBSONデータ型の場合は、次のようになります。
非 MongoDB ツールを使用して結果の一部のファイルを読み取れる表現を選択します。
MongoDB スキーマを Perquet ファイルのキーと値のメタデータに保存し、Parquet ファイルが Atlas Data Federation によって読み取られた場合に、Atlas Data Federation が正しいデータ型で元のBSONドキュメントを再構築できるようにします。
例
次のBSONドキュメントを検討します。
{ "clientId": 102, "phoneNumbers": ["123-4567", "234-5678"], "clientInfo": { "name": "Taylor", "occupation": "teacher" } } { "clientId": "237", "phoneNumbers" ["345-6789"] "clientInfo": { "name": "Jordan" } }
Azure への $out を 使用して前述の BSON ドキュメントを Perquet 形式で書き込むと、 BSON ドキュメントの Perquet ファイル スキーマは次のようになります。
message root { optional group clientId { optional int32 int; optional binary string (STRING); } optional group phoneNumbers (LIST) { repeated group list { optional binary element (STRING); } } optional group clientInfo { optional binary name (STRING); optional binary occupation (STRING); } }
Azure Blog ストレージの一部のデータは次のようになります。
1 clientId: 2 .int = 102 3 phoneNumbers: 4 .list: 5 ..element = "123-4567" 6 .list: 7 ..element = "234-5678" 8 clientInfo: 9 .name = "Taylor" 10 .occupation = "teacher" 11 12 clientId: 13 .string = "237" 14 phoneNumbers: 15 .list: 16 ..element = "345-6789" 17 clientInfo: 18 .name = "Jordan"
上記の例は、Atlas Data Federation が複雑なデータ型を処理する方法を示しています。
Atlas Data Federation は、すべてのレベルのドキュメントを Compass グループにマッピングします。
Atlas Data Federation は、
LIST
論理型と必須の 3 レベルのリストまたは要素構造を使用して配列をエンコードします。 詳細については、「 リスト 」を参照してください。Atlas Data Federation は、多形BSONフィールドを複数の単一型列のグループにマッピングします。Parquet は多形列をサポートしていないためです。 Atlas Data Federation は、 BSONフィールドの後にグループに名前を付けます。 前の例では、Atlas Data Federation は、
clientId
という名前の多形フィールドに対してclientId
という名前の Perl グループを作成し、そのBSONタイプにちなんで命名された 2 つの子(int
とstring
)を持ちます。
string データ型
Atlas Data Federation は、ファイル名を解析するときに空の文字列( ""
)をnull
値として解釈します。 Atlas Data Federationで解析可能なファイル名を生成する場合は、 $convertを使用して null
値を持つ可能性のあるフィールド参照を空のstring onNull
値とラップします。
例
この例では、 フィールド値からファイル名を作成するときに、 year
フィールドの null 値を処理する方法を示しています。
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "my-gcs-bucket", 5 "region": "us-central1", 6 "filename": { 7 "$concat": [ 8 "big-box-store/", 9 { 10 "$convert": { 11 "input": "$year", 12 "to": "string", 13 "onNull": "" 14 } 15 }, "/" 16 ] 17 }, 18 "format": { 19 "name": "json.gz", 20 "maxFileSize": "200MiB" 21 } 22 } 23 } 24 }
一意のフィールドの数
CSV 、 TSV 、またはPerquetファイル形式に書き込む場合、Atlas Data Federation は 32000 を超える一意のフィールドをサポートしません。
CSV および TSV ファイル形式
CSV または TSV 形式に書き込む場合、Atlas Data Federation はドキュメント内の次のデータ型をサポートしません。
配列
DBポインタ
JavaScript
JavaScript コード(スコープ付き)
最小または最大のキー データ型
CSV ファイルでは、Atlas Data Federation はドット( .
)表記を使用してネストされたドキュメントを表します。 たとえば、Atlas Data Federation は CSV ファイルに{ x: { a: 1, b: 2 } }
を次のように書込みます。
x.a,x.b 1,2
Atlas Data Federation は、他のすべてのデータ型を string として表現します。 そのため、CSV ファイルから読み取られた MongoDB のデータ型は、データ型が書き込まれた元のBSONドキュメントのデータ型と異なる場合があります。
一部のファイル形式
Perquet の場合、Atlas Data Federation は null または未定義の値が欠落しているフィールドを読み取ります。これは、Parquet が null または未定義の値と欠落値を区別しないためです。 Atlas Data Federation はすべてのデータ型をサポートしていますが、JavaScript、正規表現など、Parquet に直接同等ではないBSONデータ型の場合は、次のようになります。
非 MongoDB ツールを使用して結果の一部のファイルを読み取れる表現を選択します。
MongoDB スキーマを Perquet ファイルのキーと値のメタデータに保存し、Parquet ファイルが Atlas Data Federation によって読み取られた場合に、Atlas Data Federation が正しいデータ型で元のBSONドキュメントを再構築できるようにします。
例
次のBSONドキュメントを検討します。
{ "clientId": 102, "phoneNumbers": ["123-4567", "234-5678"], "clientInfo": { "name": "Taylor", "occupation": "teacher" } } { "clientId": "237", "phoneNumbers" ["345-6789"] "clientInfo": { "name": "Jordan" } }
上記の BSON ドキュメントを $out を使用して Parquet 形式で GCP に書き込むと、BSON ドキュメントの Parquet ファイルスキーマは以下のようになります。
message root { optional group clientId { optional int32 int; optional binary string; (STRING) } optional group phoneNumbers (LIST) { repeated group list { optional binary element (STRING); } } optional group clientInfo { optional binary name (STRING); optional binary occupation (STRING); } }
Google Cloud Storage の Parquet データは次のようになります。
1 clientId: 2 .int = 102 3 phoneNumbers: 4 .list: 5 ..element = "123-4567" 6 .list: 7 ..element = "234-5678" 8 clientInfo: 9 .name = "Taylor" 10 .occupation = "teacher" 11 12 clientId: 13 .string = "237" 14 phoneNumbers: 15 .list: 16 ..element = "345-6789" 17 clientInfo: 18 .name = "Jordan"
上記の例は、Atlas Data Federation が複雑なデータ型を処理する方法を示しています。
Atlas Data Federation は、すべてのレベルのドキュメントを Compass グループにマッピングします。
Atlas Data Federation は、
LIST
論理型と必須の 3 レベルのリストまたは要素構造を使用して配列をエンコードします。 詳細については、「 リスト 」を参照してください。Atlas Data Federation は、多形BSONフィールドを複数の単一型列のグループにマッピングします。Parquet は多形列をサポートしていないためです。 Atlas Data Federation は、 BSONフィールドの後にグループに名前を付けます。 前の例では、Atlas Data Federation は、
clientId
という名前の多形フィールドに対してclientId
という名前の Perl グループを作成し、そのBSONタイプにちなんで命名された 2 つの子(int
とstring
)を持ちます。
このセクションは、クラウド サービス プロバイダーのストレージ機能にのみ適用されます。
エラー出力
Atlas Data Federation は、 $out
ステージに入り、次のいずれかの理由で書き込みができないドキュメントに対して、以下で説明するエラー処理メカニズムを使用します。
s3.filename
は string 値として評価されません。s3.filename
は書き込み不可のファイルと評価します。s3.format.name
はcsv
、tsv
、csv.gz
、またはtsv.gz
に設定されており、$out
に渡されるドキュメントには、指定されたファイル形式ではサポートされていないデータ型が含まれています。 サポートされていないデータ型の完全なリストについては、「 CSV および TSV ファイル形式 」を参照してください。
ドキュメントの処理中に$out
で上記のエラーのいずれかが発生した場合、Atlas Data Federation はパスs3://<bucket-name>/atlas-data-lake-<correlation-id>/
にある次の 3 つの特別なエラー ファイルに書込みます。
エラーファイル名 | 説明 |
---|---|
out-error-docs/<i>.json | Atlas Data Federation は、エラーが発生したドキュメントをこのファイルに書込みます。 は |
out-error-index/<i>.json | Atlas Data Federation は、このファイルにエラー メッセージを書込みます。 各エラー メッセージには、エラーの説明と、 |
out-error- Summary.json | Atlas Data Federation は、集計操作中に発生したエラーの種類ごとに 1 つのサマリー ドキュメントをこのファイルに書込みます。 各サマリードキュメントには、エラーのタイプの説明と、そのタイプのエラーが発生したドキュメントの数が含まれています。 |
例
この例では、フェデレーティッドデータベースインスタンスで$out
を使用してエラーファイルを生成する方法を示します。
次の集計パイプラインは、 サンプルanalytics.customers
データセット コレクション内のドキュメントをカスタマー日付の降順でソートし、最下位_id
name
accounts
3 人のカスタマーの 、 、youngest-customers.csv
フィールドを S の3customer-data
という名前のファイルに書込みます。 という名前の バケット。
db.customers.aggregate([ { $sort: { "birthdate" : -1 } }, { $unset: [ "username", "address", "email", "tier_and_details", "birthdate" ] }, { $limit: 3 }, { $out: { "s3": { "bucket": "customer-data", "filename": "youngest-customers", "region":"us-east-2", "format": { "name": "csv" } } } ])
accounts
は配列フィールドであるため、 $out
はs3.format.name
csv
にドキュメントを書込み (write) しようとするとエラーに遭遇します。 これらのエラーを処理するために、Atlas Data Federation は次の 3 つのエラーファイルに書込みます。
次の出力は、
out-error-docs/1.json
ファイルに書き込まれた 3 つのドキュメントのうちの最初の を示しています。s3://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-docs/1.json{ "_id" : {"$oid":"5ca4bbcea2dd94ee58162ba7"}, "name": "Marc Cain", "accounts": [{"$numberInt":"980440"}, {"$numberInt":"626807"}, {"$numberInt":"313907"}, {"$numberInt":"218101"}, {"$numberInt":"157495"}, {"$numberInt":"736396"}], } 次の出力は、
out-error-index/1.json
ファイルに書き込まれた 3 つのエラー メッセージのうちの最初の を示しています。n
フィールドは 0 から始まり、ファイルに書き込まれるエラーごとに増加します。s3://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-index/1.json{ "n" : {"$numberInt": "0"}, "error" : "field accounts is of unsupported type array" } 次の出力は、
out-error-summary
ファイルに書き込まれたエラーの概要ドキュメントを示しています。count
フィールドは、accounts
配列フィールドが原因でエラーが発生した$out
に渡されたドキュメントの数を表します。s3://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error- Summary.json{ "errorType": "field accounts is of unsupported type array", "count": {"$numberInt":"3"} }
Atlas Data Federation は、 $out
ステージに入り、次のいずれかの理由で書き込みができないドキュメントに対して、以下で説明するエラー処理メカニズムを使用します。
azure.filename
は string 値として評価されません。azure.filename
は書き込み不可のファイルと評価します。azure.format.name
はcsv
、tsv
、csv.gz
、またはtsv.gz
に設定されており、$out
に渡されるドキュメントには、指定されたファイル形式ではサポートされていないデータ型が含まれています。 サポートされていないデータ型の完全なリストについては、「 CSV および TSV ファイル形式 」を参照してください。
ドキュメントの処理中に$out
で上記のエラーのいずれかが発生した場合、Atlas Data Federation はパスhttp://<storage-account>.blob.core.windows.net/<container-name>/atlas-data-lake-<correlation-id>/
にある次の 3 つの特別なエラー ファイルに書込みます。
エラーファイル名 | 説明 |
---|---|
out-error-docs/<i>.json | Atlas Data Federation は、エラーが発生したドキュメントをこのファイルに書込みます。
|
out-error-index/<i>.json | Atlas Data Federation は、このファイルにエラー メッセージを書込みます。 各エラー メッセージには、エラーの説明と、
|
out-error- Summary.json | Atlas Data Federation は、集計操作中に発生したエラーの種類ごとに 1 つのサマリー ドキュメントをこのファイルに書込みます。 各サマリードキュメントには、エラーのタイプの説明と、そのタイプのエラーが発生したドキュメントの数が含まれています。 |
例
この例では、フェデレーティッドデータベースインスタンスで$out
を使用してエラーファイルを生成する方法を示します。
次の集計パイプラインは、 analytics.customers
サンプル データセット コレクション内のドキュメントをカスタマー日付の降順でソートし、最下位 3 人のカスタマーの_id
、 name
、 accounts
フィールドをAzureのyoungest-customers.csv
という名前のファイルに書込みます。 customer-data
という名前の Blob ストレージ コンテナ。
db.customers.aggregate([ { $sort: { "birthdate" : -1 } }, { $unset: [ "username", "address", "email", "tier_and_details", "birthdate" ] }, { $limit: 3 }, { $out: { "azure": { "serviceURL": "https://myserviceaccount.blob.core.windows.net" "container": "customer-data", "filename": "youngest-customers", "region":"eastus2", "format": { "name": "csv" } } } ])
accounts
は配列フィールドであるため、 $out
はazure.format.name
csv
にドキュメントを書込み (write) しようとするとエラーに遭遇します。 これらのエラーを処理するために、Atlas Data Federation は次の 3 つのエラーファイルに書込みます。
次の出力は、
out-error-docs/1.json
ファイルに書き込まれた 3 つのドキュメントのうちの最初の を示しています。http://mystorageaccount.lob.core.windows.net/customer-data/atlas-data-lake-1773b 3 d 5 e3 2 a 7 f 3858530 daf 5 /out-error-docs/ 1 .json{ "_id" : {"$oid":"5ca4bbcea2dd94ee58162ba7"}, "name": "Marc Cain", "accounts": [{"$numberInt":"980440"}, {"$numberInt":"626807"}, {"$numberInt":"313907"}, {"$numberInt":"218101"}, {"$numberInt":"157495"}, {"$numberInt":"736396"}], } 次の出力は、
out-error-index/1.json
ファイルに書き込まれた 3 つのエラー メッセージのうちの最初の を示しています。n
フィールドは 0 から始まり、ファイルに書き込まれるエラーごとに増加します。http://mystorageaccount.lob.core.windows.net/customer-data/atlas-data-lake-1773b 3 d 5 e3 2 a 7 f 3858530 daf 5 /out-error-index/ 1 .json{ "n" : {"$numberInt": "0"}, "error" : "field accounts is of unsupported type array" } 次の出力は、
out-error-summary
ファイルに書き込まれたエラーの概要ドキュメントを示しています。count
フィールドは、accounts
配列フィールドが原因でエラーが発生した$out
に渡されたドキュメントの数を表します。http://mystorageaccount.lob.core.windows.net/customer-data/atlas-data-lake-1773b 3 d 5 e3 2 a 7 f 3858530 daf 5 /out-error- Summary.json{ "errorType": "field accounts is of unsupported type array", "count": {"$numberInt":"3"} }
Atlas Data Federation は、 $out
ステージに入り、次のいずれかの理由で書き込みができないドキュメントに対して、以下で説明するエラー処理メカニズムを使用します。
gcs.filename
は string 値として評価されません。gcs.filename
は書き込み不可のファイルと評価します。gcs.format.name
はcsv
、tsv
、csv.gz
、またはtsv.gz
に設定されており、$out
に渡されるドキュメントには、指定されたファイル形式ではサポートされていないデータ型が含まれています。 サポートされていないデータ型の完全なリストについては、「 CSV および TSV ファイル形式 」を参照してください。
ドキュメントの処理中に$out
で上記のエラーのいずれかが発生した場合、Atlas Data Federation はパスgcs://<bucket-name>/atlas-data-lake-<correlation-id>/
にある次の 3 つの特別なエラー ファイルに書込みます。
エラーファイル名 | 説明 |
---|---|
out-error-docs/<i>.json | Atlas Data Federation は、エラーが発生したドキュメントをこのファイルに書込みます。 は |
out-error-index/<i>.json | Atlas Data Federation は、このファイルにエラー メッセージを書込みます。 各エラー メッセージには、エラーの説明と、 |
out-error- Summary.json | Atlas Data Federation は、集計操作中に発生したエラーの種類ごとに 1 つのサマリー ドキュメントをこのファイルに書込みます。 各サマリードキュメントには、エラーのタイプの説明と、そのタイプのエラーが発生したドキュメントの数が含まれています。 |
例
この例では、フェデレーティッドデータベースインスタンスで$out
を使用してエラーファイルを生成する方法を示します。
次の集計パイプラインは、analytics.customers
サンプル データセット コレクション内のドキュメントをカスタマーの誕生日の降順でソートし、最も若い 3 人のカスタマーの _id
、name
、accounts
フィールドを customer-data
という名前の Google Cloud Storage バケット内の youngest-customers.csv
という名前のファイルに書き込みます。
db.customers.aggregate([ { $sort: { "birthdate" : -1 } }, { $unset: [ "username", "address", "email", "tier_and_details", "birthdate" ] }, { $limit: 3 }, { $out: { "gcs": { "bucket": "customer-data", "filename": "youngest-customers", "region":"us-central1", "format": { "name": "csv" } } } ])
accounts
は配列フィールドであるため、 $out
はgcs.format.name
csv
にドキュメントを書込み (write) しようとするとエラーに遭遇します。 これらのエラーを処理するために、Atlas Data Federation は次の 3 つのエラーファイルに書込みます。
次の出力は、
out-error-docs/1.json
ファイルに書き込まれた 3 つのドキュメントのうちの最初の を示しています。gcs://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-docs/1.json{ "_id" : {"$oid":"5ca4bbcea2dd94ee58162ba7"}, "name": "Marc Cain", "accounts": [{"$numberInt":"980440"}, {"$numberInt":"626807"}, {"$numberInt":"313907"}, {"$numberInt":"218101"}, {"$numberInt":"157495"}, {"$numberInt":"736396"}], } 次の出力は、
out-error-index/1.json
ファイルに書き込まれた 3 つのエラー メッセージのうちの最初の を示しています。n
フィールドは 0 から始まり、ファイルに書き込まれるエラーごとに増加します。gcs://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-index/1.json{ "n" : {"$numberInt": "0"}, "error" : "field accounts is of unsupported type array" } 次の出力は、
out-error-summary
ファイルに書き込まれたエラーの概要ドキュメントを示しています。count
フィールドは、accounts
配列フィールドが原因でエラーが発生した$out
に渡されたドキュメントの数を表します。gcs://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-summary.json{ "errorType": "field accounts is of unsupported type array", "count": {"$numberInt":"3"} }
このセクションは、クラウド サービス プロバイダー ストレージにのみ適用されます。