[英]Traverse a type generated by Azure Storage type provider in F#
我试图了解F#中的类型提供者以及它们可以用于什么。 我有以下问题:
我在Azure Blob存储中有一系列JSON对象,存储方式如下:
container/YYYY/MM/DD/file.json
我可以使用类型提供程序轻松导航到给定日期的特定文件。 例如,我可以将JSON对象作为5月5日的字符串访问
type Azure = AzureTypeProvider<"ConnectionString">
let containers = Azure.Containers.``container``.``2017/``.``05/``.``05/``.``file.json``.Read()
如何获取用户输入日期字符串,说“2017-05-05”并以类型安全的方式获取相应的JSON对象? 我应该使用类型提供商吗?
你遇到了一个常见的“问题”,它涉及许多TP的性质,特别是那些提供针对实际数据的模式的问题 - 因为它混合了数据和类型之间的界限,你需要知道你什么时候工作一种适用于静态类型的模式(即,您在编译时知道正在使用的blob容器的模式),或者以一种本身动态的方式工作。
你有几个选择。
回归“原生”.NET SDK。 每个BLOB /容器具有关联AsCloudBlob()
或AsCloudContainer()
方法,这样你就可以使用TP为您做知道如容器名称,也许最高级别文件夹等位,然后回落到原生SDK对于弱 - 比特。
自TP的最新版本发布以来,现在支持以下几种方式进行编程访问: -
您可以使用索引器来获取blob的不安全句柄,例如, let blob = Azure.Containers.container.["2017/05/05/file.json"]
。 不能保证blob存在,所以你需要检查自己等等。
您可以使用TryGetBlockBlob()
方法,它返回一个blob option async
- 在幕后,它将检查blob是否存在,然后返回None或Some blob。
您可以在此处查看所有这些替代方案的更多示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.