Table service のデータ モデルについて
テーブル サービスは、テーブル形式の構造化ストレージです。 以下のセクションでは、テーブル サービス データ モデルの概要を示します。
ストレージ アカウント
ストレージ アカウントは、ストレージ システム内でグローバルに一意なエンティティです。 ストレージ アカウントは Table サービスの親名前空間であり、承認の基礎となります。 各テーブルの名前が一意である限り、特定のストレージ アカウント内にテーブルをいくつでも作成できます。
ストレージ アカウントは、常に要求の URI で指定する必要があります。 テーブル サービスにアクセスするためのベース URI は次のとおりです。
https://myaccount.table.core.windows.net
テーブル、エンティティ、およびプロパティ
テーブルには、データがエンティティのコレクションとして格納されます。 エンティティは行に似ています。 エンティティには、プライマリ キーと一連のプロパティがあります。 プロパティは名前と型指定された値のペアであり、列に似ています。
テーブル サービスではテーブルにスキーマを設定しないため、同じテーブル内の 2 つのエンティティが異なるプロパティのセットを持つ場合があります。 開発者は、クライアント側でスキーマを設定することもできます。 テーブルには、エンティティをいくつでも含めることができます。
テーブル名
テーブル名は、次の規則に従う必要があります。
テーブル名は、アカウント内で一意である必要があります。
テーブル名には英数字のみ使用できます。
テーブル名を数字から開始することはできません。
テーブル名は大文字と小文字が区別されません。
テーブル名の長さは 3 ~ 63 文字にする必要があります。
一部のテーブル名は、"tables" を含めて予約されています。 予約されたテーブル名でテーブルを作成しようとすると、エラー コード 404 (Bad Request) が返されます。
これらの規則は、正規表現 "^[A-Za-z][A-Za-z0-9]{2,62}$" でも記述されます。
テーブル名の作成時に指定された大文字と小文字の違いは維持されますが、使用時には大文字と小文字は区別されません。
プロパティ名
プロパティ名は大文字と小文字が区別され、255 文字を超えることはできません。 プロパティ名は 、C# 識別子の名前付け規則に従う必要があります。
注意
一部の C# 識別子は、 XML 仕様に従って無効です。 プロパティ名はテーブル サービスに対する要求で XML ペイロードを介して送信されるため、これらの識別子はプロパティ名では使用できません。
重要
プロパティ名は、URL 内のテーブル サービスに渡されます。 一部の文字は、URL に表示するために UTF-8 (推奨) または MBCS でパーセント エンコードする必要があります。 このエンコードは、Azure Storage クライアント ライブラリを使用すると自動的に行われます。 ただし、エンコードしても URL パスでは無効な文字もあります。 プロパティ名でこれらの文字を使用することはできません。 \uE000 のようなコード ポイントは NTFS ファイル名では有効ですが、無効な Unicode 文字であるため、使用することはできません。 また、制御文字 (0x00 ~ 0x1F、\u0081 など) など、一部の ASCII 文字または Unicode 文字も使用できません。 HTTP/1.1 で Unicode 文字列に適用される規則については、以下を参照してください。
注意
バージョン 2009-04-14 以降では、テーブル サービスはプロパティ名でダッシュ (-) 文字をサポートしなくなりました。
プロパティの制約
エンティティでは、以下のセクションで説明する 3 つのシステム プロパティを含め、最大 255 個のプロパティを使用できます。 したがって、ユーザーは 3 つのシステム プロパティに加えて最大 252 個のカスタム プロパティを含めることができます。 エンティティのプロパティ内のすべてのデータの合計サイズは、1 MiB を超えることはできません。
システム プロパティ
エンティティには、必ず次のシステム プロパティがあります。
PartitionKey
プロパティRowKey
プロパティTimestamp
プロパティ
これらのシステム プロパティは、テーブルのすべてのエンティティに自動的に含められます。 これらのプロパティの名前は予約されており、変更できません。
PartitionKey
および RowKey
の値は開発者が挿入および更新します。 変更できない Timestamp
の値はサーバーが管理します。
キー フィールドで禁止されている文字
次の文字は、PartitionKey
プロパティと RowKey
プロパティの値として使用できません。
スラッシュ (/) 文字
円記号 (\) 文字
番号記号 (#) 文字
疑問符 (?) 文字
次のような U+0000 から U+001F までの制御文字が含まれています。
- 水平タブ文字 (\t)
- 改行文字 (\n)
- 復帰文字 (\r)
U+007F から U+009F までの制御文字
PartitionKey プロパティ
テーブルは、パーティションに分割することでストレージ ノード間の負荷分散をサポートします。 テーブルのエンティティはパーティションごとに整理されます。 パーティションは、同じパーティション キー値を処理する連続した範囲のエンティティです。 パーティション キーは、PartitionKey
プロパティで指定された、特定のテーブル内のパーティションの一意の識別子です。 パーティション キーは、エンティティのプライマリ キーの最初の部分を構成します。 パーティション キーには、最大 1024 文字のサイズの文字列値を指定できます。
すべての挿入操作、更新操作、および削除操作に PartitionKey
プロパティを含める必要があります。
RowKey プロパティ
プライマリ キーの 2 番目の部分は、RowKey
プロパティで指定された行キーです。 行キーは、特定のパーティション内のエンティティを示す一意の識別子です。
PartitionKey
と RowKey
の組み合わせで、テーブル内のすべてのエンティティを一意に識別します。
行キーは、最大 1024 文字のサイズの文字列値です。
すべての挿入操作、更新操作、および削除操作に RowKey
プロパティを含める必要があります。
Timestamp プロパティ
Timestamp
プロパティは、エンティティの最終変更時刻を記録するためにサーバー側に保持される DateTime
値です。 テーブル サービスは、Timestamp
プロパティを内部的に使用してオプティミスティック コンカレンシー制御を提供します。 エンティティの プロパティの Timestamp
値は、エンティティが変更されるたびに進みます。 このプロパティは、挿入操作または更新操作には設定しないでください (値は無視されます)。
プロパティは Timestamp
、受け入れられる ISO 8601 UTC 形式のいずれかで表す必要があります。 受け入れられる UTC 形式の詳細については、「 DateTime 値の書式設定」を参照してください。
プロパティの型
Table サービスでは、 OData プロトコル仕様で定義されたデータ型のサブセットがサポートされています。 テーブル サービスでサポートされているプロパティの型を次の表に示します。
OData データ型 | 共通言語ランタイム型 | 詳細 |
---|---|---|
Edm.Binary |
byte[] |
最大 64 KiB のサイズのバイト配列。 |
Edm.Boolean |
bool |
ブール値です。 |
Edm.DateTime |
DateTime |
世界協定時刻 (UTC) を表す 64 ビット値。 サポートされる DateTime 範囲は、世界協定時刻の西暦 1601 年 1 月 1 日深夜 12:00 に始まり、 この範囲は 9999 年 12 月 31 日に終了します。 詳細については、「 DateTime 値の書式設定」を参照してください。 |
Edm.Double |
double |
64 ビットの浮動小数点値。 |
Edm.Guid |
Guid |
グローバルで一意となる 128 ビットの識別子。 |
Edm.Int32 |
Int32 または int |
32 ビットの整数。 |
Edm.Int64 |
Int64 または long |
64 ビットの整数。 |
Edm.String |
String |
UTF-16 エンコードの値。 文字列値のサイズは最大 64 KiB です。 サポートされる最大文字数は約 32 K 以下であることに注意してください。 |
既定では、プロパティは、別の型を指定しない限り String
型として作成されます。 プロパティを明示的に入力するには、 エンティティの挿入 操作または エンティティの更新 操作に適切な OData データ型を使用して、そのデータ型を指定します。 詳細については、「 エンティティの挿入と更新」を参照してください。
Table サービスでは、プロパティの値は保持 null
されません。 エンティティに対してクエリを実行する場合、上記のプロパティ型はすべて null 非許容です。 エンティティを記述する場合、上記のプロパティ型はすべて null 許容であり、値を null
持つプロパティはすべて、ペイロードにそのプロパティが含まれていないかのように処理されます。
クエリ要求 URI のさまざまなプロパティの種類をフィルター処理する方法を示す例については、「 テーブルとエンティティのクエリ」を参照してください。