OceanBase
English日本語简体中文
ドキュメントホーム
製品
エコシステム
リリース

データベース

OceanBase CloudOceanBaseデータベース

データベース

OceanBase CloudOceanBaseデータベース
OceanBase CloudOceanBaseデータベース

OceanBaseデータベース

KV - V4.4.2
  • OBKVの概要
  • OBKVのアーキテクチャ
  • OBKV-Table
    • OBKV-Table概要
      • OBKV-Tableの概要
      • OBKV-Tableのコア機能
      • OBKV-Tableデプロイの概要
    • シンプルなKey-Valueストレージのクイックスタート(Java)
    • OBKV-Table Javaクライアントを使ったアプリケーション開発
      • OBKV-Table Java開発ガイド
      • OBKV-Table開発の準備
      • OBKV-Table Javaクライアントを使用してクラスタに接続する
      • OBKV-Table操作例
        • OBKV-Tableへのデータ書き込み
        • OBKV-Tableによるデータのクエリ
        • OBKV-Tableでのデータ更新
        • OBKV-Tableによるデータの削除
      • OBKV-Table Javaクライアントのパラメータ設定
    • OBKV-Table管理
      • OBKV-Table管理の概要
      • OBKV-Tableの高可用性
      • OBKV-Tableのセキュリティ権限
      • OBKV-Tableモニタリングメトリクス
    • OBKV-Tableリファレンス
      • OBKV-Tableのデータモデル
      • OBKV-Tableの操作タイプ
      • OBKV-Tableがサポートするデータ型
      • OBKV-Table全文インデックス
      • OBKV-Tableのグローバルインデックスの使用範囲と例
      • OBKV-Tableの期限切れデータ削除
      • OBKV-Tableのグループコミット
      • OBKV-Tableの弱い整合性読み取りと最寄りデータセンターからの読み取り
      • OBKV-Table関連ビュー
    • OBKV-Table よくある質問
  • OBKV-HBase
    • OBKV-HBaseの概要
    • OBKV-HBaseのコア機能
    • OBKV-HBaseのデプロイ
    • OBKV-HBaseによるアプリケーション開発
      • OBKV-HBase アプリケーション開発の概要
      • OBKV-HBase Javaクライアントを使用したクラスタへの接続
      • HBaseの業務コードをOBKV-HBaseに移行する
      • OBKV-HBase データ操作の例
    • OBKV-HBase 移行ガイド
    • OBKV-HBase管理
      • OBKV-HBase管理の概要
      • OBKV-HBaseの高可用性
      • OBKV-HBaseのセキュリティ権限
      • OBKV-HBaseモニタリングメトリクス
    • OBKV-HBaseクエリの最適化
    • OBKV-HBaseの性能テスト
    • OBKV-HBaseリファレンス
      • OBKV-HBaseデータモデル
      • OBKV-HBaseのデータスキーマ
      • HBaseとの互換インターフェース
      • HBaseと互換性のあるフィルター
      • OBKV-HBaseの自動パーティション分割
      • OBKV-HBaseにおける期限切れデータの削除
      • OBKV-HBaseの弱い整合性読み取りと最寄りデータセンターからの読み取り
      • OBKV-HBase関連ビュー
    • OBKV-HBaseエコシステム統合
      • Flink連携
        • Flinkコネクタを使用してOBKV-HBaseにデータを同期する
        • ネイティブFlinkによるOBKV-HBaseへのアクセス
      • HiveによるOBKV-HBaseへのアクセス
      • SparkによるOBKV-HBaseへのアクセス
  • OBKVリリースノート
    • OBKV Enterprise版

PDF をダウンロード

ドキュメントフィードバック
  1. ドキュメントセンター
  2. OceanBaseデータベース
  3. KV
  4. V4.4.2

OBKV-Tableへのデータ書き込み

最終更新:2026-09-30 06:35:08

書き込み可能なインターフェース
書き込みの例
前提条件
単一行の書き込み
バッチ書き込み

このドキュメントでは、OBKV-Tableの書き込み機能について説明します。OBKV-Table Javaクライアントは、インデックス組織テーブルおよびヒープ組織テーブルの単一行データ書き込みと一括データ書き込みをサポートしています。業務ニーズに応じて対応するインターフェースを選択し、データを書き込むことができます。

書き込み可能なインターフェース

ObTableClientが書き込みをサポートするインターフェースは以下のとおりです。

インターフェース
説明
注意事項
insert(String tableName) 1行のデータを書き込む 主キーが競合する場合、書き込みに失敗します
insertOrUpdate(String tableName) 1行のデータを書き込むか更新する
replace(String tableName) 1行のデータを置き換える 古い行が存在しない場合、新しい行を書き込みます
put(String tableName) 1行のデータを上書きする
  • すべての列を書き込む必要があります。
  • テーブルにインデックスがないことが条件です。
  • テーブルにLOB型の列がないことが条件です。
  • テナントのbinlog_row_image値はminimalである必要があります。
  • ヒープ組織テーブルはサポートされていません。

書き込みの例

前提条件

書き込み前に、以下の準備が必要です:

  • ObTableClientの初期化が完了していること。
  • データベース内にインデックス組織テーブルまたはヒープ組織テーブルが作成されていること。例:
    -- インデックス組織テーブル
    CREATE TABLE IF NOT EXISTS `employees` (
    `employeeId` int NOT NULL,
    `name` varchar(100) NOT NULL,
    `department` varchar(50),
    `position` varchar(50),
    `workYear` int,
    `comment` varchar(100),
    PRIMARY KEY (`employeeId`)
    ) PARTITION BY KEY(`employeeId`) PARTITIONS 97;
    
    -- ヒープ組織テーブル
    CREATE TABLE test (
        c1 bigint,
        c2 varchar(20),
        c3 bigint,
        UNIQUE INDEX idx_unique_c1 (c1) -- 一意インデックスを作成するとクエリが高速化されます
      ) ORGANIZATION = HEAP PARTITION BY KEY(c1) PARTITIONS 97; -- ORGANIZATIONパラメータでヒープテーブルを指定
    

その他の説明は以下の通りです:

  • JSON型がサポートされています。詳細な説明と書き込み例については、OBKV-Table データ型を参照してください。

単一行の書き込み

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

insert

インデックス組織テーブル
ヒープ組織テーブル

サンプルコードでは、一行のデータを書き込んでいます。主キー employeeId は 1001 で、4つの属性列が書き込まれています。

private static void insertRow(ObTableClient obkvHandle) throws Exception {
    Row rowKey = row().add(colVal("employeeId", 1001));
    Row properties = row().add(colVal("name", "zhangsan"))
        .add(colVal("department", "R&D"))
        .add(colVal("position", "dev"))
        .add(colVal("workYear", 10));
    obkvHandle.insert("employees")
        .setRowKey(rowKey)
        .addMutateRow(properties)
        .execute();
}

この例では、insert インターフェースを使用してヒープテーブルに単一行を挿入する方法を示します。ヒープテーブルへの書き込み操作では、データが正しくルーティングされるよう、setPartitionKey インターフェースでパーティションキーの値を設定する必要がある点に注意してください。

@Test
public void testSingleInsert() throws Exception {
    try {
        // データの挿入
        // パーティションキー c1 の値は setPartitionKey を使用して設定する必要があります。
        // c1 の値は addMutateColVal を使用して設定する必要もあります。
        MutationResult result = client.insert("test")
            .setPartitionKey(row(colVal("c1", 1000L)))
            .addMutateColVal(colVal("c1", 1000L), colVal("c2", "test1"), colVal("c3", 3000L))
            .execute();

        assertEquals("Insert should affect 1 row", 1, result.getAffectedRows());
        System.out.println("Single insert successful: " + result + " row affected");
    } finally {
        // データのクリア
        truncateTable();
    }
}

insertOrUpdate

インデックス組織テーブル
ヒープ組織テーブル

サンプルコードは、ObTableClientを使用して行データを書き込んだり更新したりする方法を示しています。主キーemployeeIdが1001の行に、4つの属性列を書き込みます。

private static void insertOrUpdateRow(ObTableClient obkvHandle) throws Exception {
    Row rowKey = row().add(colVal("employeeId", 1001));
    Row properties = row().add(colVal("name", "zhangsan"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 10));
    obkvHandle.insertOrUpdate("employees")
            .setRowKey(rowKey)
            .addMutateRow(properties)
            .execute();
}

この例では、insertOrUpdate インターフェースを使用してヒープテーブルに対する単一行の挿入または更新を行う方法を示します。ヒープテーブルへの書き込み操作では、データが正しくルーティングされるように、setPartitionKey インターフェースでパーティションキーの値を設定する必要がある点に注意してください。

@Test
public void testSingleInsertOrUpdate1() throws Exception {
    try {
        // データの挿入
        // パーティションキー c1 の値を setPartitionKey で設定する必要があります。
        // また、c1 の値は addMutateColVal で設定する必要があります。
        MutationResult result = client.insertOrUpdate(tableName)
            .setPartitionKey(row(colVal("c1", 1000L)))
            .addMutateColVal(colVal("c1", 1000L), colVal("c2", "test1"), colVal("c3", 3000L))
            .execute();

        assertEquals("Insert should affect 1 row", 1, result.getAffectedRows());
        System.out.println("Single insertOrUpdate successful: " + result + " row affected");
    } finally {
        // データのクリア
        truncateTable();
    }
}

replace

インデックス組織テーブル
ヒープ組織テーブル

サンプルコードは、ObTableClientを使用して1行のデータを置き換える方法を示しています。主キーemployeeIdが1001で、4つの属性列が書き込まれています。

private static void replaceRow(ObTableClient obkvHandle) throws Exception {
    Row rowKey = row().add(colVal("employeeId", 1001));
    Row properties = row().add(colVal("name", "zhangsan"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 10));
    obkvHandle.replace("employees")
            .setRowKey(rowKey)
            .addMutateRow(properties)
            .execute();
}

この例では、replace インターフェースを使用してヒープテーブルの単一行を置き換える方法を示します。ヒープテーブルの置き換え操作では、データが正しくルーティングされるように、setPartitionKey インターフェースでパーティションキーの値を設定する必要がある点に注意してください。

@Test
public void testSingleReplace1() throws Exception {
    try {
        // データの挿入
        // パーティションキー c1 の値は setPartitionKey で設定する必要があります。
        // c1 の値は addMutateColVal でも設定する必要があります。
        MutationResult result = client.replace(tableName)
            .setPartitionKey(row(colVal("c1", 1000L)))
            .addMutateColVal(colVal("c1", 1000L), colVal("c2", "test1"), colVal("c3", 3000L))
            .execute();

        assertEquals("Insert should affect 1 row", 1, result.getAffectedRows());
        System.out.println("Single replace successful: " + result + " row affected");
    } finally {
        // データのクリア
        truncateTable();
    }
}

put

注意

このインターフェースはヒープ組織テーブルをサポートしていません。

サンプルコードは、ObTableClientを使用してインデックス組織テーブルに1行のデータを上書きする方法を示しています。主キーemployeeIdが1001で、4つの属性列が書き込まれています。

private static void putRow(ObTableClient obkvHandle) throws Exception {
    Row rowKey = row().add(colVal("employeeId", 1001));
    Row properties = row().add(colVal("name", "zhangsan"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 1))
            .add(colVal("comment", "new employee"));
    obkvHandle.put("employees")
            .setRowKey(rowKey)
            .addMutateRow(properties)
            .execute();
}

バッチ書き込み

以下のサンプルコードは、ObTableClientを使用してデータをバッチで書き込む方法を示しています。

batchInsert

インデックス組織テーブル
ヒープ組織テーブル

サンプルコードでは、1バッチに2行のデータを書き込みます。主キー employeeId はそれぞれ 1001 と 1002 で、各行には4つの属性列が書き込まれます。

private static void batchInsertRow(ObTableClient obkvHandle) throws Exception {
    Row rowKey1 = row().add(colVal("employeeId", 1001));
    Row rowKey2 = row().add(colVal("employeeId", 1002));
    Row properties1 = row().add(colVal("name", "zhangsan"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 10));
    Row properties2 = row().add(colVal("name", "lisi"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 5));
    Insert insertOp1 = insert().setRowKey(rowKey1).addMutateRow(properties1);
    Insert insertOp2 = insert().setRowKey(rowKey2).addMutateRow(properties2);
    BatchOperationResult res = obkvHandle.batchOperation("employees")
            .addOperation(insertOp1,insertOp2)
            .execute();
    System.out.println(res.hasError());
}

この例では、batchInsert インターフェースを使用してヒープテーブルにバッチ書き込みを行う方法を示します。ヒープテーブルへの書き込み操作では、データが正しくルーティングされるよう、setPartitionKey インターフェースを使用してパーティションキーの値を設定する必要があります。

@Test
public void testBatchInsert() throws Exception {
    try {
        // BatchOperationを使用したバッチ挿入
        BatchOperation batch = client.batchOperation("test");

        // 複数の挿入操作を追加
        // パーティションキー c1 の値は setPartitionKey を使用して設定する必要があることに注意してください。
        // c1 の値は addMutateColVal を使用しても設定する必要があります。
        for (int i = 1; i <= 3; i++) {
            Insert insert = new Insert();
            insert.setPartitionKey(row(colVal("c1", (long)(1000 + i))))
                .addMutateColVal(colVal("c1", (long)(1000 + i)), colVal("c2", "batch_test" + i), colVal("c3", (long)(3000 + i)));
            batch.addOperation(insert);
        }

        batch.execute();
        System.out.println("Batch insert successful: 3 operations executed");
    } finally {
        // データのクリア
        truncateTable();
    }
}

batchInsertOrUpdate

インデックス組織テーブル
ヒープ組織テーブル

サンプルコードでは、1バッチに2行のデータを書き込んでいます。主キーemployeeIdはそれぞれ1001と1002で、各行には4つの属性列が書き込まれています。

private static void batchInsertOrUpdateRow(ObTableClient obkvHandle) throws Exception {
    Row rowKey1 = row().add(colVal("employeeId", 1001));
    Row rowKey2 = row().add(colVal("employeeId", 1002));
    Row properties1 = row().add(colVal("name", "zhangsan"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 10));
    Row properties2 = row().add(colVal("name", "lisi"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 5));
    InsertOrUpdate insertUpOp1 = insertOrUpdate().setRowKey(rowKey1).addMutateRow(properties1);
    InsertOrUpdate insertUpOp2 = insertOrUpdate().setRowKey(rowKey2).addMutateRow(properties2);
    BatchOperationResult res = obkvHandle.batchOperation("employees")
            .addOperation(insertUpOp1,insertUpOp2)
            .execute();
    System.out.println(res.hasError());
}

この例では、batchInsertOrUpdate インターフェースを使用して、ヒープテーブルに対して一括書き込みまたは更新を行う方法を示します。ヒープテーブルへの書き込み操作では、データが正しくルーティングされるよう、setPartitionKey インターフェースを使用してパーティションキーの値を設定する必要がある点に注意してください。

@Test
public void testBatchInsertOrUpdate1() throws Exception {
    try {
        // BatchOperationを使用した一括挿入
        BatchOperation batch = client.batchOperation(tableName);

        // 複数の挿入操作を追加
        // パーティションキーc1の値をsetPartitionKeyで設定する必要があります。
        // 同様に、addMutateColValを使用してc1の値も設定する必要があります。
        for (int i = 1; i <= 3; i++) {
            InsertOrUpdate insertOrUpdate = new InsertOrUpdate();
            insertOrUpdate.setPartitionKey(row(colVal("c1", (long)(1000 + i))))
                .addMutateColVal(colVal("c1", (long)(1000 + i)), colVal("c2", "batch_test" + i), colVal("c3", (long)(3000 + i)));
            batch.addOperation(insertOrUpdate);
        }

        batch.execute();
        System.out.println("Batch insertOrUpdate successful: 3 operations executed");
    } finally {
        // データのクリア
        truncateTable();
    }
}

batchReplace

インデックス組織テーブル
ヒープ組織テーブル

サンプルコードでは、1バッチに2行のデータを書き込みます。主キーemployeeIdはそれぞれ1001と1002で、各行には4つの属性列が書き込まれています。

private static void batchReplaceRow(ObTableClient obkvHandle) throws Exception {
    Row rowKey1 = row().add(colVal("employeeId", 1001));
    Row rowKey2 = row().add(colVal("employeeId", 1002));
    Row properties1 = row().add(colVal("name", "zhangsan"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 10));
    Row properties2 = row().add(colVal("name", "lisi"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 5));
    Replace replaceOp1 = replace().setRowKey(rowKey1).addMutateRow(properties1);
    Replace replaceOp2 = replace().setRowKey(rowKey2).addMutateRow(properties2);
    BatchOperationResult res = obkvHandle.batchOperation("employees")
            .addOperation(replaceOp1,replaceOp2)
            .execute();
    System.out.println(res.hasError());
}

この例では、batchReplace インターフェースを使用してヒープテーブルの行を一括で置き換える方法を示します。ヒープテーブルの置き換え操作では、データが正しくルーティングされるように、setPartitionKey インターフェースでパーティションキーの値を設定する必要がある点に注意してください。

@Test
public void testBatchReplace1() throws Exception {
    try {
        // BatchOperationを使用した一括挿入
        BatchOperation batch = client.batchOperation(tableName);

        // 複数のreplace操作を追加
        // パーティションキーc1の値はsetPartitionKeyで設定する必要があります。
        // c1の値はaddMutateColValでも設定する必要があります。
        for (int i = 1; i <= 3; i++) {
            Replace replace = new Replace();
            replace..setPartitionKey(row(colVal("c1", (long)(1000 + i))))
                .addMutateColVal(colVal("c1", (long)(1000 + i)), colVal("c2", "batch_test" + i), colVal("c3", (long)(3000 + i)));
            batch.addOperation(replace);
        }

        batch.execute();
        System.out.println("Batch replace successful: 3 operations executed");
    } finally {
        // データのクリア
        truncateTable();
    }
}

batchPut

注意

このインターフェースはヒープ組織テーブルをサポートしていません。

サンプルコードでは、1バッチで2行のデータを書き込みます。主キー employeeId はそれぞれ 1001 と 1002 で、各行にはテーブルの全5つの属性列がすべて書き込まれます。

private static void batchPutRow(ObTableClient obkvHandle) throws Exception {
    Row rowKey1 = row().add(colVal("employeeId", 1001));
    Row rowKey2 = row().add(colVal("employeeId", 1002));
    Row properties1 = row().add(colVal("name", "zhangsan"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 1))
            .add(colVal("comment", "new employee"));
    Row properties2 = row().add(colVal("name", "lisi"))
            .add(colVal("department", "R&D"))
            .add(colVal("position", "dev"))
            .add(colVal("workYear", 1))
            .add(colVal("comment", "new employee"));
    Put putOp1 = put().setRowKey(rowKey1).addMutateRow(properties1);
    Put putOp2 = put().setRowKey(rowKey2).addMutateRow(properties2);
    BatchOperationResult res = obkvHandle.batchOperation("employees")
            .addOperation(putOp1,putOp2)
            .execute();
    System.out.println(res.hasError());
}

前のトピック

OBKV-Table Javaクライアントを使用してクラスタに接続する
前へ

次のトピック

OBKV-Tableによるデータのクエリ
次へ
このページの内容
書き込み可能なインターフェース
書き込みの例
前提条件
単一行の書き込み
バッチ書き込み