创建一个指定的元数据锁。
调试
您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。
授权信息
当前API暂无授权信息透出。
请求参数
名称 | 类型 | 必填 | 描述 | 示例值 |
---|---|---|---|---|
Body | object | 否 | body | |
LockObjList | array | 否 | LockObjList |
- 当前LockObjList只支持size为1,也就是只能获取一个对象锁
- 当前LockObj中只支持table锁,目前不支持partition级别的锁
返回参数
- code:错误码
- message:错误信息
- requestId:标记当前请求唯一id
- Success:true/false,判定请求是否成功
- LockStatus:如果success,该字段有值,否则为空。LockStatus中有两个字段:lockId、Lockstate,如果lockstate为Acquired,那么lockid有值,否则为空
示例
正常返回示例
JSON
格式
{
"Code": "OK",
"Message": ".",
"RequestId": "73201200-4C1A-4FEF-BD6B-C0DA7994FFA2",
"Success": true,
"LockStatus": {
"LockId": 1,
"LockState": "ACQUIRED"
}
}
错误码
访问错误中心查看更多错误码。
**获取到lockid之后,如何在createtable、update table使用该lock?
下面以CreateTable接口为例,需要在header中把lock获取的lockid传递进去,这样才能使用lock。
说明另外需要注意,lock有事务语义,只有传入lock,按照事务隔离性才能获取当前事务的状态,否则看到到是事务提交前的状态。
说明比如一个请求对表已经加了lock,同时delete了改表,但是如果事务没有提交(也就是没有unlock),这个时候又来了一个请求,要去createtable,如果没有带上lock,那么发现表示存在的,因为看到的是事务提交之前的状态,所以创建失败。如果createtable,带上这个lock,那么就进入事务中,就可以看到这个表已经delete了,那么createtable就能创建成功。
CreateTableRequest request = new CreateTableRequest();
request.catalogId = catalogId;
request.databaseName = databaseName;
request.tableInput = table;
RuntimeOptions runtime = new RuntimeOptions();
Map<String, String> headers = new HashMap();
//需要在建表或者update的表中的header中设置lockid
headers.put("metastore-lock-id", String.valueOf(lockId));
CreateTableResponseBody response = client.createTableWithOptions(request, headers, runtime).body;
return new ResultModel<>(response.success, response.code, response.message,
response.requestId);