CloudBlobContainer中有一个名为ListBlobs的方法,但似乎它返回容器中的所有blob。这对我不起作用。
我在这个主题上进行了很多搜索,但没有找到任何有用的东西。 这个link只显示了基础知识。
--------- 编辑
我的下面的答案没有懒惰地检索blob,而是检索容器中的所有blob,然后过滤结果。 目前还没有解决方案可以懒惰地检索blob。
通过几个例子,事情会变得更清晰。对于那些不知道如何获取Azure存储帐户中容器引用的人,我建议参考这个教程。
按最后修改日期排序并获取第2页(每页10个Blob):
blobContainer.ListBlobs().OfType<CloudBlob>()
.OrderByDescending(b=>b.Properties.LastModified).Skip(10).Take(10);
获取特定类型的文件。如果您在上传时设置了ContentType(我强烈建议您这样做),则此方法将有效:
blobContainer.ListBlobs().OfType<CloudBlob>()
.Where(b=>b.Properties.ContentType.StartsWith("image"));
获取 .jpg 文件并按文件大小排序,假设您使用文件名及其扩展名命名:
blobContainer.ListBlobs().OfType<CloudBlob>()
.Where(b=>b.Name.EndsWith(".jpg")).OrderByDescending(b=>b.Properties.Length);
最后,除非您告诉它执行查询,否则查询不会被执行:
var blobs = blobContainer.ListBlobs().OfType<CloudBlob>()
.Where(b=>b.Properties.ContentType.StartsWith("image"));
foreach(var b in blobs) //This line will call the service,
//execute the query against it and
//return the desired files
{
// do something with each file. Variable b is of type CloudBlob
}
我对Windows Azure Blob Storage的认识是它很基础,非常地基础。你应该仅将文档和相关元数据存储在其中,并通过ID检索单个blob。
最近,我将一个应用程序从MongoDB迁移到了Windows Azure Blob Storage。从MongoDB来,我希望有一堆不同的有效方式来检索文档。迁移后,我现在依赖传统的关系型数据库和ElasticSearch将blob信息以更可搜索的方式存储。
Windows Azure Blob Storage如此受限,这真的太糟糕了。我希望在未来能看到大大增强的搜索功能(例如,按元数据、属性、blob名称正则表达式等进行搜索)。此外,基于map/reduce的索引将是很棒的。如果Microsoft做到这些,他们有机会从其他文档存储系统转换很多人。
现在预览版推出了Azure存储的Blob索引,这是一个可以添加到Blob(新的或现有的)的元数据的托管索引。这将消除使用创意容器名称进行伪索引或自行维护次要索引的需要。
为了返回特定结果,一种可能的选择是使用Blob和/或容器前缀来有效地索引你正在存储的内容。例如,你可以在添加Blob时加上日期和时间作为前缀,或者根据你的用例,你可以加上用户作为前缀来“索引”你的Blob。然后,你可以在ListBlobs[Segmented]调用中使用此前缀或其一部分以返回特定的结果,显然,你需要先放置最通用的元素,然后放置更具体的元素,例如:
2016_03_15_10_15_blobname
我在这里寻找除了标签之外的其他选项,至少使用REST API似乎已经内置了。
通过标签查找Blob操作可查找存储帐户中所有与给定搜索表达式匹配的标记的Blob。
https://learn.microsoft.com/en-us/rest/api/storageservices/find-blobs-by-tags
上传 blob 时可以添加标签。
目前,U-SQL不支持交互式查询/搜索。
对于我的用例,我计划利用Azure Blob存储的低成本优势,并在每个新的Blob文件创建事件触发Azure函数,在Blob上进行数据转换,以将处理后的输出提供给支持查询的Azure Cosmos DB或RDBMS。
在此期间,Azure Blob Storage得到了增强,以支持索引标签。
引用:使用Blob索引标签管理和查找Azure Blob数据
随着数据集变得越来越大,在一堆数据中找到特定对象可能会变得困难。Blob索引标签通过使用键值索引标签属性提供数据管理和发现功能。您可以对单个容器或存储帐户中的所有容器中的对象进行分类和查找。随着数据需求的变化,可以通过更新其索引标签动态地对对象进行分类。对象可以保留其当前容器组织中的位置。
Blob索引标签可让您:
- 使用键值索引标签动态分类您的Blob
- 快速查找整个存储帐户中特定标记的Blob
- 基于索引标签的评估指定Blob API的条件行为
- 在高级控制中使用索引标签,例如Blob生命周期管理等特性
源代码示例如下: