Docs 菜单
Docs 主页
/
MongoDB Atlas
/ / /

$out

在此页面上

  • 所需权限
  • 语法
  • 字段
  • 选项
  • 示例
  • 限制
  • 错误输出

$out 获取聚合管道返回的文档并将其写入指定集合。$out 操作符必须是聚合管道的最后一个阶段。在 Atlas Data Federation 中,当对以下任一对象使用联合查询时,您可以使用 $out 从任何一个 支持的联合数据库实例存储或多个支持的联合数据库实例存储中写入数据:

  • Atlas 集群 namespace

  • AWS 具有读取和写入权限的 S3 存储桶

  • 具有读写权限的 Azure Blob Storage 容器

您必须连接到联合数据库实例才能使用 $out

您必须有:

您必须有:

您必须有:

  • 为 Google Cloud 存储桶配置的联合数据库实例,可访问 GCP 服务帐户

  • 具有 atlasAdmin 角色或具有 outToGCP 权限的自定义角色的 MongoDB 用户。

注意

要使用$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}
字段
类型
说明
必要性

s3

对象

从聚合管道写入文档的位置。

必需

s3.bucket

字符串

从聚合管道向其写入文档的 S3 存储桶的名称。

生成的调用 S3 会在 s3.buckets3.filename 之间插入 /。不要在 s3.bucket 字符串后添加 /

例如,如果将 s3.bucket 设置为 myBucket,并将 s3.filename 设置为 myPath/myData,则 Atlas Data Federation 将按以下方式写入输出位置:

s3://myBucket/myPath/myData.[n].json

必需

s3.region

字符串

托管存储桶的 AWS 区域的名称。如果省略,则使用联合数据库实例配置来确定托管指定 s3.bucket 的区域。

Optional

s3.filename

字符串

要将文档从聚合管道写入其中的文件的名称。文件名可以是常量,也可以根据到达 $out 阶段的文档中的字段动态创建。您提供的任何文件名表达式的值必须为string 数据类型。

重要提示:如果 S3 上存在与新生成文件具有相同名称和路径的文件,则 $out 会用新生成的文件覆盖现有文件。

生成的调用 S3 会在 s3.buckets3.filename 之间插入 /。不要在 s3.filename 字符串前添加 /

例如,如果将 s3.filename 设置为 myPath/myData,并将 s3.bucket 设置为 myBucket,则 Atlas Data Federation 将按以下方式写入输出位置:

s3://myBucket/myPath/myData.[n].json

必需

s3.format

对象

S3 中文件的详细信息。

必需

s3
.format
.name

枚举

S3 中的文件格式。值可以是以下值之一:

  • bson

  • bson.gz

  • csv

  • csv.gz

  • json 1

  • json.gz 1

  • parquet

  • tsv

  • tsv.gz

1对于这种格式, $outMongoDB 扩展 JSON格式写入数据。

要了解更多信息,请参阅限制

必需

s3
.format
.maxFileSize

字节

S3 中文件的最大大小。当达到当前文件的大小限制时,就会在 S3 中创建一个新文件。第一个文件的文件扩展名前会附加一个 1。对于每个后续文件,Atlas Data Federation 会将附加数字增加 1。

例如,<filename>.1.<fileformat><filename>.2.<fileformat>

如果文档大于 maxFileSize,Atlas Data Federation 会将该文档写入其自己的文件中。支持以下后缀:

十进制:以 1000 为倍数

  • B

  • KB

  • MB

  • GB

  • TB

  • PB

二进制:以 1024 为倍数

  • KiB

  • MiB

  • GiB

  • TiB

  • PiB

如果省略,则默认值为 200MiB

Optional

s3
.format
.maxRowGroupSize

字符串

仅支持 Parquet 文件格式。

写入 Parquet 文件时使用的最大行组大小。如果省略,则默认为 128 MiBs3.format.maxFileSize 的值,以较小者为准。最大允许值为 1 GB

Optional

s3
.format
.columnCompression

字符串

仅支持 Parquet 文件格式。

对 Parquet 文件进行格式化时用于压缩 Parquet 文件内数据的压缩类型。有效值为:

  • gzip

  • snappy

  • uncompressed

如果省略,则默认值为 snappy

要了解更多信息,请参阅支持的数据格式。

Optional

errorMode

枚举

指定在处理文档出现错误时 Atlas Data Federation 应如何继续。例如,如果 Atlas Data Federation 在写入 CSV 文件时遇到某文档中的数组,它将使用此值来确定是否跳过该文档并继续处理其他文档。有效值为:

  • continue 跳过该文档并继续处理剩余文档。Atlas Data Federation 还会将导致错误的文档写入错误文件。

    要学习;了解详情,请参阅错误。

  • stop 以在该点停止并且不处理剩余的文档。

如果省略,则默认值为 continue

Optional

字段
类型
说明
必要性

azure

对象

从聚合管道写入文档的位置。

必需

azure.serviceURL

字符串

用于从聚合管道写入文档的 Azure 存储帐户的 URL。

必需

azure.containerName

字符串

用于从聚合管道写入文档的 Azure Blob 存储容器的名称。

必需

azure.region

字符串

托管 Blob 存储容器的 Azure 区域的名称。

必需

azure.filename

字符串

从聚合管道写入文档的文件名。

接受常量值,或从到达string $out 阶段的文档中的字段动态创建的计算结果为 的值。如果Azure Blob 存储中存在与新生成的文件同名和路径的文件,则 $out 会用新生成的文件覆盖现有文件。

必需

azure.format

对象

Azure Blob 存储中的文件详细信息。

必需

azure
.format
.name

枚举

Azure Blob 存储中的文件格式。值可以是以下值之一:

  • bson

  • bson.gz

  • csv

  • csv.gz

  • json 1

  • json.gz 1

  • parquet

  • tsv

  • tsv.gz

1对于这种格式, $outMongoDB 扩展 JSON格式写入数据。

要了解更多信息,请参阅限制

必需

azure
.format
.maxFileSize

字节

Azure Blob 存储中的文件的最大大小。

当达到当前文件的大小限制时,$out 会自动创建一个新文件。第一个文件在其名称后附加了 1。对于每个后续文件,Atlas Data Federation 会将附加的数字增加 1。

例如,<filename>.1.<fileformat><filename>.2.<fileformat>

如果文档大于 maxFileSize,Atlas Data Federation 会将该文档写入其自己的文件中。支持以下后缀:

十进制:以 1000 为倍数

  • B

  • KB

  • MB

  • GB

  • TB

  • PB

二进制:以 1024 为倍数

  • KiB

  • MiB

  • GiB

  • TiB

  • PiB

如果省略,则默认值为 200MiB

Optional

azure
.format
.maxRowGroupSize

字符串

仅支持 Parquet 文件格式。

写入 Parquet 文件时使用的最大行组大小。如果省略,则默认为 128 MiBazure.format.maxFileSize 的值,以较小者为准。最大允许值为 1 GB

Optional

azure
.format
.columnCompression

字符串

仅支持 Parquet 文件格式。

对 Parquet 文件进行格式化时用于压缩 Parquet 文件内数据的压缩类型。有效值为:

  • gzip

  • snappy

  • uncompressed

如果省略,则默认值为 snappy

要了解更多信息,请参阅支持的数据格式。

Optional

errorMode

枚举

指定在处理文档时遇到错误时 Atlas Data Federation 应如何进行操作。有效值为:

  • continue 跳过该文档并继续处理剩余文档。Atlas Data Federation 将错误记录在错误文件中。

  • stop 停止而不处理剩余文档。Atlas Data Federation 将错误记录在错误文件中。

如果省略,则默认值为 continue

要学习;了解更多信息,请参阅错误。

Optional

字段
类型
说明
必要性

gcs

对象

从聚合管道写入文档的位置。

必需

gcs.bucket

字符串

从聚合管道向其写入文档的 Google Cloud Storage 存储桶的名称。

重要

生成的 Google Cloud 调用会在 gcs.bucketgcs.filename 之间插入 /。不要在 gcs.bucket 字符串后添加 /

例如,如果将 gcs.bucket 设置为 myBucket,并将 gcs.filename 设置为 myPath/myData,则 Atlas Data Federation 将按以下方式写入输出位置:

gcs://myBucket/myPath/myData.[n].json

必需

gcs.region

字符串

托管存储桶的 AWS 区域的名称。如果省略,则使用联合数据库实例配置来确定托管指定 gcs.bucket 的区域。

Optional

gcs.filename

字符串

要将文档从聚合管道写入其中的文件的名称。文件名可以是常量,也可以根据到达 $out 阶段的文档中的字段动态创建。您提供的任何文件名表达式的值必须为string 数据类型。如果 Google Cloud Storage 上有任何文件与新生成的文件同名和路径,则 $out 会用新生成的文件覆盖现有文件。

重要

生成的对 Google Cloud Storage 的调用会在 gcs.bucketgcs.filename 之间插入一个 /。不要在 gcs.filename 字符串前添加 /

例如,如果将 gcs.filename 设置为 myPath/myData,并将 gcs.bucket 设置为 myBucket,则 Atlas Data Federation 将按以下方式写入输出位置:

gcs://myBucket/myPath/myData.[n].json

必需

gcs.format

对象

Google Cloud Storage 中的文件详细信息。

必需

gcs
.format
.name

枚举

Google Cloud Storage 中的文件格式。值可以是以下值之一:

  • bson

  • bson.gz

  • csv

  • csv.gz

  • json 1

  • json.gz 1

  • parquet

  • tsv

  • tsv.gz

1对于这种格式, $outMongoDB 扩展 JSON格式写入数据。

要了解更多信息,请参阅限制

必需

字段
类型
说明
必要性

atlas

对象

从聚合管道写入文档的位置。

必需

clusterName

字符串

Atlas 集群的名称。

必需

coll

字符串

Atlas 集群上的集合的名称。

必需

db

字符串

Atlas 集群上包含该集合的数据库的名称。

必需

projectId

字符串

包含 Atlas 集群的项目的唯一标识符。项目 ID 必须是包含联合数据库实例的项目的 ID。如果省略,则默认为包含联合数据库实例项目的 ID。

Optional

选项
类型
说明
必要性

background

布尔

标记在后台运行聚合操作。如果省略,则默认值为 false。当设置为 true 时,Atlas Data Federation 会在后台运行查询。

{ "background" : true }

如果您想要提交其他新查询,而无需等待当前运行的查询完成或断开与联合数据库实例的连接,同时查询继续在后台运行,请使用此选项。

Optional

创建文件名

以下示例显示 $out 语法,用于从常量字符串或到达 $out 阶段的文档中相同或不同数据类型的字段动态创建文件名。

例子

您想要将 1 GiB 数据以压缩的 BSON 文件的形式写入名为 my-s3-bucketS3 存储桶中。

使用以下 $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 会写入五个压缩的 BSON 文件:

  1. 将前200 MiB 数据写入$out名为big_box_store/1.bson.gz的文件。

    • s3.filename 的值在每个文件名中充当常量。此值不依赖于任何文档字段或值。此值不依赖于任何文档字段或值。

    • 您的 s3.filename 以分隔符结尾,因此 Atlas Data Federation 将计数器附加在常量之后。

    • 如果它不以分隔符结尾,Atlas Data Federation 将在常量和计数器之间添加一个 .,例如 big_box_store.1.bson.gz

    • 由于您没有使用 s3.format.maxFileSize 更改最大文件大小,Atlas Data Federation 会使用默认值 200 MiB。

  2. 将第二个200 MiB 数据写入$out命名为big_box_store/2.bson.gz的新文件。

  3. $out将另外三个文件命名为big_box_store/3.bson.gzbig_box_store/5.bson.gz

例子

您想要将 90 MiB 的数据写入 JSON 文件并存储到名为 my-s3-bucketS3 存储桶。

使用以下 $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 将 90 MiB 的数据写入存储桶根目录中的 JSON 文件。每个 JSON 文件包含所有具有相同 saleDate 值的文档。$out 使用转换为字符串的文档 saleDate 值来为每个文件命名。

例子

您想要将 176 MiB 的数据写入 BSON 文件并存储到名为 my-s3-bucketS3 存储桶。

使用以下 $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 会连接以下内容:

  • 常量字符串 persons/ 和文档中的:

    • name 字段的字符串值,

    • 正斜杠(/),

    • uniqueId 字段的字符串值,以及

    • 正斜线(/)。

每个 BSON 文件包含具有相同 nameuniqueId 值的所有文档。$out 使用文档的 nameuniqueId 值命名每个文件。

例子

您想要将 154 MiB 数据以压缩的 JSON 文件的形式写入名为 my-s3-bucketS3 存储桶中。

以下列 $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将 154 MiB 数据写入到压缩 JSON 文件,其中每个文件包含具有相同 storeNumbersaleDatepartId 值的所有文档。为了给每个文件命名,$out 会拼接如下部分:

  • 常量字符串值 big-box-store/

  • storeNumber 字段中唯一商店编号的字符串值,

  • 正斜杠(/),

  • saleDate 字段中日期的字符串值,

  • 正斜杠(/),

  • 来自 partId 字段的部件 ID 的字符串值,以及

  • 正斜线(/)。

创建文件名

以下示例显示 $out 语法,用于从常量字符串或到达 $out 阶段的文档中相同或不同数据类型的字段动态创建文件名。

例子

您想要将 1 GB 的数据作为压缩 BSON 文件写入 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 会写入五个压缩的 BSON 文件:

  1. 将前200 MiB 数据写入$out名为big_box_store/1.bson.gz的文件。

    • azure.filename 的值在每个文件名中充当常量。此值不依赖于任何文档字段或值。此值不依赖于任何文档字段或值。

    • 您的 azure.filename 以分隔符结尾,因此 Atlas Data Federation 将计数器附加在常量之后。

    • 如果它不以分隔符结尾,Atlas Data Federation 将在常量和计数器之间添加一个 .,例如 big_box_store.1.bson.gz

    • 由于您没有使用 azure.format.maxFileSize 更改最大文件大小,Atlas Data Federation 会使用默认值 200 MiB。

  2. 将第二个200 MiB 数据写入$out命名为big_box_store/2.bson.gz的新文件。

  3. $out将另外三个文件命名为big_box_store/3.bson.gzbig_box_store/5.bson.gz

例子

您想要将 90 MiB 的 JSON文件数据写入名为 my-containerAzureBlob Storage 容器。

使用以下 $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 将 90 MiB 数据写入到容器根目录中的 JSON 文件中。每个 JSON 文件包含所有具有相同 saleDate 值的文档。$out 使用转换为字符串的文档的 saleDate 值来为每个文件命名。

例子

您想要将 176 MiB 数据作为 BSON 文件写入名为 my-containerAzure Blob 存储容器。

使用以下 $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 会连接以下内容:

  • 常量字符串 persons/ 和文档中的:

    • name 字段的字符串值,

    • 正斜杠(/),

    • uniqueId 字段的字符串值,以及

    • 正斜线(/)。

每个 BSON 文件包含具有相同 nameuniqueId 值的所有文档。$out 使用文档的 nameuniqueId 值命名每个文件。

例子

您想要将 154 MiB 数据作为压缩的 JSON 文件写入名为 my-containerAzure Blob 存储容器。

以下列 $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将 154 MiB 数据写入到压缩 JSON 文件,其中每个文件包含具有相同 storeNumbersaleDatepartId 值的所有文档。为了给每个文件命名,$out 会拼接如下部分:

  • 常量字符串值 big-box-store/

  • storeNumber 字段中唯一商店编号的字符串值,

  • 正斜杠(/),

  • saleDate 字段中日期的字符串值,

  • 正斜杠(/),

  • 来自 partId 字段的部件 ID 的字符串值,以及

  • 正斜线(/)。

创建文件名

以下示例显示 $out 语法,用于从常量字符串或到达 $out 阶段的文档中相同或不同数据类型的字段动态创建文件名。

例子

您想要将 1 GiB 的数据以压缩的 BSON 文件的形式写入名为 my-gcs-bucket 的 Google Cloud Storage 存储桶。

使用以下 $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 会写入五个压缩的 BSON 文件:

  1. 将前200 MiB 数据写入$out名为big_box_store/1.bson.gz的文件。

    • gcs.filename 的值在每个文件名中充当常量。此值不依赖于任何文档字段或值。此值不依赖于任何文档字段或值。

    • 您的 gcs.filename 以分隔符结尾,因此 Atlas Data Federation 将计数器附加在常量之后。

    • 如果它不以分隔符结尾,Atlas Data Federation 将在常量和计数器之间添加一个 .,例如 big_box_store.1.bson.gz

    • 由于您没有使用 gcs.format.maxFileSize 更改最大文件大小,Atlas Data Federation 会使用默认值 200 MiB。

  2. 将第二个200 MiB 数据写入$out命名为big_box_store/2.bson.gz的新文件。

  3. $out将另外三个文件命名为big_box_store/3.bson.gzbig_box_store/5.bson.gz

例子

您想要将 90 MiB 的数据写入 JSON 文件并保存到名为 my-gcs-bucket 的 Google Cloud Storage 存储桶。

使用以下 $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 将 90 MiB 的数据写入存储桶根目录中的 JSON 文件。每个 JSON 文件包含所有具有相同 saleDate 值的文档。$out 使用转换为字符串的文档 saleDate 值来为每个文件命名。

例子

您想要将 176 MiB 的数据作为 BSON 文件写入名为 my-gcs-bucket 的 Google Cloud Storage 存储桶。

使用以下 $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 会连接以下内容:

  • 常量字符串 persons/ 和文档中的:

    • name 字段的字符串值,

    • 正斜杠(/),

    • uniqueId 字段的字符串值,以及

    • 正斜线(/)。

每个 BSON 文件包含具有相同 nameuniqueId 值的所有文档。$out 使用文档的 nameuniqueId 值命名每个文件。

例子

您想要将 154 MiB 数据以压缩的 JSON 文件的形式写入名为 my-gcs-bucket 的 Google Cloud Storage 存储桶。

以下列 $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将 154 MiB 数据写入到压缩 JSON 文件,其中每个文件包含具有相同 storeNumbersaleDatepartId 值的所有文档。为了给每个文件命名,$out 会拼接如下部分:

  • 常量字符串值 big-box-store/

  • storeNumber 字段中唯一商店编号的字符串值,

  • 正斜杠(/),

  • saleDate 字段中日期的字符串值,

  • 正斜杠(/),

  • 来自 partId 字段的部件 ID 的字符串值,以及

  • 正斜线(/)。

$out 语法将聚合数据发送到 Atlas 集群中名为 myTestClustersampleDB.mySampleData 集合。语法未指定项目 ID;$out 使用的是包含联合数据库实例的项目的 ID。

例子

1{
2 "$out": {
3 "atlas": {
4 "clusterName": "myTestCluster",
5 "db": "sampleDB",
6 "coll": "mySampleData"
7 }
8 }
9}

以下示例显示了在后台运行以 $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 使用转换为字符串的文档 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 Blob Storage 容器根目录下的 JSON 文件。每个 JSON 文件包含所有具有相同 saleDate 值的文档。$out 使用转换为字符串的文档的 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 使用转换为字符串的文档 saleDate 值来为每个文件命名。

例子

db.runCommand({
"aggregate": "my-collection",
"pipeline": [
{
"$out": {
"atlas": {
"clusterName": "myTestCluster",
"db": "sampleDB",
"coll": "mySampleData"
}
}
}
],
{ background: true }
})

$out 在后台写入 Atlas 集群中名为 myTestClustersampleDB.mySampleData 集合。

解析文件名时,Atlas Data Federation 将空字符串 ( "" ) 解释为null值。 如果您希望Atlas Data Federation生成可解析的文件名,请使用$convert使用空string onNull 值包装可能具有 null 值的字段引用。

例子

此示例演示了在从字段值创建文件名时如何处理 year 字段中的空值。

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}

写入 CSVTSVParquet 文件格式时,Atlas Data Federation 不支持超过 32000 个唯一字段。

当写入 CSV 或 TSV 格式时,Atlas Data Federation 不支持文档中的以下数据类型:

  • 数组

  • DB 指针

  • JavaScript

  • 带作用域的 JavaScript 代码

  • 最小或最大密钥数据类型

在 CSV 文件中,Atlas Data Federation 使用点 (.) 符号表示嵌套文档。例如,Atlas Data Federation 以如下形式将 { x: { a: 1, b: 2 } } 写入 CSV 文件:

x.a,x.b
1,2

Atlas Data Federation 会将所有其他数据类型表示为字符串。因此,从 CSV 文件读回的 MongoDB 中的数据类型可能与写入数据类型的原始 BSON 文档中的数据类型不同。

Atlas Data Federation 在读取 Parquet 文件时会将包含空值或未定义值的字段视为缺失,因为 Parquet 并不区分空值或未定义值与缺失值。尽管 Atlas Data Federation 支持所有数据类型,但对于在 Parquet 中没有直接等效项的 BSON 数据类型(例如 JavaScript、正则表达式等),它会:

  • 选择一种允许使用非 MongoDB 工具读回生成的 Parquet 的表示形式。

  • 将 MongoDB 模式存储在 Parquet 文件的键/值元数据中,以便在读回 Parquet 文件时,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 to S3 将前面的 BSON 文档写入 Parquet 格式,则您的 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);
}
}

您在 S3 上的 Parquet 数据看起来类似于以下内容:

1clientId:
2.int = 102
3phoneNumbers:
4.list:
5..element = "123-4567"
6.list:
7..element = "234-5678"
8clientInfo:
9.name = "Taylor"
10.occupation = "teacher"
11
12clientId:
13.string = "237"
14phoneNumbers:
15.list:
16..element = "345-6789"
17clientInfo:
18.name = "Jordan"

前面的示例演示了 Atlas Data Federation 如何处理复杂的数据类型:

  • Atlas Data Federation 会将所有级别的文档映射到一个 Parquet 群组。

  • Atlas Data Federation 使用LIST逻辑类型和强制的三级列表或元素结构对数组进行编码。 要了解更多信息,请参阅 列表。

  • 由于 Parquet 不支持多态列,Atlas Data Federation 将多态 BSON 字段映射到包含多列的一组单一类型列。Atlas Data Federation 以 BSON 字段命名该群组。在前面的示例中,Atlas Data Federation 为名为 clientId 的多态字段创建一个名为 clientId 的 Parquet 组,其中有两个以其 BSON 类型命名的子项:intstring

解析文件名时,Atlas Data Federation 将空字符串 ( "" ) 解释为null值。 如果您希望Atlas Data Federation生成可解析的文件名,请使用$convert使用空string onNull 值包装可能具有 null 值的字段引用。

例子

此示例演示了在从字段值创建文件名时如何处理 year 字段中的空值。

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}

写入 CSVTSVParquet 文件格式时,Atlas Data Federation 不支持超过 32000 个唯一字段。

当写入 CSV 或 TSV 格式时,Atlas Data Federation 不支持文档中的以下数据类型:

  • 数组

  • DB 指针

  • JavaScript

  • 带作用域的 JavaScript 代码

  • 最小或最大密钥数据类型

在 CSV 文件中,Atlas Data Federation 使用点 (.) 符号表示嵌套文档。例如,Atlas Data Federation 以如下形式将 { x: { a: 1, b: 2 } } 写入 CSV 文件:

x.a,x.b
1,2

Atlas Data Federation 会将所有其他数据类型表示为字符串。因此,从 CSV 文件读回的 MongoDB 中的数据类型可能与写入数据类型的原始 BSON 文档中的数据类型不同。

Atlas Data Federation 在读取 Parquet 文件时会将包含空值或未定义值的字段视为缺失,因为 Parquet 并不区分空值或未定义值与缺失值。尽管 Atlas Data Federation 支持所有数据类型,但对于在 Parquet 中没有直接等效项的 BSON 数据类型(例如 JavaScript、正则表达式等),它会:

  • 选择一种允许使用非 MongoDB 工具读回生成的 Parquet 的表示形式。

  • 将 MongoDB 模式存储在 Parquet 文件的键/值元数据中,以便在读回 Parquet 文件时,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 to Azure 将前面的 BSON 文档写成 Parquet 格式, 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);
}
}

您在 Azure Blob 存储中的 Parquet 数据看起来类似于以下内容:

1clientId:
2.int = 102
3phoneNumbers:
4.list:
5..element = "123-4567"
6.list:
7..element = "234-5678"
8clientInfo:
9.name = "Taylor"
10.occupation = "teacher"
11
12clientId:
13.string = "237"
14phoneNumbers:
15.list:
16..element = "345-6789"
17clientInfo:
18.name = "Jordan"

前面的示例演示了 Atlas Data Federation 如何处理复杂的数据类型:

  • Atlas Data Federation 会将所有级别的文档映射到一个 Parquet 群组。

  • Atlas Data Federation 使用LIST逻辑类型和强制的三级列表或元素结构对数组进行编码。 要了解更多信息,请参阅 列表。

  • 由于 Parquet 不支持多态列,Atlas Data Federation 将多态 BSON 字段映射到包含多列的一组单一类型列。Atlas Data Federation 以 BSON 字段命名该群组。在前面的示例中,Atlas Data Federation 为名为 clientId 的多态字段创建一个名为 clientId 的 Parquet 组,其中有两个以其 BSON 类型命名的子项:intstring

解析文件名时,Atlas Data Federation 将空字符串 ( "" ) 解释为null值。 如果您希望Atlas Data Federation生成可解析的文件名,请使用$convert使用空string onNull 值包装可能具有 null 值的字段引用。

例子

此示例演示了在从字段值创建文件名时如何处理 year 字段中的空值。

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}

写入 CSVTSVParquet 文件格式时,Atlas Data Federation 不支持超过 32000 个唯一字段。

当写入 CSV 或 TSV 格式时,Atlas Data Federation 不支持文档中的以下数据类型:

  • 数组

  • DB 指针

  • JavaScript

  • 带作用域的 JavaScript 代码

  • 最小或最大密钥数据类型

在 CSV 文件中,Atlas Data Federation 使用点 (.) 符号表示嵌套文档。例如,Atlas Data Federation 以如下形式将 { x: { a: 1, b: 2 } } 写入 CSV 文件:

x.a,x.b
1,2

Atlas Data Federation 会将所有其他数据类型表示为字符串。因此,从 CSV 文件读回的 MongoDB 中的数据类型可能与写入数据类型的原始 BSON 文档中的数据类型不同。

Atlas Data Federation 在读取 Parquet 文件时会将包含空值或未定义值的字段视为缺失,因为 Parquet 并不区分空值或未定义值与缺失值。尽管 Atlas Data Federation 支持所有数据类型,但对于在 Parquet 中没有直接等效项的 BSON 数据类型(例如 JavaScript、正则表达式等),它会:

  • 选择一种允许使用非 MongoDB 工具读回生成的 Parquet 的表示形式。

  • 将 MongoDB 模式存储在 Parquet 文件的键/值元数据中,以便在读回 Parquet 文件时,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 to GCP 将前面的 BSON 文档写成 Parquet 格式,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 数据看起来类似于以下内容:

1clientId:
2.int = 102
3phoneNumbers:
4.list:
5..element = "123-4567"
6.list:
7..element = "234-5678"
8clientInfo:
9.name = "Taylor"
10.occupation = "teacher"
11
12clientId:
13.string = "237"
14phoneNumbers:
15.list:
16..element = "345-6789"
17clientInfo:
18.name = "Jordan"

前面的示例演示了 Atlas Data Federation 如何处理复杂的数据类型:

  • Atlas Data Federation 会将所有级别的文档映射到一个 Parquet 群组。

  • Atlas Data Federation 使用LIST逻辑类型和强制的三级列表或元素结构对数组进行编码。 要了解更多信息,请参阅 列表。

  • 由于 Parquet 不支持多态列,Atlas Data Federation 将多态 BSON 字段映射到包含多列的一组单一类型列。Atlas Data Federation 以 BSON 字段命名该群组。在前面的示例中,Atlas Data Federation 为名为 clientId 的多态字段创建一个名为 clientId 的 Parquet 组,其中有两个以其 BSON 类型命名的子项:intstring

本部分仅适用于云服务提供商的存储产品。

Atlas Data Federation 对进入$out阶段且由于以下原因之一而无法写入的文档使用下述错误处理机制:

  • s3.filename 的计算结果不是字符串值。

  • s3.filename 的计算结果是一个无法写入的文件。

  • s3.format.name设置为csvtsvcsv.gztsv.gz ,且传递给$out的文档包含指定文件格式不支持的数据类型。 有关不支持的数据类型的完整列表,请参阅CSV 和 TSV 文件格式。

如果$out在处理文档时遇到上述错误之一,Atlas Data Federation 会将错误信息写入路径s3://<bucket-name>/atlas-data-lake-<correlation-id>/中的以下三个特殊错误文件:

错误文件名
说明

out-error-docs/<i>.json

Atlas Data Federation 将发生错误的文档写入此文件。 i1 开始,并在写入的文件达到 maxFileSize 时递增。然后,将任何其他文档写入新文件 out-error-docs/<i+1>.json

out-error-index/<i>.json

Atlas Data Federation 会将错误消息写入此文件。每条错误消息都包含错误描述和索引值 n,该索引值以 0 开头,并且在每多写入一条错误消息时递增。i1 开始,并在写入的文件达到 maxFileSize 时递增。然后,任何进一步的错误信息都将写入新文件 out-error-docs/<i+1>.json

out-error-summary.json

Atlas Data Federation 会将聚合操作期间遇到的每种错误类型的单个摘要文档写入此文件。每个摘要文档都包含错误类型的描述以及遇到该类型错误的文档计数。

例子

此示例演示如何在联合数据库实例中使用$out生成错误文件。

以下聚合管道按客户出生日期以降序对 analytics.customers 示例数据集集合中的文档进行排序,并尝试将年龄最小的三个客户的 _idnameaccounts 字段写入到名为 customer-dataS3 存储桶中名为 youngest-customers.csv 的文件中。

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时会遇到错误。 为了处理这些错误,Atlas Data Federation 会写入以下三个错误文件:

  • 以下输出显示了写入 out-error-docs/1.json 文件的三个文档中的第一个:

    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 文件的三条错误消息中的第一条。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 的计算结果不是字符串值。

  • azure.filename 的计算结果是一个无法写入的文件。

  • azure.format.name设置为csvtsvcsv.gztsv.gz ,且传递给$out的文档包含指定文件格式不支持的数据类型。 有关不支持的数据类型的完整列表,请参阅CSV 和 TSV 文件格式。

如果$out在处理文档时遇到上述错误之一,Atlas Data Federation 会将错误信息写入路径http://<storage-account>.blob.core.windows.net/<container-name>/atlas-data-lake-<correlation-id>/中的以下三个特殊错误文件:

错误文件名
说明

out-error-docs/<i>.json

Atlas Data Federation 将发生错误的文档写入此文件。

i1 开始,并在写入的文件达到 maxFileSize 时递增。然后,将任何其他文档写入新文件 out-error-docs/<i+1>.json

out-error-index/<i>.json

Atlas Data Federation 会将错误消息写入此文件。每条错误消息都包含错误描述和索引值 n,该索引值以 0 开头,并且在每多写入一条错误消息时递增。

i1 开始,并在写入的文件达到 maxFileSize 时递增。然后,任何进一步的错误消息都将写入新文件 out-error-docs/<i+1>.json

out-error-summary.json

Atlas Data Federation 会将聚合操作期间遇到的每种错误类型的单个摘要文档写入此文件。每个摘要文档都包含错误类型的描述以及遇到该类型错误的文档计数。

例子

此示例演示如何在联合数据库实例中使用$out生成错误文件。

以下聚合管道按客户出生日期以降序对 analytics.customers 示例数据集集合中的文档进行排序,并尝试将年龄最小的三个客户的 _idnameaccounts 字段写入到名为 customer-dataAzure Blob 存储容器中名为 youngest-customers.csv 的文件中。

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时会遇到错误。 为了处理这些错误,Atlas Data Federation 会写入以下三个错误文件:

  • 以下输出显示了写入 out-error-docs/1.json 文件的三个文档中的第一个:

    http://mystorageaccount.blob.core.windows.net/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 文件的三条错误消息中的第一条。n 字段值从 0 开始,随着写入文件的每个错误而递增。

    http://mystorageaccount.blob.core.windows.net/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的文档数量。

    http://mystorageaccount.blob.core.windows.net/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阶段且由于以下原因之一而无法写入的文档使用下述错误处理机制:

  • gcs.filename 的计算结果不是字符串值。

  • gcs.filename 的计算结果是一个无法写入的文件。

  • gcs.format.name设置为csvtsvcsv.gztsv.gz ,且传递给$out的文档包含指定文件格式不支持的数据类型。 有关不支持的数据类型的完整列表,请参阅CSV 和 TSV 文件格式。

如果$out在处理文档时遇到上述错误之一,Atlas Data Federation 会将错误信息写入路径gcs://<bucket-name>/atlas-data-lake-<correlation-id>/中的以下三个特殊错误文件:

错误文件名
说明

out-error-docs/<i>.json

Atlas Data Federation 将发生错误的文档写入此文件。 i1 开始,并在写入的文件达到 maxFileSize 时递增。然后,将任何其他文档写入新文件 out-error-docs/<i+1>.json

out-error-index/<i>.json

Atlas Data Federation 会将错误消息写入此文件。每条错误消息都包含错误描述和索引值 n,该索引值以 0 开头,并且在每多写入一条错误消息时递增。i1 开始,并在写入的文件达到 maxFileSize 时递增。然后,任何进一步的错误信息都将写入新文件 out-error-docs/<i+1>.json

out-error-summary.json

Atlas Data Federation 会将聚合操作期间遇到的每种错误类型的单个摘要文档写入此文件。每个摘要文档都包含错误类型的描述以及遇到该类型错误的文档计数。

例子

此示例演示如何在联合数据库实例中使用$out生成错误文件。

以下聚合管道按客户出生日期以降序对 analytics.customers 示例数据集集合中的文档进行排序,并尝试将年龄最小的三个客户的 _idnameaccounts 字段写入到名为 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时会遇到错误。 为了处理这些错误,Atlas Data Federation 会写入以下三个错误文件:

  • 以下输出显示了写入 out-error-docs/1.json 文件的三个文档中的第一个:

    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 文件的三条错误消息中的第一条。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"}
    }

本部分仅适用于云服务提供商存储。

提示

另请参阅:

后退

$merge