用于按条件过滤数据集内的数据进行批量删除操作。
包括三个接口:
注意
目前仅支持对int64、list<int64>、string、list<string>类型的字段进行枚举过滤删除操作。
/task/create 用于在指定的数据集 Collection 按条件创建条件过滤删除任务。
说明
请求向量数据库 VikingDB 的 OpenAPI 接口时,需要构造签名进行鉴权,详细的 OpenAPI 签名调用方法请参见 API签名调用指南。
URI | /api/task/create | 统一资源标识符 |
---|---|---|
请求方法 | POST | 客户端对向量数据库服务器请求的操作类型 |
请求头 | Content-Type: application/json | 请求消息类型 |
Authorization: HMAC-SHA256 *** | 鉴权 |
字段名 | 类型 | 说明 | 子字段 | 类型 | 说明 |
---|---|---|---|---|---|
task_type | string | 任务类型,必填 | 目前只支持filter_delete(条件批量删除) | ||
task_params | json | 任务参数 | collection_name | string | |
filter | json | 过滤语句,现在想删除 user_id 值在 [1,2,3] 里 并且 city 为 beijing 的数据
| |||
need_confirm | bool | 为false时可跳过人工确认,默认为true |
字段 | 备注 | 子字段 | 子字段说明 |
---|---|---|---|
code | 状态码 | ||
message | 返回信息 | ||
data | task_id | uuid |
/task/update 用于对离线任务进行人工确认操作。
在条件过滤删除任务完成数据扫描后,需进行人工确认。经确认后,才会正式开始删除操作,且删除后数据不可恢复。
如果不需要人工确认环节,可以在创建删除任务时将“need_confirm”设置为“false”。
URI | /api/task/update | 统一资源标识符 |
---|---|---|
请求方法 | POST | 客户端对向量数据库服务器请求的操作类型 |
请求头 | Content-Type: application/json | 请求消息类型 |
Authorization: HMAC-SHA256 *** | 鉴权 |
字段名 | 类型 | 说明 |
---|---|---|
task_id | string | 任务 ID,必填 |
task_status | string | 只有 confirm 状态可以更新,只能更新为 confirmed,必填 |
字段 | 备注 |
---|---|
code | 状态码 |
message | 返回信息 |
/task/info用于查询任务状态、任务进度等离线任务的详细信息。
URI | /api/task/info | 统一资源标识符 |
---|---|---|
请求方法 | POST | 客户端对向量数据库服务器请求的操作类型 |
请求头 | Content-Type: application/json | 请求消息类型 |
Authorization: HMAC-SHA256 *** | 鉴权 |
字段名 | 类型 | 说明 |
---|---|---|
task_id | string | 任务ID,必填 |
字段 | 备注 | 子字段 | 类型 | 子字段说明 | |||
---|---|---|---|---|---|---|---|
code | 状态码 | ||||||
message | 返回信息 | ||||||
data | task_id | string | 任务ID | ||||
task_type | string | 任务类型 | |||||
task_status | string | 任务状态 | |||||
update_person | string | 任务更新人 | |||||
update_time | string | 任务信息更新时间 | |||||
create_time | string | 任务信息创建时间 | |||||
process_info | map | 任务处理信息,例如进度等。 | sampled_data | list | 采样5条数据用于展示 | ||
sampled_timestamp | int64 | 采样的时间戳,后写入的数据不会被过滤删除 | |||||
err_msg | string | 任务错误信息 | |||||
process_step | string | 任务步骤,分为 scan_data 扫描数据、delete_data 删除数据两个步骤 | |||||
task_progress | string | 任务进度 例如50% | |||||
total_data_count | int64 | collection 数据总条数(预估) | |||||
total_deleted_count | int64 | 数据总删除量 | |||||
total_filter_count | int64 | 过滤出来的数据量 | |||||
task_params | map | 任务配置信息 |
任务状态 | 说明 |
---|---|
init | 任务初始化中 |
queued | 任务正在调度,排队中 |
running | 任务运行中 |
done | 任务已完成 |
fail | 任务失败 |
confirm | 任务需要人工确认 |
confirmed | 任务已经人工确认 |
code | message | 备注 | http status_code |
---|---|---|---|
0 | success | 成功 | 200 |
1000005 | collection not exist | Collection不存在 | 400 |
1000003 | invalid request:%s | 非法参数
| 400 |
1000001 | unauthorized | 缺乏鉴权信息 | 401 |
1000002 | no permission | 权限不足 | 403 |
1000028 | Internal error | 内部错误 | 500 |
1000035 | task not exist | task 不存在 | 404 |
在使用条件删除 collection 数据时,首先需要创建一个collection,假设现有一个名为 example 的 collection,有 user_id 和 city 两个field。
对 example 执行条件删除,设置条件 user_id 为5或9,并且 city 为 beijing 的数据。创建成功后会返回 task_id。
from volcengine.auth.SignerV4 import SignerV4 from volcengine.Credentials import Credentials from volcengine.base.Request import Request import requests, json def prepare_request(method, path, ak, sk, params=None, data=None, doseq=0): request = Request() request.set_method(method) request.set_host("api-vikingdb.volces.com") request.set_path(path) mheaders = { 'Accept': 'application/json', 'Content-Type': 'application/json', } request.set_headers(mheaders) if params: request.set_query(params) if data: request.set_body(json.dumps(data)) credentials = Credentials(ak, sk, 'air', 'cn-north-1') SignerV4.sign(request, credentials) return request DOMAIN = "api-vikingdb.volces.com" AK = "****" SK = "****" task_type = "filter_delete" task_param = { "collection_name": "example", "filter" : { "user_id": [5,9], "city": ["beijing"] } } req_info = prepare_request(method = "POST", path = "/api/task/create", ak = AK, sk = SK, data ={"task_type":task_type, "task_params":task_param}) r = requests.request(method=req_info.method, url="http://{}{}".format(DOMAIN, req_info.path), headers=req_info.headers, data=req_info.body ) task_id = json.loads(r.text)['data']['task_id']
输入 task_id 可以查看任务的运行信息,若数据扫描完成后,任务状态会扭转为 confirm,需要进行人工确认。
req_info = prepare_request(method = "POST", path = "/api/task/info", ak = AK, sk = SK, data ={"task_id":task_id}) r = requests.request(method=req_info.method, url="http://{}{}".format(DOMAIN, req_info.path), headers=req_info.headers, data=req_info.body ) print(r.text)
删除的数据不可恢复,如果不需要人工确认环节,创建条件删除任务时把 need_confirm 设为 false 即可。
人工确认完成后会执行数据删除,可通过步骤二查看任务进度。
req_info = prepare_request(method = "POST", path = "/api/task/update", ak = AK, sk = SK, data ={"task_id":task_id, "task_status":"confirmed"}) r = requests.request(method=req_info.method, url="http://{}{}".format(DOMAIN, req_info.path), headers=req_info.headers, data=req_info.body ) print(r.text)