LoginSignup
1
1

More than 5 years have passed since last update.

F# から Azure Table Storage にデータをインサートする

Posted at

AzureとF#をいじったときのメモ。

参考にしたもの

コードの外観

だいたいF# Snippetsのものと同じです。ただ、CloudConfigurationManagerを使わずに、AzurePortal->ストレージアカウント->アクセスキー画面にある「接続文字列」を直接CloudStorageAccout.Parseに渡しても動きました。

  • 外部からJSONをFSharp.Data.JsonProviderで読み込み、それをAzure Table Storageに投げ込むという処理です
  • NuGetからFSharp.DataとWindowsAzure.Storageをパッケーとして追加しておいてください
// F# の詳細については、http://fsharp.org を参照してください
// 詳細については、'F# チュートリアル' プロジェクトを参照してください。

open System
open FSharp.Data
open Microsoft.WindowsAzure.Storage
open Microsoft.WindowsAzure.Storage.Table

let conn = "..." // AzurePortal->

let docid = "..."

let key = "..."

let baseUrl = "https://www.../"

type ConnpassEvents = JsonProvider<"""
{
    "kind": "fusiontables#sqlresponse",
    ...
}
""">

type TechEvent(partition, row, title: string, url: string, address: string, createDate: string) =
    inherit TableEntity(partitionKey = partition, rowKey = row)

    new (title, url, address, createDate) = TechEvent("defaultPartition", Guid.NewGuid().ToString(), title, url, address, createDate)

    member val Title = title with get, set

    member val Url = url with get, set

    member val Address = address with get, set

    member val CreateDate = createDate with get, set

[<EntryPoint>]
let main argv = 
    let result = ConnpassEvents.Load(sprintf "https://www.../%s/%s" docid key)
    let table =
        let account = CloudStorageAccount.Parse conn
        let client = account.CreateCloudTableClient()
        let table = client.GetTableReference("Table")
        table.CreateIfNotExists() |> ignore
        table
    let mutable batchOp = TableBatchOperation()
    for row in result.Rows do
        let title = row.JsonValue.[0].AsString()
        let url = row.JsonValue.[1].AsString()
        let address = row.JsonValue.[2].AsString()
        let createDate = row.JsonValue.[4].AsString()
        let entity = TechEvent(title, url, address, createDate)
        let op = TableOperation.Insert(entity)
        table.Execute(op) |> ignore

    0 // 整数の終了コードを返します
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1