簡體   English   中英

遍歷F#中Azure存儲類型提供程序生成的類型

[英]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容器的模式),或者以一種本身動態的方式工作。

你有幾個選擇。

  1. 回歸“原生”.NET SDK。 每個BLOB /容器具有關聯AsCloudBlob()AsCloudContainer()方法,這樣你就可以使用TP為您知道如容器名稱,也許最高級別文件夾等位,然后回落到原生SDK對於弱 - 比特。

  2. 自TP的最新版本發布以來,現在支持以下幾種方式進行編程訪問: -

    • 您可以使用索引器來獲取blob的不安全句柄,例如, let blob = Azure.Containers.container.["2017/05/05/file.json"] 不能保證blob存在,所以你需要檢查自己等等。

    • 您可以使用TryGetBlockBlob()方法,它返回一個blob option async - 在幕后,它將檢查blob是否存在,然后返回None或Some blob。

您可以在此處查看所有這些替代方案的更多示例。

  1. 如果您事先知道正在使用的完整路徑(在編譯時 - 可能是一些眾所周知的路徑等),您還可以使用TP中的脫機支持在編譯時創建顯式blob模式,而無需一個真正的存儲帳戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM