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

Tablestore:データの書き込み

最終更新日:Dec 28, 2024

Tablestore では、異なる操作を呼び出すことで、単一行のデータの書き込み、単一行のデータの更新、複数行のデータの同時書き込みを行うことができます。データテーブルにデータを書き込むには、完全なプライマリキー情報と、追加、削除、または変更する属性列を指定する必要があります。高並列アプリケーションにデータを書き込むには、行存在条件または列条件を設定して、指定された条件に基づいてデータを更新できます。

前提条件

  • OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。

  • データテーブルが作成され、データがデータテーブルに書き込まれていること。

単一行のデータの書き込み

API 操作

// @param PutRowRequest    PutRow 操作の呼び出しに必要なパラメータをカプセル化します。
// @return PutRowResponse
PutRow(request *PutRowRequest) (*PutRowResponse, error)                    

パラメータ

パラメータ

説明

TableName

データテーブルの名前。

PrimaryKey

行に関するプライマリキー情報。プライマリキー情報には、プライマリキー列の名前、タイプ、値が含まれます。

重要
  • 指定するプライマリキー列の数とタイプは、テーブル内のプライマリキー列の実際の数とタイプと同じである必要があります。

  • プライマリキー列が自動インクリメントプライマリキー列の場合、プライマリキー列の値を指定する必要はありません。プライマリキー列を自動インクリメントプライマリキー列に設定するだけです。詳細については、自動インクリメントプライマリキー列の設定を参照してください。

Columns

行の属性列。属性列は、属性列名、属性列値 (ColumnValue)、属性列タイプ (ColumnType)、タイムスタンプの順にパラメータで指定されます。属性列タイプとタイムスタンプはオプションです。

  • 属性列名は属性列の名前であり、属性列タイプは属性列のデータ型です。詳細については、命名規則とデータ型を参照してください。

    ColumnType パラメータは、INTEGER 値を指定する ColumnType.INTEGER、UTF-8 エンコードされた STRING を指定する ColumnType.STRING、BINARY 値を指定する ColumnType.BINARY、BOOLEAN 値を指定する ColumnType.BOOLEAN、または DOUBLE 値を指定する ColumnType.DOUBLE に設定できます。属性列タイプが BINARY の場合は、ColumnType パラメータを ColumnType.BINARY に設定する必要があります。それ以外の場合は、ColumnType パラメータを空のままにすることができます。

  • タイムスタンプはデータバージョン番号です。システムによって自動的に生成されたデータバージョン番号を使用するか、カスタムデータバージョン番号を指定できます。デフォルトでは、データバージョン番号を指定しない場合、システムによって自動的に生成されたデータバージョン番号が使用されます。詳細については、データバージョンと TTLを参照してください。

    • デフォルトでは、システムは現在の UNIX タイムスタンプをデータバージョン番号として使用します。タイムスタンプは UNIX 時間形式に従います。これは、1970 年 1 月 1 日木曜日 00:00:00 から経過したミリ秒数です。

    • バージョン番号を指定する場合は、バージョン番号がミリ秒単位で正確な 64 ビットのタイムスタンプであり、有効なバージョン範囲内にあることを確認してください。

Condition

PutRow 操作の呼び出しに設定できる条件。行存在条件または列値に基づく条件を設定できます。詳細については、条件付き更新の設定を参照してください。

次のサンプルコードは、単一行のデータを書き込む方法の例を示しています。

putRowRequest := new(tablestore.PutRowRequest)
putRowChange := new(tablestore.PutRowChange)
putRowChange.TableName = tableName
putPk := new(tablestore.PrimaryKey)
putPk.AddPrimaryKeyColumn("pk1", "pk1value1")
putPk.AddPrimaryKeyColumn("pk2", int64(2))
putPk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
putRowChange.PrimaryKey = putPk
putRowChange.AddColumn("col1", "col1data1")
putRowChange.AddColumn("col2", int64(3))
putRowChange.AddColumn("col3", []byte("test"))
putRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
putRowRequest.PutRowChange = putRowChange
_, err := client.PutRow(putRowRequest)

if err != nil {
    fmt.Println("putrow failed with error:", err)
} else {
    fmt.Println("putrow finished")
 }                    

詳細なサンプルコードを表示するには、PutRow@GitHub にアクセスしてください。

単一行のデータの更新

API 操作

// テーブル内のデータ行を更新します。
// @param UpdateRowRequest      UpdateRow 操作の呼び出しに必要なパラメータをカプセル化します。
// @return UpdateRowResponse    UpdateRow 操作へのレスポンスの内容。
UpdateRow(request *UpdateRowRequest) (*UpdateRowResponse, error)                    

パラメータ

パラメータ

説明

TableName

データテーブルの名前。

PrimaryKey

行に関するプライマリキー情報。プライマリキー情報には、プライマリキー列の名前、タイプ、値が含まれます。

重要

指定するプライマリキー列の数とタイプは、テーブル内のプライマリキー列の実際の数とタイプと同じである必要があります。

Columns

行の属性列。

    Condition

    UpdateRow 操作の呼び出しに設定できる条件。行存在条件または列値に基づく条件を設定できます。詳細については、条件付き更新の設定を参照してください。

    次のサンプルコードは、単一行のデータを更新する方法の例を示しています。

    updateRowRequest := new(tablestore.UpdateRowRequest)
    updateRowChange := new(tablestore.UpdateRowChange)
    updateRowChange.TableName = tableName
    updatePk := new(tablestore.PrimaryKey)
    updatePk.AddPrimaryKeyColumn("pk1", "pk1value1")
    updatePk.AddPrimaryKeyColumn("pk2", int64(2))
    updatePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
    updateRowChange.PrimaryKey = updatePk
    updateRowChange.DeleteColumn("col1")
    updateRowChange.PutColumn("col2", int64(77))
    updateRowChange.PutColumn("col4", "newcol3")
    updateRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
    updateRowRequest.UpdateRowChange = updateRowChange
    _, err := client.UpdateRow(updateRowRequest)
    
    if err != nil {
        fmt.Println("update failed with error:", err)
    } else {
        fmt.Println("update row finished")
    }                    

    詳細なサンプルコードを表示するには、UpdateRow@GitHub にアクセスしてください。

    複数行のデータの同時書き込み

    使用上の注意

    • BatchWriteRow 操作を呼び出して複数行のデータを同時に書き込む場合、一部の行の書き込みに失敗することがあります。この場合、Tablestore は例外を返しません。Tablestore は、失敗した行のインデックスとエラーメッセージを含む BatchWriteRowResponse を返します。そのため、BatchWriteRow 操作を呼び出すときは、戻り値をチェックしてすべての行が書き込まれたかどうかを確認してください。戻り値をチェックしないと、書き込みに失敗した行が無視される可能性があります。

    • BatchWriteRow 操作を呼び出して、最大 200 行の最大 4 MB のデータを同時に書き込むことができます。

    API 操作

    // 複数のテーブル内の複数行のデータを追加、削除、または更新します。
    // @param BatchWriteRowRequest             BatchWriteRow 操作の呼び出しに必要なパラメータをカプセル化します。
    // @return  BatchWriteRowResponse          BatchWriteRow 操作へのレスポンスの内容。
    BatchWriteRow(request *BatchWriteRowRequest) (*BatchWriteRowResponse,error)                  

    次のサンプルコードは、100 行のデータを同時に書き込む方法の例を示しています。

    batchWriteReq := &tablestore.BatchWriteRowRequest{}
    for i := 0; i < 100; i++ {
        putRowChange := new(tablestore.PutRowChange)
        putRowChange.TableName = tableName
        putPk := new(tablestore.PrimaryKey)
        putPk.AddPrimaryKeyColumn("pk1", "pk1value1")
        putPk.AddPrimaryKeyColumn("pk2", int64(i))
        putPk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
        putRowChange.PrimaryKey = putPk
        putRowChange.AddColumn("col1", "fixvalue")
        putRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
        batchWriteReq.AddRowChange(putRowChange)
    }
    
    response, err := client.BatchWriteRow(batchWriteReq)
    if err != nil {
        fmt.Println("batch request failed with:", response)
    } else {
        fmt.Println("batch write row finished")
    }                   

    詳細なサンプルコードを表示するには、BatchWriteRow@GitHub にアクセスしてください。

    FAQ

    関連情報

    • 指定された条件に基づいて高並列アプリケーションのデータを更新するには、条件付き更新機能を使用できます。詳細については、条件付き更新の設定を参照してください。

    • さまざまなトピックのページビュー (PV) 数など、オンラインアプリケーションに関するリアルタイム統計を収集するには、アトミックカウンター機能を使用できます。詳細については、アトミックカウンターの設定を参照してください。

    • 1 つ以上のデータ行を書き込むためのアトミック操作を実行するには、ローカルトランザクション機能を使用できます。詳細については、ローカルトランザクションの設定を参照してください。

    • データがテーブルに書き込まれた後、ビジネス要件に基づいてテーブル内のデータを読み取ったり削除したりできます。詳細については、データの読み取りデータの削除を参照してください。