Table Store には、PutRow、GetRow、UpdateRow、DeleteRow の単一行操作 API が用意されています。

PutRow

PutRow API は、データ行を挿入するために使用されます。 行が既に存在している場合は上書きされます。

PutRow を実行するときは、条件付き更新機能を使用して、書き込まれる行の存在、または、既存の行の特定の列の値に対する条件を設定できます。 詳しくは、 「条件付き更新」をご参照ください。

例 1

この例では、10 個の属性列を持つ行が書き込まれ、各列に 1 つのバージョンが入力されています。 バージョン番号 (タイムスタンプ) はサーバーによって指定されます。

private static void putRow(SyncClient client, String pkValue) {
    // プライマリキーを構築します。
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();

    RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);

    // 属性列を追加します。
    for (int i = 0; i < 10; i++) {
        rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
    }

    client.putRow(new PutRowRequest(rowPutChange));
}
			

例 2

この例では、10 個の属性列を持つ行が書き込まれ、各列に 3 つのバージョンが入力されています。 バージョン番号 (タイムスタンプ) はクライアントによって指定されます。

private static void putRow(SyncClient client, String pkValue) {
    // プライマリキーを構築します。
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();

    RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);

    // 属性列を追加します。
    long ts = System.currentTimeMillis();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 3; j++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
        }
    }

    client.putRow(new PutRowRequest(rowPutChange));
}
			

例 3

この例では、行が存在しない場合、データが書き込まれます。

private static void putRow(SyncClient client, String pkValue) {
    // プライマリキーを構築します。
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();

    RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);

    // 元の行が存在しないと予想します。
    rowPutChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_NOT_EXIST));

    // 属性列を追加します。
    long ts = System.currentTimeMillis();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 3; j++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
        }
    }

    client.putRow(new PutRowRequest(rowPutChange));
}
			

例 4

この例では、元の行は 存在し、Col0 値が 100 より大きい場合にデータを書き込むと予想します。

private static void putRow(SyncClient client, String pkValue) {
    // プライマリキーを構築します。
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();

    RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);

    // 元の行が存在し、Col0値が100より大きい場合にデータを書き込むと予想します。
    Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
    condition.setColumnCondition(new SingleColumnValueCondition("Col0",
            SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
    rowPutChange.setCondition(condition);

    // 属性列を追加します。
    long ts = System.currentTimeMillis();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 3; j++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
        }
    }

    client.putRow(new PutRowRequest(rowPutChange));
}
			

GetRow

単一行の GetRow AP Iは、単一行のデータの読み取りに使用されます。 以下のパラメーターがあります。

  • PrimaryKey: 読み込む行のプライマリキーです。 これは必須パラメーターです。

  • ColumnsToGet: 読み込む列のセットです。 設定されていない場合は、すべての列が読み取られます。

  • MaxVersions: 読み込むバージョンの最大数です。 MaxVersions パラメーターと TimeRange パラメーターの少なくとも一方を設定する必要があります。

  • TimeRange: 読み取るバージョン番号の範囲です。 MaxVersions パラメーターと TimeRange パラメーターの少なくとも一方を設定する必要があります。

  • Filter: 適用されたフィルター。 サーバーは、読み取り結果を再度フィルター処理するためにフィルターを使用します。

例 1

この例では、最新バージョンの単一行が読み取られ、特定の ColumnsToGet が設定されています。

        private static void getRow(SyncClient client, String pkValue) {
            // プライマリキーを構築します。
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
            PrimaryKey primaryKey = primaryKeyBuilder.build();

            // 1 行読み込みます。
            SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey);
            // 読み込む最新バージョンを設定します。
            criteria.setMaxVersions(1);
            GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
            Row row = getRowResponse.getRow();

            System.out.println("Read complete, result:");
            System.out.println(row);

            // 読み込み列を設定します。
            criteria.addColumnsToGet("Col0");
            getRowResponse = client.getRow(new GetRowRequest(criteria));
            row = getRowResponse.getRow();

            System.out.println("Read complete, result:");
            System.out.println();
        }
			

例 2

この例では、フィルターが設定されています。

        private static void getRow(SyncClient client, String pkValue) {
            // プライマリキーを構築します。
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
            PrimaryKey primaryKey = primaryKeyBuilder.build();

            // 1 行読み込みます。
            SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey);
            // 読み込む最新バージョンを設定します。
            criteria.setMaxVersions(1);

            //フィルターを設定します。 Col0 値が 0 の場合、この行が返されます。
            SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0",
                    SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
            //列 Col0 が存在しない場合、データは返されません。
            singleColumnValueFilter.setPassIfMissing(false);
            criteria.setFilter(singleColumnValueFilter);

            GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
            Row row = getRowResponse.getRow();

            System.out.println("Read complete, result:");
            System.out.println(row);
        }
			

UpdateRow

UpdateRow API は、単一行のデータを更新するために使用されます。 行が存在しない場合は、新しい行が追加されます。

更新操作には、列の書き込み、列の削除および列バージョンの削除操作が含まれます。

UpdateRow を実行するときには、条件付き更新機能を使用して、更新する行の存在または既存の行の特定の列の値に関する条件を設定できます。 詳細については、 「条件付き更新」をご参照ください。

例 1

この例では、複数の列が更新され、指定された列の指定されたバージョンと指定された列が削除されます。

        private static void updateRow(SyncClient client, String pkValue) {
            // プライマリキーを構築します。
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
            PrimaryKey primaryKey = primaryKeyBuilder.build();

            RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);

            // 列を更新します。
            for (int i = 0; i < 10; i++) {
                rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
            }

            // 指定された列の指定されたバージョンを削除します。
            rowUpdateChange.deleteColumn("Col10", 1465373223000L);

            // 指定した列を削除します。
            rowUpdateChange.deleteColumns("Col11");

            client.updateRow(new UpdateRowRequest(rowUpdateChange));
        }

			

例 2

この例では、更新条件が設定されています。

        private static void updateRow(SyncClient client, String pkValue) {
            // プライマリキーを構築します。
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
            PrimaryKey primaryKey = primaryKeyBuilder.build();

            RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);

            // 元の行が存在し、Col0 の値が 100 より大きい場合はデータが更新されることを期待します。
            Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
            condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                    SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
            rowUpdateChange.setCondition(condition);

            // 列を更新します。
            for (int i = 0; i < 10; i++) {
                rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
            }

            // 指定された列の指定されたバージョンを削除します。
            rowUpdateChange.deleteColumn("Col10", 1465373223000L);

            // 指定した列を削除します。
            rowUpdateChange.deleteColumns("Col11");

            client.updateRow(new UpdateRowRequest(rowUpdateChange));
        }
			

DeleteRow

DeleteRow API は、単一行を削除するために使用されます。

DeleteRow を実行するときは、条件付き更新機能を使用して、削除する行の存在、または既存の行の特定の列の値に関する条件を設定できます。 詳しくは、 「条件付き更新」をご参照ください。

例 1

この例では、行が削除されます。

        private static void deleteRow(SyncClient client, String pkValue) {
            // プライマリキーを構築します。
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
            PrimaryKey primaryKey = primaryKeyBuilder.build();

            RowDeleteChange rowDeleteChange = new RowDeleteChange(TABLE_NAME, primaryKey);

            client.deleteRow(new DeleteRowRequest(rowDeleteChange));
        }
			

例 2

この例では、削除条件が設定されています。

        private static void deleteRow(SyncClient client, String pkValue) {
            // プライマリキーを構築します。
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
            PrimaryKey primaryKey = primaryKeyBuilder.build();

            RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);

            // 元の行が存在し、Col0 の値が 100 より大きい場合はデータが削除されることを期待します。
            Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
            condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                    SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
            rowDeleteChange.setCondition(condition);

            client.deleteRow(new DeleteRowRequest(rowDeleteChange));
        }