C#からAzureテーブルストレージを操作する方法はこちらに書いてあったので、これを参考にPowerShellで置き換えてみました。
http://azure.microsoft.com/ja-jp/documentation/articles/storage-dotnet-how-to-use-tables/
ストレージアカウントへの接続コンテキスト生成
Azureストレージへの接続のためのコンテキストを作ります。ここで生成したオブジェクトを利用して後の処理を実行していきます。
Import-Module Azure $storageAccountName = "ストレージアカウント名" $storageAccessKey = "アクセスキー" $context = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccessKey
テーブルを作成
customersテーブルを作成します。
$tableName = "customers" New-AzureStorageTable -Context $context -Name $tableName
テーブルの参照を取得
作成したテーブルの参照を取得します。
$table = Get-AzureStorageTable -Context $context -Name $tableName
ここでAzureStorageTableオブジェクトの参照が取得できますが、実際によく使うのはCloudTableプロパティから取得できるCloudTableオブジェクトです。
PS>($table.CloudTable).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False CloudTable System.Object
エンティティをテーブルに追加する
#TableEntityオブジェクトの生成 $customer1 = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.TableEntity -ArgumentList "Smith","Jeff" | Add-Member -Name "Email" -Value "Jeff@contoso.com" -MemberType NoteProperty -PassThru | Add-Member -Name "PhoneNumber" -Value "425-555-0104" -MemberType NoteProperty -PassThru $customer2 = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.TableEntity -ArgumentList "Smith","Ben" | Add-Member -Name "Email" -Value "Ben@contoso.com" -MemberType NoteProperty -PassThru | Add-Member -Name "PhoneNumber" -Value "425-555-0102" -MemberType NoteProperty -PassThru #Insert用のTableOperationを定義 $operation1 = [Microsoft.WindowsAzure.Storage.Table.TableOperation]::Insert($customer1) $operation2 = [Microsoft.WindowsAzure.Storage.Table.TableOperation]::Insert($customer2) #定義したTableOperationの実行 $table.CloudTable.Execute($operation1) $table.CloudTable.Execute($operation2)
単一エンティティの取得
$retrieveOperation = [Microsoft.WindowsAzure.Storage.Table.TableOperation]::Retrieve("Smith", "Ben") $result = $table.CloudTable.Execute($retrieveOperation)
Resultプロパティの中にエンティティが入っています。
PS> $result.Result Properties : {} PartitionKey : Smith RowKey : Ben Timestamp : 2015/01/16 2:30:03 +00:00 ETag : W/"datetime'2015-01-16T02%3A30%3A03.6278194Z'"
クエリの実行
$query = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.TableQuery $query.FilterString = [Microsoft.WindowsAzure.Storage.Table.TableQuery]::GenerateFilterCondition( "PartitionKey", [Microsoft.WindowsAzure.Storage.Table.QueryComparisons]::Equal, "Smith" ) $table.CloudTable.ExecuteQuery($query)
結果は以下のようになります。エンティティのリストが取れます。
Properties : {} PartitionKey : Smith RowKey : Ben Timestamp : 2015/01/16 2:30:03 +00:00 ETag : W/"datetime'2015-01-16T02%3A30%3A03.6278194Z'" Properties : {} PartitionKey : Smith RowKey : Jeff Timestamp : 2015/01/16 2:30:03 +00:00 ETag : W/"datetime'2015-01-16T02%3A30%3A03.4338194Z'"
複数の条件を組み合わせたい場合はCombineFiltersを利用します。
$query.FilterString =[Microsoft.WindowsAzure.Storage.Table.TableQuery]::CombineFilters( [Microsoft.WindowsAzure.Storage.Table.TableQuery]::GenerateFilterCondition( "prop1", [Microsoft.WindowsAzure.Storage.Table.QueryComparisons]::Equal, "value1" ), [Microsoft.WindowsAzure.Storage.Table.TableOperators]::And, [Microsoft.WindowsAzure.Storage.Table.TableQuery]::GenerateFilterCondition( "prop2", [Microsoft.WindowsAzure.Storage.Table.QueryComparisons]::Equal, "value2" ) )
なお、TableOperatorsとして使えるのはAnd、Or、Notです。
TableOperators Members (Microsoft.WindowsAzure.Storage.Table)
QueryComparisonsとして利用できるのは以下の6つです。
QueryComparisons Fields (Microsoft.WindowsAzure.Storage.Table)
Name | Description |
---|---|
Equal | the Equal operator. |
GreaterThan | the Greater Than operator. |
GreaterThanOrEqual | the Greater Than or Equal operator. |
LessThan | the Less Than operator. |
LessThanOrEqual | the Less Than or Equal operator. |
NotEqual | the Not Equal operator. |
値はOData形式で設定する必要があります。DateTimeなどは要注意。
Azure Storage TableをTimeStampを使ってクエリする - YOMON8.NET
テーブルの削除
Remove-AzureStorageTable -Context $context -Name $tableName -Force