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());
}