すべてのプロダクト
Search
ドキュメントセンター

Tablestore:データの書き込み

最終更新日:Dec 28, 2024

Tablestore は、単一行のデータを書き込むための PutRow 操作、単一行のデータを更新するための UpdateRow 操作、および複数行のデータを同時に書き込むための BatchWriteRow 操作を提供します。

説明

行はテーブルの基本単位です。行はプライマリキー列と属性列で構成されます。各行にはプライマリキーが必要です。各行のプライマリキー列の名前と型は同じです。属性列はオプションであり、行ごとに異なる場合があります。詳細については、概要 を参照してください。

単一行のデータの挿入

PutRow 操作を呼び出して、単一行のデータを挿入できます。システムは、既存の行のすべての列にあるすべてのバージョンのデータを削除し、新しいデータ行を書き込みます。この操作は、少量のデータを書き込む場合に適しています。

単一行のデータを書き込む前に、ビジネス要件に基づいて次の設定を構成できます。

  • デフォルトでは、システムは現在の UNIX タイムスタンプをデータバージョン番号として使用します。UNIX タイムスタンプは、January 1, 1970, 00:00:00 UTC から経過したミリ秒数を表します。カスタムデータバージョン番号を指定することもできます。詳細については、データバージョンと TTL を参照してください。

  • 条件付き更新のために、行の存在条件または列の値に基づく条件を指定します。詳細については、条件付き更新 を参照してください。

応答は、操作が成功したかどうかによって異なります。

  • 操作が成功した場合、Tablestore は、操作で消費されたキャパシティユニット (CU) の数を返します。

  • エラーが発生した場合、Tablestore はエラーコードを返します。たとえば、パラメータがチェックに失敗した場合、行に過剰なデータが存在する場合、または行の存在チェックに失敗した場合に、エラーコードが返されます。

    説明

    エラーコードの詳細については、エラーコード を参照してください。

単一行のデータの更新

UpdateRow 操作を呼び出して、行のデータを更新できます。行に属性列を追加したり、行から属性列を削除したり、属性列から特定のバージョンのデータを削除したり、属性列の値を更新したりできます。行が存在しない場合は、新しい行が追加されます。この操作は、既存のデータを更新する場合に適しています。たとえば、属性列を削除したり、特定のバージョンのデータを削除したり、属性列の値を更新したりする場合です。

説明

単一行のデータを更新する前に、ビジネス要件に基づいて次の設定を構成できます。

  • リクエストで、行に属性列を追加したり、行から属性列を削除したり、属性列から特定のバージョンのデータを削除したり、属性列の値を更新したりできます。

  • デフォルトでは、システムは現在の UNIX タイムスタンプをデータバージョン番号として使用します。UNIX タイムスタンプは、January 1, 1970, 00:00:00 UTC から経過したミリ秒数を表します。カスタムデータバージョン番号を指定することもできます。詳細については、データバージョンと TTL を参照してください。

  • 条件付き更新のために、行の存在条件または列の値に基づく条件を指定します。詳細については、条件付き更新 を参照してください。

複数行のデータを同時に書き込む

BatchWriteRow 操作を呼び出して、1 つ以上のテーブルに複数行のデータを同時に書き込むことができます。この操作は、大量のデータを書き込んだり、削除したり、更新したりする場合や、同時にデータを書き込んだり、削除したり、更新したりする場合に適しています。

複数行のデータを同時に書き込む前に、ビジネス要件に基づいて次の設定を構成できます。

  • リクエストで、複数のテーブルに同時にデータを書き込んだり、データを更新したり、データを削除したりできます。

    • リクエスト内の各 PutRow、UpdateRow、または DeleteRow 操作に対して、更新条件を個別に構成できます。

    • デフォルトでは、システムは現在の UNIX タイムスタンプをデータバージョン番号として使用します。UNIX タイムスタンプは、January 1, 1970, 00:00:00 UTC から経過したミリ秒数を表します。カスタムデータバージョン番号を指定することもできます。詳細については、データバージョンと TTL を参照してください。

    • 条件付き更新のために、行の存在条件または列の値に基づく条件を指定します。詳細については、条件付き更新 を参照してください。

    方法

    Tablestore コンソールの使用

    Tablestore コンソールで単一行のデータを書き込んだり更新したりできます。

    1. Tablestore コンソール にログオンします。

    2. 概要ページで、管理するインスタンスを見つけ、インスタンスの管理列のアクションをクリックします。

    3. インスタンスの詳細タブの テーブルタブで、管理するテーブルの名前をクリックします。

    4. [テーブルの管理] ページの データのクエリタブで、ビジネス要件に基づいてデータを挿入または更新します。

      単一行のデータの挿入

      1. 挿入をクリックします。

      2. 挿入ダイアログボックスで、[プライマリキー値] 列に値を入力します。

      3. image アイコンをクリックし、[名前]、[タイプ]、[値]、および [バージョン] パラメータを構成します。

        複数の属性列を追加する場合は、属性列を追加するたびに image アイコンをクリックして、対応するパラメータを構成します。

      4. OK をクリックします。

      単一行のデータの更新

      1. 更新する行を選択し、更新をクリックします。

      2. 更新ダイアログボックスで、ビジネス要件に基づいて属性列情報を変更します。

        属性列を追加するには、image アイコンをクリックして、対応するパラメータを構成します。属性列を削除するには、アクションドロップダウンリストから すべて削除を選択します。特定のバージョンのデータを削除するには、アクションドロップダウンリストから 削除を選択し、削除するデータのバージョン番号を選択します。属性列の値を更新するには、アクションドロップダウンリストから 更新を選択し、値を変更します。

      3. OK をクリックします。

    Tablestore CLI の使用

    Tablestore CLI で次のコマンドを実行して、データを書き込むことができます。

    • put コマンドを実行して、単一行のデータを書き込みます。詳細については、データの挿入 を参照してください。

      次のサンプルコードは、テーブルに行のデータを挿入する方法の例を示しています。行の最初のプライマリキー列の値は 86 で、2 番目のプライマリキー列の値は 6771 です。行には、STRING 型の name 列と STRING 型の country 列の 2 つの属性列があります。

      put --pk '["86", 6771]' --attr '[{"c":"name", "v":"redchen"}, {"c":"country", "v":"china"}]'
    • update コマンドを実行して、行のデータを更新します。詳細については、データの更新 を参照してください。

      次のサンプルコードは、最初のプライマリキー列の値が 86 で、2 番目のプライマリキー列の値が 6771 である行のデータを更新する方法の例を示しています。行が存在するかどうかに関係なく、データが挿入されます。行が存在する場合は、挿入されたデータによって既存のデータが上書きされます。

      update --pk '["86", 6771]' --attr '[{"c":"name", "v":"redchen"}, {"c":"country", "v":"china"}]' --condition ignore

    Tablestore SDK の使用

    Tablestore SDK for JavaTablestore SDK for GoTablestore SDK for PythonTablestore SDK for Node.jsTablestore SDK for .NET、または Tablestore SDK for PHP を使用してデータを書き込むことができます。この例では、Tablestore SDK for Java を使用します。

    単一行のデータの挿入

    データを挿入するときに、カスタムデータバージョン番号を指定できます。また、列の値と行の存在条件に基づく条件を指定することもできます。

    • 行のデータを挿入するときに、システムによって自動的に生成されるデータバージョン番号を使用する

    • 行のデータを挿入するときに、カスタムデータバージョン番号を指定する

    • 行のデータを挿入するときに、行の存在条件を指定する

    • 行のデータを挿入するときに、行の存在条件または列の値に基づく条件を指定する

    単一行のデータの更新

    単一行のデータを更新するときに、カスタムデータバージョン番号を指定できます。また、列の値と行の存在条件に基づく条件を指定することもできます。

    • 条件を指定せずにデータ行を更新する

    • データを更新するときに、行の存在条件または列の値に基づく条件を指定する

    複数行のデータを同時に書き込む

    課金ルール

    操作で消費された CU の数に基づいて課金されます。従量課金読み書き CU と予約読み書き CU は個別に課金されます。アクセスするインスタンスタイプによって、従量課金読み書き CU または予約読み書き CU のどちらが消費されるかが決まります。

    説明

    インスタンスタイプと CU の詳細については、インスタンス読み書きスループットを参照してください。

    操作

    CU 消費量

    PutRow

    • 消費される書き込み CU の数は、次の式の計算結果から切り上げられます。消費される書き込み CU の数 = (行のすべてのプライマリキー列のデータサイズ + 挿入された属性列のデータサイズ) / 4 KB。

    • 消費される読み取り CU の数は、指定する条件によって異なります。PutRow 操作のリクエストで condition パラメータを指定して、PutRow 操作を実行する前に行の存在チェックを実行するかどうかを決定できます。

      • condition パラメータの値が IGNORE でない場合、PutRow 操作は読み取り CU を消費します。消費される読み取り CU の数は、次の式の計算結果から切り上げられます。消費される読み取り CU の数 = 行のすべてのプライマリキー列のデータサイズ / 4 KB。

      • 指定された行の存在条件が満たされない場合、操作は失敗し、1 つの書き込み CU と 1 つの読み取り CU が消費されます。

    UpdateRow

    • 消費される書き込み CU の数は、次の式の計算結果から切り上げられます。消費される書き込み CU の数 = (行のすべてのプライマリキー列のデータサイズ + 更新された属性列のデータサイズ) / 4 KB。

    • UpdateRow 操作のリクエストに属性列を削除する指示が含まれている場合、削除する各属性列の名前の長さが列サイズとして使用されます。

    • 消費される読み取り CU の数は、指定する条件によって異なります。UpdateRow 操作のリクエストで condition パラメータを指定して、UpdateRow 操作を実行する前に行の存在チェックを実行するかどうかを決定できます。

      • condition パラメータの値が IGNORE でない場合、UpdateRow 操作は読み取り CU を消費します。消費される読み取り CU の数は、次の式の計算結果から切り上げられます。消費される読み取り CU の数 = 行のすべてのプライマリキー列のデータサイズ / 4 KB。

      • 指定された行の存在条件が満たされない場合、操作は失敗し、1 つの書き込み CU と 1 つの読み取り CU が消費されます。

    BatchWriteRow

    消費される読み取りおよび書き込み CU の数は、BatchWriteRow 操作のリクエストに含まれる PutRow、UpdateRow、および DeleteRow 操作に基づいて個別に計算されます。

    DeleteRow 操作で消費される読み取りおよび書き込み CU の数は、次のルールに基づいて計算されます。

    • 消費される書き込み CU の数は、次の式の計算結果から切り上げられます。消費される書き込み CU の数 = 削除された行のすべてのプライマリキー列のデータサイズ / 4 KB。

    • condition パラメータの値が IGNORE でない場合、DeleteRow 操作は読み取り CU を消費します。消費される読み取り CU の数は、次の式の計算結果から切り上げられます。消費される読み取り CU の数 = 行のすべてのプライマリキー列のデータサイズ / 4 KB。

    • 指定された行の存在条件が満たされない場合、操作は失敗し、1 つの書き込み CU が消費されます。

    ```java // PutRow の例。 // プライマリキーを指定します。 PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("pk0", PrimaryKeyValue.fromString("pk0_value")); primaryKeyBuilder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromLong(123)); PrimaryKey primaryKey = primaryKeyBuilder.build(); RowPutChange rowPutChange = new RowPutChange(tableName, primaryKey); // 属性列を指定します。 rowPutChange.addColumn("col0", ColumnValue.fromString("value0")); rowPutChange.addColumn("col1", ColumnValue.fromLong(2)); rowPutChange.addColumn("col2", ColumnValue.fromDouble(2.1)); rowPutChange.addColumn("col3", ColumnValue.fromBoolean(true)); rowPutChange.addColumn("col4", ColumnValue.fromBinary(new byte[] { 0, 1, 2 })); // リクエストを送信します。 PutRowResponse response = client.putRow(new PutRowRequest(rowPutChange)); // 消費された CU を取得します。 CapacityUnit capacityUnit = response.getConsumedCapacityUnit(); ```