Azure Blob 存储
Atlas Data Federation 支持 Azure Blob 存储容器作为联合数据库实例存储。您必须在联合数据库实例中定义到 Azure Blob 容器的映射,才能运行数据查询。
注意
虽然我们在本页中将 blob 称为文件,将分隔符分隔的前缀称为目录,但这些 blob 存储服务实际上并不是文件系统,并且在所有情况下都不具有与硬盘驱动器上的文件相同的行为。
Azure Blob Storage 数据存储配置示例
例子
考虑包含从数据中心收集的数据的 Azure Blob 存储容器 datacenter-alpha
:
|--metrics |--hardware
/metrics/hardware
路径存储 JSON 文件,其中包含源自数据中心硬件的指标,每个文件名是该文件所涵盖的 24 小时周期的 UNIX 时间戳(毫秒):
/hardware/1564671291998.json
配置如下:
在
eastus2
Azure 地区中的datacenter-alpha
Azure Blob 存储容器上定义联合数据库实例存储。联合数据库实例存储被明确限制为仅包含metrics
目录路径中的数据文件。将
hardware
目录中的文件映射到 MongoDB 数据库datacenter-alpha-metrics
和集合hardware
。配置映射包括用于捕获文件名中隐含的时间戳的解析逻辑。
{ "stores" : [ { "name" : "datacenter", "provider" : "azure", "region" : "eastus2", "containerName" : "datacenter-alpha", "serviceURL" : "https://mystorageaccount.blob.core.windows.net/" } ], "databases" : [ { "name" : "datacenter-alpha-metrics", "collections" : [ { "name" : "hardware", "dataSources" : [ { "storeName" : "datacenter", "path" : "/hardware/{date date}" } ] } ] } ] }
Atlas Data Federation解析Azure Blob 存储容器datacenter-alpha
并处理/metrics/hardware/
下的所有文件。 collections
使用路径解析语法将文件名映射到每个文档中的date
字段,即 ISO- 8601日期。 如果文档中不存在匹配的date
字段, Atlas Data Federation会添加该字段。
连接到联合数据库实例的用户可以使用 MongoDB 查询语言和支持的聚合通过 datacenter-alpha-metrics.hardware
集合分析 Azure Blob 存储容器中的数据。
配置格式
联合数据库实例配置的格式如下:
1 { 2 "stores" : [ 3 { 4 "name" : "<string>", 5 "provider": "<string>", 6 "region" : "<string>", 7 "serviceURL" : "<string>", 8 "containerName" : "<string>", 9 "delimiter" : "<string>", 10 "prefix": "<string>", 11 "public": <boolean> 12 } 13 ], 14 "databases" : [ 15 { 16 "name" : "<string>", 17 "collections" : [ 18 { 19 "name" : "<string>", 20 "dataSources" : [ 21 { 22 "storeName" : "<string>", 23 "path" : "<string>", 24 "defaultFormat" : "<string>", 25 "provenanceFieldName": "<string>", 26 "omitAttributes": <boolean> 27 } 28 ] 29 } 30 ], 31 "maxWildcardCollections" : <integer>, 32 "views" : [ 33 { 34 "name" : "<string>", 35 "source" : "<string>", 36 "pipeline" : "<string>" 37 } 38 ] 39 } 40 ] 41 } 42
stores
stores
对象定义与联合数据库实例关联的每个数据存储。 联合数据库实例存储可捕获Amazon Web Services S3存储桶或Azure Blob 存储容器中的文件、 Atlas集群中的文档或存储在可公开访问的URL中的文件。 Data Federation只能访问权限stores
对象中定义的数据存储。databases
databases
对象定义stores
中定义的每个联合数据库实例存储与数据库中的 MongoDB 集合之间的映射。
stores
1 "stores" : [ 2 { 3 "name" : "<string>", 4 "provider" : "<string>", 5 "region" : "<string>", 6 "serviceURL" : "<string>", 7 "containerName" : "<string>", 8 "delimiter": "<string", 9 "prefix" : "<string>", 10 "public": <boolean> 11 } 12 ]
stores
对象数组,其中每个对象代表一个与联合数据库实例关联的数据存储。联合数据库实例存储捕获:
Azure Blob 存储容器中的文件
Atlas 集群中的文档
存储在可公开访问的 URL 上的文件。
Atlas Data Federation 只能访问
stores
对象中定义的数据存储。
stores.[n].name
联合数据库实例存储的名称。
databases.[n].collections.[n].dataSources.[n].storeName
字段会引用此值以作为映射配置的一部分。
stores.[n].serviceURL
包含 blob 容器的 Azure Blob 存储帐户的 URL。
serviceURL
必须采用以下格式:https://<storage-account-name>.blob.core.windows.net/ 其中
storage-account-name
是 Azure Blob 存储帐户的名称。
stores.[n].prefix
可选。在 Azure Blob 存储中搜索文件时,应用前缀 Atlas Data Federation。
例如,考虑具有以下结构的 Azure Blob 存储容器
metrics
:metrics |--hardware |--software |--computed 联合数据库实例存储将
prefix
的值预先添加到databases.[n].collections.[n].dataSources.[n].path
以创建要引入的文件的完整路径。将prefix
设置为/software
会将使用联合数据库实例存储的任何databases
对象限制为只能使用子路径/software
。如果省略,Atlas Data Federation 将搜索 Azure Blob 存储容器的根目录中的所有文件。
stores.[n].delimiter
可选。 在联合数据库实例存储中用于分隔
databases.[n].collections.[n].dataSources.[n].path
段的分隔符。 Data Federation使用分隔符有效地遍历具有分层目录结构的Azure Blob 存储容器。如果省略,则默认值为
"/"
。
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
中搜索和解析文件。 Atlas Data Federation将stores.[n].prefix
附加到path
之前,以构建内部搜索的完整路径。 指定/
以捕获prefix
路径中的所有文件和目录。例如,考虑具有以下结构的 Azure Blob 存储容器
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
中指定的分隔符。
在指定相同类型的属性时,请执行以下任一操作:
在属性之间添加常量分隔符。
使用正则表达式来描述搜索模式。要了解更多信息,请参阅不支持的解析函数。
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
注意
如果您的文件格式为
CSV
或TSV
,则必须在数据中包含标题行。有关详细信息,请参阅 CSV 和 TSV。如果省略,Data Federation 将尝试处理文件的几个字节来检测文件类型。
databases.[n].collections.[n].dataSources.[n].provenanceFieldName
包含结果中文档来源的字段的名称。如果在存储配置中指定了此设置,Atlas Data Federation 则会为结果中的每个文档返回以下字段:
字段名称说明provider
联合数据库实例存储配置中的提供商
stores.[n].provider
()。region
Azure地区(
stores.[n].region
)。serviceURL
包含 blob 容器的Azure Blob
stores.[n].serviceURL
存储帐户的URL ()。containerName
Azure Blob 存储容器的名称 (
stores.[n].containerName
)key
您无法使用 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
阶段创建视图。