このトピックでは、.NET SDK を使用してデータテーブルの自動採番主キー列を設定する方法、および列にデータを書き込み、生成された値を取得する方法について説明します。
使用上の注意
自動インクリメント列に対して生成される自動インクリメント値は、パーティションキーレベルで一意であり、厳密に増分します。ただし、連続していることは保証されません。
前提条件
自動採番主キー列を設定する
データテーブルを作成するときに、非パーティションプライマリキー列を自動インクリメント列として設定できます。既存のデータテーブルの場合、自動インクリメント列は設定できません。
説明
整数型の非パーティションプライマリキー列のみを自動インクリメント列として設定できます。データテーブルには、最大で 1 つの自動インクリメント列を設定できます。自動インクリメント列に対して生成される値は、64 ビットの符号付き long 整数です。
サンプルコード
次のサンプルコードは、test_table という名前のデータテーブルを作成します。テーブルのプライマリキーには、パーティションキー id と自動インクリメント列 incr が含まれます。
public static void CreateSample(OTSClient client)
{
try
{
PrimaryKeySchema primaryKeySchema = new PrimaryKeySchema
{
{ "id", ColumnValueType.String },
{ "incr", ColumnValueType.Integer, PrimaryKeyOption.AUTO_INCREMENT}
};
TableMeta tableMeta = new TableMeta("test_table", primaryKeySchema);
CapacityUnit reservedThroughput = new CapacityUnit(0, 0);
CreateTableRequest request = new CreateTableRequest(tableMeta, reservedThroughput);
client.CreateTable(request);
Console.WriteLine("テーブルの作成に成功しました。");
}
catch (Exception ex)
{
Console.WriteLine($"テーブルの作成に失敗しました、例外:{ex.Message}");
}
}データを書き込む
自動インクリメント列にデータを書き込むときは、列の値をプレースホルダーに設定します。クエリと更新で生成された自動インクリメント値を取得するには、RowPutChange の戻り値の型を ReturnType.RT_PK に設定します。
サンプルコード
次のサンプルコードは、test_table テーブルに 1 行のデータを書き込み、書き込まれた行データのプライマリキー情報を取得して出力します。
public static void PutRowSample(OTSClient client)
{
try
{
// プライマリキーを構築します
PrimaryKey primaryKey = new PrimaryKey
{
{ "id", new ColumnValue("row1") },
{ "incr", ColumnValue.AUTO_INCREMENT }
};
// 書き込む行データを構築します
AttributeColumns attribute = new AttributeColumns
{
{ "col1", new ColumnValue("val1") }
};
PutRowRequest request = new PutRowRequest("test_table", new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);
// 戻り値の型を ReturnType.RT_PK に設定して、書き込まれた行データのプライマリキー情報を返します
request.RowPutChange.ReturnType = ReturnType.RT_PK;
// PutRow メソッドを呼び出して行データを書き込みます
PutRowResponse response = client.PutRow(request);
// RequestId と消費 CU
Console.WriteLine("リクエスト ID: " + response.RequestID);
Console.WriteLine("読み取り CU コスト: " + response.ConsumedCapacityUnit.Read);
Console.WriteLine("書き込み CU コスト: " + response.ConsumedCapacityUnit.Write);
// 返されたプライマリキー情報を取得して出力します。戻り値の型が ReturnType.RT_PK に設定されていない場合、プライマリキー情報はデフォルトでは返されません
Console.WriteLine(response.Row.PrimaryKey.ToString());
}
catch (Exception ex)
{
Console.WriteLine($"行の書き込みに失敗しました、例外:{ex.Message}");
}
}