AWS S3 存储桶
Atlas Data Federation 支持 S3 存储桶作为联合数据库实例存储。您必须在联合数据库实例中定义到 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 集合之间的映射。
stores
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].region
托管 S3 存储桶的 AWS 区域的名称。有关有效区域名称的列表,请参阅 Amazon Web Services (AWS)。
stores.[n].additionalStorageClasses
可选。AWS S3 存储类的数组。Atlas Data Federation 将在查询结果中包含这些存储类中的文件。有效值为:
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 对象键 支持的任何字符 作为分隔符。例如,您可以指定下划线 (_
) 或加号 (+
) 或多个字符(例如双下划线 (__
))作为分隔符。如果省略,则默认值为
"/"
。
databases
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
对象数组,其中每个对象均代表一个数据库、其集合以及(可选)这些集合的所有视图。每个数据库均可有多个
collections
和views
对象。
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].path
控制 Atlas Data Federation 在将文件映射到
<collection>
之前,如何在storeName
中搜索和解析文件。联合数据库实例将stores.[n].prefix
置于path
之前,以构建内部搜索的完整路径。指定/
以捕获prefix
路径中的所有文件和文件夹。例如,某一 S3 存储桶的
metrics
采用以下结构:metrics |--hardware |--software |--computed /
的path
指示 Atlas Data Federation 搜索metrics
存储桶中的所有文件和文件夹。/hardware
的path
指示 Atlas Data Federation 仅搜索该路径下的文件进行摄取。如果
prefix
为software
,Atlas Data Federation 仅搜索路径/software/computed
中的文件。将
*
通配符附加到此路径会指示 Atlas Data Federation 包含此路径中从该时间点起的所有文件和文件夹。例如,/software/computed*
将匹配/software/computed-detailed
、/software/computedArchive
和/software/computed/errors
等文件。path
支持用于解析文件名的其他语法,包括:从文件名生成文档字段
使用正则表达式控制字段生成。
设置按时间戳分桶文件名的界线。
请参阅为 S3 数据定义路径以了解更多信息。
指定
path
时:指定分区属性的数据类型。
确保分区属性类型与要解析的数据类型相匹配。
使用
delimiter
中指定的分隔符。
在指定相同类型的属性时,请执行以下任一操作:
在属性之间添加常量分隔符。
使用正则表达式来描述搜索模式。要了解更多信息,请参阅不支持的解析函数。
可选。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
注意
如果您的文件格式为
CSV
或TSV
,则必须在数据中包含标题行。有关详细信息,请参阅 CSV 和 TSV。如果省略,Data Federation 将尝试处理文件的几个字节来检测文件类型。
databases.[n].collections.[n].dataSources.[n].provenanceFieldName
包含结果中文档来源的字段的名称。如果在存储配置中指定了此设置,Atlas Data Federation 则会为结果中的每个文档返回以下字段:
字段名称说明provider
联合数据库实例存储配置中的提供者 (stores.[n].provider
)region
AWS 区域 (stores.[n].region
)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}
。如果omitAttributes
为false
,Atlas Data Federation 会将属性phone: 949-555-0195
添加到此文件中的文档,无论文档中是否已存在键值对。如果将omitAttributes
设置为true
,则 Atlas Data Federation 不会将属性添加到虚拟集合中的文档。
databases.[n].maxWildcardCollections
可选。数据库中通配符
*
集合的最大数量。每个通配符集合只能有一个数据源。值可以在1
到1000
之间(含)。如果省略,默认为100
。
databases.[n].views.[n].source
视图源集合的名称。 如果要创建具有
$sql
阶段的视图,则必须省略此字段,因为SQL声明将指定源集合。
databases.[n].views.[n].pipeline
要应用 集合 的聚合管道阶段
source
。您还可以使用$sql
阶段创建视图。