Docs 菜单
Docs 主页
/
MongoDB Atlas
/ /

AWS S3 存储桶

在此页面上

  • S3 数据存储配置示例
  • 配置格式
  • stores
  • databases

Atlas Data Federation 支持 S3 存储桶作为联合数据库实例存储。您必须在联合数据库实例中定义到 S3 存储桶的映射,才能运行数据查询。

例子

假设某个 S3 存储桶 datacenter-alpha 包含从数据中心收集的数据:

|--metrics
|--hardware

/metrics/hardware 路径存储 JSON 文件,其中包含源自数据中心硬件的指标,每个文件名是该文件所涵盖的 24 小时周期的 UNIX 时间戳(毫秒):

/hardware/1564671291998.json

配置如下:

  • us-east-1 AWS 地区的 datacenter-alpha S3 存储桶定义一个联合数据库实例存储。该联合数据库实例存储被明确限制为仅包含 metrics 文件夹路径中的数据文件。

  • hardware 文件夹中的文件映射到 MongoDB 数据库 datacenter-alpha-metrics 和集合 hardware。配置映射包括用于收集文件名中隐含的时间戳的解析逻辑。

{
"stores" : [
{
"name" : "datacenter-alpha",
"provider" : "s3",
"region" : "us-east-1",
"bucket" : "datacenter-alpha",
"additionalStorageClasses" : [
"STANDARD_IA"
],
"prefix" : "/metrics",
"delimiter" : "/"
}
],
"databases" : [
{
"name" : "datacenter-alpha-metrics",
"collections" : [
{
"name" : "hardware",
"dataSources" : [
{
"storeName" : "datacenter-alpha",
"path" : "/hardware/{date date}"
}
]
}
]
}
]
}

Atlas Data Federation 解析 S3 存储桶 datacenter-alpha,并处理 /metrics/hardware/ 下的所有文件。collections 使用 路径解析语法,将文件名映射到每个文档中的 date 字段,即 ISO-8601 日期。如果文档中不存在匹配的 date 字段,则会添加该字段。

连接到联合数据库实例的用户可以使用 MongoDB 查询语言和支持的聚合通过 datacenter-alpha-metrics.hardware 集合分析 S3 存储桶中的数据。

提示

另请参阅:

联合数据库实例配置的格式如下:

1{
2 "stores" : [
3 {
4 "name" : "<string>",
5 "provider": "<string>",
6 "region" : "<string>",
7 "bucket" : "<string>",
8 "additionalStorageClasses" : ["<string>"],
9 "prefix" : "<string>",
10 "includeTags": <boolean>,
11 "delimiter": "<string>",
12 "public": <boolean>
13 }
14 ],
15 "databases" : [
16 {
17 "name" : "<string>",
18 "collections" : [
19 {
20 "name" : "<string>",
21 "dataSources" : [
22 {
23 "storeName" : "<string>",
24 "path" : "<string>",
25 "defaultFormat" : "<string>",
26 "provenanceFieldName": "<string>",
27 "omitAttributes": true | false
28 }
29 ]
30 }
31 ],
32 "maxWildcardCollections" : <integer>,
33 "views" : [
34 {
35 "name" : "<string>",
36 "source" : "<string>",
37 "pipeline" : "<string>"
38 }
39 ]
40 }
41 ]
42}
stores
stores 对象定义了与该联合数据库实例关联的每个数据存储。联合数据库实例存储可捕获 S3 存储桶中的文件、Atlas 集群中的文档或存储在可公开访问的 URL 中的文件。Data Federation 只能访问stores 对象中定义的数据存储。
databases
databases 对象定义 stores 中定义的每个联合数据库实例存储与数据库中的 MongoDB 集合之间的映射。
1 "stores" : [
2 {
3 "name" : "<string>",
4 "provider" : "<string>",
5 "region" : "<string>",
6 "bucket" : "<string>",
7 "additionalStorageClasses" : ["<string>"],
8 "prefix" : "<string>",
9 "delimiter" : "<string>",
10 "includeTags": <boolean>,
11 "public": <boolean>
12 }
13 ]
stores

对象数组,其中每个对象代表一个与联合数据库实例关联的数据存储。联合数据库实例存储可捕获 S3 存储桶中的文件、Atlas 集群中的文档或存储在可公开访问的 URL 中的文件。Atlas Data Federation 只能访问 stores 对象中定义的数据存储。

stores.[n].name

联合数据库实例存储的名称。databases.[n].collections.[n].dataSources.[n].storeName 字段会引用此值以作为映射配置的一部分。

stores.[n].provider

定义数据的存储位置。AWS S3 存储桶的值必须为 s3

stores.[n].region

托管 S3 存储桶的 AWS 区域的名称。有关有效区域名称的列表,请参阅 Amazon Web Services (AWS)

stores.[n].bucket

AWSS3 存储桶的名称。 必须与 Atlas Data Federation 可使用配置的 AWS IAM 档案访问的 S3 存储桶的名称完全匹配。

stores.[n].additionalStorageClasses

可选AWS S3 存储类的数组。Atlas Data Federation 将在查询结果中包含这些存储类中的文件。有效值为:

  • INTELLIGENT_TIERING 以包含智能分层存储类中的文件

  • STANDARD_IA 将文件包含在标准-不频繁访问中存储类

    注意

    默认情况下支持标准存储类中的文件。

stores.[n].prefix

可选。Prefix Atlas Data Federation 适用于在 S3 存储桶中搜索文件。

例如,考虑具有以下结构的 S3 存储桶 metrics

metrics
|--hardware
|--software
|--computed

联合数据库实例存储将 prefix 的值预先添加到 databases.[n].collections.[n].dataSources.[n].path 以创建要引入的文件的完整路径。将 prefix 设置为 /software 会将使用联合数据库实例存储的任何 databases 对象限制为只能使用子路径 /software

如果省略,Atlas Data Federation 会从 S3 存储桶的根目录搜索所有文件。

stores.[n].delimiter

可选。 在联合数据库实例存储中用于分隔databases.[n].collections.[n].dataSources.[n].path段的分隔符。 Data Federation 使用分隔符有效地遍历具有分层目录结构的S 3存储桶。 您可以指定 S3 对象键 支持的任何字符 作为分隔符。例如,您可以指定下划线 ( _ ) 或加号 ( + ) 或多个字符(例如双下划线 ( __ ))作为分隔符。

如果省略,则默认值为 "/"

stores.[n].includeTags

可选。决定是否在给定路径中的文件上使用 S3 标记作为附加分区属性。有效值为 truefalse

如果省略,则默认值为 false

如果设为 true,Atlas Data Federation 则会执行以下操作:

  • 添加 S3 标记作为附加分区属性。

  • 为标记的文件添加新的顶层 BSON 元素,将每个标记与每个文档关联起来。

警告

如果设置为 true,Atlas Data Federation 会额外调用 S3 来获取标记,从而处理文件以获得其他分区属性。这种行为可能会影响性能。

stores.[n].public

可选。指定存储桶是否公开。

如果设置为 true,Atlas Data Federation 不会使用配置的 AWS IAM 角色来访问 S3 存储桶。如果设置为 false,则配置的 AWS IAM 必须包含访问 S3 存储桶的权限,即使该存储桶是公用的。

如果省略,则默认值为 false

1"databases" : [
2 {
3 "name" : "<string>",
4 "collections" : [
5 {
6 "name" : "<string>",
7 "dataSources" : [
8 {
9 "storeName" : "<string>",
10 "defaultFormat" : "<string>",
11 "path" : "<string>",
12 "provenanceFieldName": "<string>",
13 "omitAttributes": <boolean>
14 }
15 ]
16 }
17 ],
18 "maxWildcardCollections" : <integer>,
19 "views" : [
20 {
21 "name" : "<string>",
22 "source" : "<string>",
23 "pipeline" : "<string>"
24 }
25 ]
26 }
27]
databases

对象数组,其中每个对象均代表一个数据库、其集合以及(可选)这些集合的所有视图。每个数据库均可有多个 collectionsviews 对象。

databases.[n].name

Atlas Data Federation 将数据存储中包含的数据映射到数据库的数据库名称。

databases.[n].collections

对象数组,其中每个对象代表一个集合和映射到 stores 联合数据库实例存储的数据源。

databases.[n].collections.[n].name

Atlas Data Federation 将每个 databases.[n].collections.[n].dataSources.[n].storeName 中包含的数据映射到的集合的名称。数组中的每个对象代表集合与 stores 数组中对象之间的映射。

通过为集合名称指定 *,并在 path 字段中指定 collectionName() 函数,可以从文件路径动态生成集合名称。有关示例,请参阅从文件路径动态生成集合名称

databases.[n].collections.[n].dataSources

对象数组,其中每个对象代表要映射到集合的一个 stores 联合数据库实例存储。

databases.[n].collections.[n].dataSources.[n].storeName

要映射到 <collection> 的联合数据库实例存储的名称。必须与 stores 数组中对象的 name 相匹配。

databases.[n].collections.[n].dataSources.[n].path

控制 Atlas Data Federation 在将文件映射到 <collection> 之前,如何在 storeName 中搜索和解析文件。联合数据库实例将 stores.[n].prefix 置于 path 之前,以构建内部搜索的完整路径。指定 / 以捕获 prefix 路径中的所有文件和文件夹。

例如,某一 S3 存储桶的 metrics 采用以下结构:

metrics
|--hardware
|--software
|--computed

/path指示 Atlas Data Federation 搜索metrics存储桶中的所有文件和文件夹。

/hardwarepath 指示 Atlas Data Federation 仅搜索该路径下的文件进行摄取。

如果 prefixsoftware,Atlas Data Federation 仅搜索路径 /software/computed 中的文件。

* 通配符附加到此路径会指示 Atlas Data Federation 包含此路径中从该时间点起的所有文件和文件夹。例如,/software/computed* 将匹配 /software/computed-detailed/software/computedArchive/software/computed/errors 等文件。

path 支持用于解析文件名的其他语法,包括:

  • 从文件名生成文档字段

  • 使用正则表达式控制字段生成。

  • 设置按时间戳分桶文件名的界线。

请参阅为 S3 数据定义路径以了解更多信息。

指定 path 时:

  • 指定分区属性的数据类型。

  • 确保分区属性类型与要解析的数据类型相匹配。

  • 使用 delimiter 中指定的分隔符。

在指定相同类型的属性时,请执行以下任一操作:

  • 在属性之间添加常量分隔符。

  • 使用正则表达式来描述搜索模式。要了解更多信息,请参阅不支持的解析函数

databases.[n].collections.[n].dataSources.[n].defaultFormat

可选。Data Federation 在搜索 databases.[n].collections.[n].dataSources.[n].storeName 时遇到不带扩展名的文件时采用的默认格式。

以下值对 defaultFormat 字段有效:

.json, .json.gz, .bson, .bson.gz, .avro, .avro.gz, .orc, .tsv, .tsv.gz, .csv, .csv.gz, .parquet

注意

如果您的文件格式为 CSVTSV,则必须在数据中包含标题行。有关详细信息,请参阅 CSV 和 TSV

如果省略,Data Federation 将尝试处理文件的几个字节来检测文件类型。

提示

另请参阅:

databases.[n].collections.[n].dataSources.[n].provenanceFieldName

包含结果中文档来源的字段的名称。如果在存储配置中指定了此设置,Atlas Data Federation 则会为结果中的每个文档返回以下字段:

字段名称
说明
provider
联合数据库实例存储配置中的提供者 (stores.[n].provider)
region
AWS 区域 (stores.[n].region)
bucket
Amazon Web Services S3存储桶 ( stores.[n].bucket)的名称
key
lastModified
文档最后修改的日期和时间。

您无法使用 Atlas 用户界面中的可视化编辑器来配置此设置。

databases.[n].collections.[n].dataSources.[n].omitAttributes

可选。指定是否省略 Atlas Data Federation 添加到集合中的文档的属性(键和值对)的标志。您可以指定以下值之一:

  • false - 要添加属性

  • true - 省略这些属性

如果省略,则默认为 false,Atlas Data Federation 会添加属性。

例子

考虑一个名为 /employees/949-555-0195.json 的文件,为其配置 path/employees/{phone string}。如果 omitAttributesfalse,Atlas Data Federation 会将属性 phone: 949-555-0195 添加到此文件中的文档,无论文档中是否已存在键值对。如果将 omitAttributes 设置为 true,则 Atlas Data Federation 不会将属性添加到虚拟集合中的文档。

databases.[n].maxWildcardCollections

可选。数据库中通配符 * 集合的最大数量。每个通配符集合只能有一个数据源。值可以在 11000 之间(含)。如果省略,默认为 100

databases.[n].views

对象数组,其中的每个对象代表一个集合上的一个聚合管道。要了解有关视图的更多信息,请参阅视图

databases.[n].views.[n].name

视图名称。

databases.[n].views.[n].source

视图源集合的名称。 如果要创建具有$sql阶段的视图,则必须省略此字段,因为SQL声明将指定源集合。

databases.[n].views.[n].pipeline

要应用 集合 的聚合管道阶段 source。您还可以使用$sql阶段创建视图。

后退

定义数据存储