Microsoft Azure テーブル API
Azure と DataSnap でのクラウド コンピューティング への移動
警告: DSAzure API は非推奨になり、Data.Cloud.AzureAPI に置き換えられました。クラウド コンピューティング アプリケーションの開発時には、新しい API を使用することをお勧めします。詳細は、「DataSnap でのクラウド コンピューティング」を参照してください。
Microsoft Azure テーブル API は DSAzure ユニット内の TAzureTableService クラスにあります。使用されている API の例については、DSAzureTable ユニットと DSAzureTableDialog ユニットの implementation セクションをご覧ください。これが、この API を使用するビジュアル コンポーネントです。
提供されている機能には、テーブルの作成、テーブルの削除、使用可能なテーブルの取得、テーブルの行(エンティティ)の取得、テーブルへの行の追加、テーブルの行の削除などがあります。ここで、行はどのようなスキーマにも準拠しておらず、各行はさまざまな列(プロパティ)群を持てることに注意することが大切です。また、すべての行には少なくとも 2 つの列 PartitionKey および RowKey があり、それらが合わさってその行の一意なキーになることにも注意してください。すべての行には Timestamp もありますが、これは、ユーザーに公開されたりユーザーが変更するためのものではありません。
以下の説明では、TAzureTableService のインスタンスを既に作成してあると仮定します。どのコード スニペット(断片)でも、このインスタンスは FTableService という名前で参照されます。さらに、XML パーサーが手元にあり、使用できるように既に適切に構成されているものとします。API は、場合によっては XML を返しますが、その場合、その XML の解析方法がわかっている必要があります。
テーブル リストの取得
使用可能なテーブルのリストを取得するには、以下を呼び出します。
xml := FTableService.QueryTables();
その結果、たとえば以下のような XML 文字列が返されます。
<feed ...> ... <entry> <id>http://myaccount.tables.core.windows.net/Tables('mytable')</id> ... <content type="application/xml"> <m:properties> <d:TableName>mytable</d:TableName> </m:properties> </content> </entry> </feed>
返される XML などの情報の完全な例については、このトピックの末尾に示す MSDN リンクを参照してください。
この XML にはエントリが含まれており、各エントリはテーブルになります。テーブルには、ID のほか、テーブルの名前を含むプロパティのリストがあります。
テーブルの作成
テーブルを作成するには、以下を呼び出すだけです。
Success := FTableService.CreateTable('tablename');
CreateTable は、正常に終了した場合は True を、そうでない場合は False を、それぞれ返します。選択するテーブル名は、以下の命名規則に従っている必要があります。
- 小文字である
- 英数字のみで構成されている
- 数字以外で始まる
- 長さは 3 ~ 63 文字である
テーブルの削除
サービスを削除するには、、以下のコードを使用します。
Success := FTableService.DeleteTable(FTableName);
サーバー上での削除には少し時間がかかる場合があることに注意してください。テーブルがなくなったように見えても、削除されたテーブルと同じ名前のテーブルを新規作成しようとすると、作成が失敗する場合があります。その場合には、別の名前を選択するか、しばらく待ってから再度試みてください。
テーブルの行の一覧表示
テーブルの行(エンティティ)を取得するには、以下を行います。
xml := FTableService.QueryEntities(FTableName, BuildFilterString);
返される XML は次のようになります。
<feed ...> ... <entry ...> <id>http://myaccount.tables.core.windows.net/Customers(PartitionKey='SomePKey',RowKey='SomeRKey')</id> ... <content type="application/xml"> <m:properties> <d:PartitionKey>SomePKey</d:PartitionKey> <d:RowKey>SomeRKey</d:RowKey> <d:Timestamp m:type="Edm.DateTime">2008-10-01T15:26:04.6812774Z</d:Timestamp> <d:Address>221 Avenue Road, Hollywood CA 90027</d:Address> <d:SomeNumber m:type="Edm.Int32">27</d:SomeNumber> </m:properties> </content> </entry> </feed>
返される XML とその中に含まれているすべての情報の完全な例については、このトピックの末尾に示す MSDN リファレンス リンクを参照してください。
XML では、各行は entry で表され、専用の一意な ID を持っています。content ノード内には、テーブルの列を表すプロパティがあります。各列には名前(タグ)と値がありますが、型(type)が付いている場合もあります。この型は、サポートされているデータ型のいずれかです(サポートされているデータ型については、このトピックの末尾に示す MSDN ドキュメントを参照してください)。
テーブルへの行の追加
既存のテーブルに行を作成するには、まず、行とそのすべての列(タイムスタンプを除く)を表す TJSONObject オブジェクトを(DBXJSON ユニットを使って)作成する必要があります。JSON 表記を使用する場合、オブジェクトは以下のいずれかのようになります。
{"RowKey":"row1","PartitionKey":"Imported","AnyKeyName":"Hello World!"} {"RowKey":"row2","PartitionKey":"Imported","OtherValue":["true","Edm.Boolean"]}
オブジェクトは、RowKey および PartitionKey と、希望する他の任意の列/値ペアで構成されている必要があります。列のデータ型を指定しない場合は、String と仮定されます。データ型を指定する場合は、列の値を TJSONArray として設定します。その配列の第 1 要素は列(セル)値の文字列表現で、第 2 要素は列のデータ型です。行をいったん作成すると、PartitionKey や RowKey の値を変更できないことに注意してください。
TJSONObject を作成したら、以下のコードを呼び出します(ここで、RowObj は作成した TJSONObject インスタンスです)。
xml := FTableService.InsertEntity('tablename', RowObj);
その結果、追加した行の XML 表現が返されます。その形式は、(XML がその 1 行のみ表しているため)最上位要素が entry になる点を除き、テーブルのすべての行をクエリする場合と同じです。
既存の行の変更
既存の行を変更する場合は、行の新規作成の場合と同じように TJSONObject インスタンスを作成し、RowKey と PartitionKey を適切に設定します。InsertEntry ではなく、UpdateEntry を呼び出します(パラメータは同じです)。その結果、更新の成否に応じて、True または False が返されます。たとえば、列に選択したデータ型がその列に格納されている値に有効でなかった場合は、更新が失敗します。
行の削除
既存のテーブルから行を削除するには、以下を呼び出します。
Success := FTableService.DeleteEntity('tablename', PartitionKey, RowKey);
呼び出しの際にわかっている必要があるのは、削除する行のパーティション キーと行キー、およびその行が存在するテーブルの名前のみです。削除に成功した場合は、True が返されます。