You need to enable JavaScript to run this app.
导航
条件过滤删除数据
最近更新时间:2024.12.02 20:28:33首次发布时间:2024.12.02 20:28:33

概述

用于按条件过滤数据集内的数据进行批量删除操作。
包括三个接口:

  • /task/create 创建离线任务
  • /task/update 更新任务状态
  • /task/info 查询任务运行信息

注意

目前仅支持对int64、list<int64>、string、list<string>类型的字段进行枚举过滤删除操作。

接口列表

创建删除任务(create)

/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 的数据
字段列表为且关系,字段的过滤值列表为或关系。
暂时只支持 int64, list, string, list 的枚举过滤删除

{
    "user_id":[1,2,3],
    "city":["beijing"]
}

need_confirm

bool

为false时可跳过人工确认,默认为true

响应消息

字段

备注

子字段

子字段说明

code

状态码

message

返回信息

data

task_id

uuid

更新任务状态(update)

/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

返回信息

任务运行信息(info)

/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)