C++ SDK は、プライマリキー列の自動インクリメントをサポートしています。 プライマリキー列を自動インクリメント列に設定した場合、1 行のデータを書き込むときは、Table Store が自動的にこの値を生成するため、この列の値を空のままにします。 この生成された値はパーティションキー上で一意であり、厳密な増分順序に従います。 詳細については、「プライマリキー列の自動インクリメント」をご参照ください。
テーブルを作成する
重要 自動インクリメントプライマリキーは、整数型である必要があり、
PrimaryKeyColumnSchema::AutoIncrement
を設定する必要があります。
CreateTableRequest req;
{
// テーブルの不変の設定
TableMeta& meta = req.mutableMeta();
meta.mutableTableName() = kTableName;
Schema& schema = meta.mutableSchema();
{
PrimaryKeyColumnSchema& pkColSchema = schema.append();
pkColSchema.mutableName() = "ShardKey";
pkColSchema.mutableType() = kPKT_String;
}
{
PrimaryKeyColumnSchema& pkColSchema = schema.append();
pkColSchema.mutableName() = "AutoIncrKey";
pkColSchema.mutableType() = kPKT_Integer;
pkColSchema.mutableOption().reset(PrimaryKeyColumnSchema::AutoIncrement);
}
}
CreateTableResponse resp;
Optional<OTSError> res = client.createTable(resp, req);
データを書き込む
自動インクリメントのプライマリキー列の値は、Table Store サービスによって入力されます。 したがって、書き込み時にプライマリキー列に特別なプレースホルダを入力する必要があります。
PrimaryKeyValue :: toAutoIncrement()
は、このプレースホルダオブジェクトを取得することができます。 この行のデータを読み取るために、戻り値がプライマリキーを含むように設定することができます。 Table Store サービスは、プライマリキー内の自動インクリメントプライマリキー列のプレースホルダを実際の列値で置き換えてから返します。
このプライマリキーを後で使用するために記録できます。
この例は、単一行の上書きに基づいています。 他のインターフェイスでの記述も類似しています。
PutRowRequest req;
{
RowPutChange& chg = req.mutableRowChange();
chg.mutableTable() = kTableName;
chg.mutableReturnType() = RowChange::kRT_PrimaryKey;
PrimaryKey& pkey = chg.mutablePrimaryKey();
pkey.append() = PrimaryKeyColumn(
"ShardKey",
PrimaryKeyValue::toStr("shard0"));
pkey.append() = PrimaryKeyColumn(
"AutoIncrKey",
PrimaryKeyValue::toAutoIncrement());
}