-
Notifications
You must be signed in to change notification settings - Fork 24
单行操作接口
insert 提供单行数据插入的语义,必须指定主键列插入,对于非指定的非主键列,会插入默认值。
Insert insert tableClient.insert("test_table")
.setRowKey(row(colVal("c1", 0L), colVal("c2", "row_0")))
.addMutateColVal(colVal("c3", new byte[]{1}))
.addMutateColVal(colVal("c4", 100L))
MutationResult result = insert.execute();
System.out.println("insert " + (result.getAffectedRows()) + " rows!");- setRowKey: 指定插入行的主键
- setFilter: 指定插入的条件,如果指定的行满足条件,才会做插入操作 1.2.2 Release Notes
- addMutateColVal: 指定插入的非主键列的值,可以多次调用添加所有需要插入的非主键列的值
- MutationResult: insert 操作 execute 之后返回的结果,可以通过 getAffectedRows 接口获取写入的条数
update 提供单行数据更新的语义,必须指定主键列,同时可以做条件更新,对非主键列指定条件,满足条件才做更新操作 // update
Update update = tableClient.update("test_table")
.setRowKey(colVal("c1", 1001L))
.setFilter(compareVal(ObCompareOp.EQ, "c3", "singleUpset"))
.addMutateColVal(colVal("c3", "updateWithCondition"))
MutationResult result = update.execute();
System.out.println("update " + result.getAffectedRows() + " row!");- setRowKey: 指定需要更新行的主键
- addMutateColVal: 指定需要更新的非主键列,可以多次调用添加所有需要更新的非主键列的值
- setFilter: 指定更新的条件,如果指定的行满足条件,才会做更新操作
- MutationResult: update 操作 execute 之后返回的结果,可以通过 getAffectedRows 接口获取 update 更新的行数
delete 提供单行数据删除的语义,必须指定主键列,同时可以做条件删除,对非主键列指定条件,满足条件才删除该行
Delete delete = tableClient.delete("test_table")
.setRowKey(colVal("c1", 2L), colVal("c2", "row_2"))
.setFilter(compareVal(ObCompareOp.EQ, "c4", 103L))
.execute();
MutationResult result = delete.execute();
System.out.println("delete " + result.getAffectedRows() + " row!");- setRowKey: 指定需要删除行的主键
- setFilter: 指定删除的条件,如果指定的行满足条件,才会做删除操作
- MutationResult: delete 操作 execute 之后返回的结果,可以通过 getAffectedRows 接口获取删除的行数
insertOrUpdate 提供插入或者更新的语义,必须指定主键列,如果该行不存在,插入该行,如果存在,更新已有行。
InsertOrUpdate insertOrUpdate = tableClient.insertOrUpdate("test_table")
.setRowKey(colVal("c1", 4L), colVal("c2", "row_4"))
.addMutateRow(row(colVal("c3", new byte[]{2}), colVal("c4", 104L)))
MutationResult result = insertOrUpdate.execute();
System.out.println("insertOrUpdate " + result.getAffectedRows() + " row!");- setRowKey: 指定需要操作行的主键
- addMutateRow: 添加需要插入或更新的行
- MutationResult: delete 操作 execute 之后返回的结果,可以通过 getAffectedRows 接口获取删除的行数
PS: 由于insertOrUpdate有可能是做insert操作,因此需要保证带有not null属性的列都填了值,除非这个列还带有default value属性
replace 插入或者替换的语义,必须指定主键列,如果该行不存在,插入该行,如果该行存在,会删除原来的行重新插入。同时,如果有唯一索引冲突,也会删除所有冲突的行。
Replace replace = tableClient.replace("test_table")
.setRowKey(colVal("c1", 2L), colVal("c2", "row_2"))
.addMutateRow(row(colVal("c3", new byte[]{2}), colVal("c4", 202L)));
MutationResult result = replace.execute();
System.out.println("replace " + result.getAffectedRows() + " row!");- setRowKey: 指定需要操作行的主键
- addMutateRow: 添加操作的行
- MutationResult: replace 操作 execute 之后返回的结果,可以通过 getAffectedRows 接口获取 replace 操作影响的行数,因为会删除旧行,所以可能大于 1
PS: 相对与 insertOrUpdate,replace 在行存在的时候,重新插入新行,那么 replace 操作中未指定的列将使用默认值插入,而 insertOrUpdate 只会更新操作中指定的列,其他列保持不变。
increment 提供对整型列增加一个增加值的语义,必须指定主键列,以及需要增加值的列。如果指定的行不存在,插入该行,并将做 increment 的列的初始化设置为增量值,如果该行存在并且需要做 increment 的列的当前值为 NULL,将该列的值更新为增量值。 increment 也支持提供条件,如果指定条件,只有该行满足条件时,才会做 increment 操作。
Increment increment = tableClient.inrement("test_table")
.setRowKey(colVal("c1", 2L), colVal("c2", "row_2"))
.addMutateColVal(colVal("c4", 202L))
.setFilter(compareVal(ObCompareOp.EQ, "c3", new byte[]{2}));
MutationResult result = increment.execute();
System.out.println("increment " + result.getAffectedRows() + " row!");- setRowKey: 指定需要操作行的主键
- addMutateRow: 添加需要做 increment 的列与增量值,只支持整型列
- setFilter: 指定做 increment 操作的条件
- MutationResult: increment 操作 execute 之后返回的结果,可以通过 getAffectedRows 接口获取 increment 操作影响的行数
append 提供对字符类型列追加某个字符串,必须指定主键列,以及需要追加字符串的列。如果指定的行不存在,插入该行,并将做 append 的列的初始化设置为追加串,如果该行存在并且需要做 apend 的列的当前值为 NULL,将该列的值更新为追加串。 append 也支持提供条件,如果指定条件,只有该行满足条件时,才会做 append 操作。
Append append = tableClient.append("test_table")
.setRowKey(colVal("c1", 2L), colVal("c2", "row_2"))
.addMutateColVal(colVal("c3", new byte[]{2}))
.setFilter(compareVal(ObCompareOp.EQ, "c4", 104L));
MutationResult result = append.execute();
System.out.println("append " + result.getAffectedRows() + " row!");- setRowKey: 指定需要操作行的主键
- addMutateRow: 添加需要做 append 的列与追加值,只支持 varbinary/varchar 类型
- setFilter: 指定做 append 操作的条件
- MutationResult: append 操作 execute 之后返回的结果,可以通过 getAffectedRows 接口获取 append 操作影响的行数
put 提供覆盖写的语义,必须指定主键列,如果该行不存在,插入该行,如果存在,覆盖已有行。
注意: put接口有以下约束
- 在binlog_row_image被设置成FULL时,不允许使用put row,会报错OB_NOT_SUPPORTED
- 表中有索引时(本地索引或全局索引),不允许使用put,会报错OB_NOT_SUPPORTED。
- 使用put时,如果没有填全列,缺省的列将会使用默认值填充,如果列中没有默认值,将会报错。
Put put = client.put("test_table")
.setRowKey(colVal("c1", 4L), colVal("c2", "row_4"))
.addMutateRow(row(colVal("c3", new byte[]{2}), colVal("c4", 104L)));
MutationResult result = put.execute();
System.out.println("put " + result.getAffectedRows() + " row!");- setRowKey: 指定需要操作行的主键
- addMutateRow: 除主键外的其他普通列
- MutationResult: put 操作 execute 之后返回的结果,可以通过 getAffectedRows 接口获取写入的行数
checkAndInsUp 提供条件更新的语义。在 checkExist 参数为 true 的时候,如果有符合条件的行存在,则执行给定的 insertUp 操作,否则什么都不做。在 checkExist 参数为 false 的时候,如果没有符合条件的行存在,则执行给定的 insertUp 操作,否则什么都不做。
public CheckAndInsUp checkAndInsUp(String tableName, ObTableFilter filter,
InsertOrUpdate insUp, boolean checkExists); - tableName: 操作的表名
- filter: check 的 filter 条件。check 的行是 inserUp 中给定的行,即每次最多 check 一行
- insertUp: check 通过后需要执行的操作
- checkExists: 默认为 true。值为 true 的时候表示满足条件的行存在时,执行 checkAndInsUp 操作;为 false 的时候表示满足条件的行不存在时,则执行给定的 insertUp 操作
示例: 如果存在主键为 (1L, "c2_v0") 的行,并且满足条件 c3 >= "c3_v0",那么执行 insertUp 操作,将 c3, c4 覆盖写为 ("c3_v0", 200L)
InsertOrUpdate insertOrUpdate = new InsertOrUpdate();
insertOrUpdate.setRowKey(row(colVal("c1", 1L), colVal("c2", "c2_v0")));
insertOrUpdate.addMutateRow(row(colVal("c3", "c3_v0"), colVal("c4", 200L)));
ObTableFilter filter = compareVal(ObCompareOp.GE, "c3", "c3_v0");
CheckAndInsUp checkAndInsUp = client.checkAndInsUp("test_table", filter, insertOrUpdate, true);
MutationResult result = checkAndInsUp.execute();
System.out.println("checkAndInsUp " + result.getAffectedRows() + " row!");PS: 该操作也可以放到 batch 中批量执行,但是当前不支持混合其他操作执行。