创建一个指定的元数据锁。
调试
您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。
授权信息
当前API暂无授权信息透出。
请求语法
POST /api/metastore/catalogs/databases/tables/locks
请求参数
名称 | 类型 | 必填 | 描述 | 示例值 |
---|---|---|---|---|
Body | object | 否 | body | |
LockObjList | array | 否 | LockObjList | |
LockObj | 否 |
- 当前 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);