[英]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.