首页 数据湖构建 API参考指南 API目录 元数据 CreateLock - 创建元数据锁

CreateLock - 创建元数据锁

创建一个指定的元数据锁。

调试

您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。

调试

授权信息

当前API暂无授权信息透出。

请求参数

名称类型必填描述示例值
Bodyobject

body

LockObjListarray

LockObjList

  1. 当前LockObjList只支持size为1,也就是只能获取一个对象锁
  2. 当前LockObj中只支持table锁,目前不支持partition级别的锁

返回参数

名称类型描述示例值
object

lock response

Codestring

Code

OK
Messagestring

Message

.
RequestIdstring

RequestId

73201200-4C1A-4FEF-BD6B-C0DA7994FFA2
Successboolean

Success

True
LockStatusLockStatus

状态描述

{"lockId":12323,"lockStatus":"ACQUIRED"}
  • 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);
阿里云首页 数据湖构建 相关技术圈