- API接收地址
- API返回内容
- 创建消息队列(数据源)
- 查看所有消息队列
- 根据名称查询消息队列
- 根据名称删除消息队列
- 根据名称更新消息队列
- 创建流式计算任务
- 上传jar包(自定义计算使用)
- 查看所有流式计算任务
- 查看指定流式计算任务的信息
- 修改流式计算任务
- 删除流式计算任务
- 流式导出数据至HTTP地址
- 流式导出数据至时序数据库
- 流式导出数据至日志检索服务
- 流式导出数据至对象存储服务
- 流式导出数据至报表平台
- 更新流式导出任务
- 查看所有流式导出任务
- 根据名称查看流式导出任务
- 根据名称删除流式导出任务
- 错误代码及相关说明
API接收地址
https://pipeline.qiniu.com
API返回内容
响应报文
- 如果请求成功,返回HTTP状态码
200:
HTTP/1.1 200 OK
- 如果请求失败,返回包含如下内容的JSON字符串(已格式化,便于阅读):
{"error": "<errMsg string>"}
- 如果请求包含数据获取,则返回相应数据的JSON字符串;
创建消息队列(数据源)
请求语法
POST /v2/repos/<RepoName>Content-Type: application/jsonAuthorization: Pandora <auth>{"region": <Region>,"schema": [{"key": <Key>,"valtype": <ValueType>,"elemtype": <ElemType>,"required": <Required>,"schema": [...]},...],"options":{"withIP":<ipkeyname>}}
请求内容
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| RepoName | string | 是 | 消息队列名称 命名规则: ^[a-zA-Z_][a-zA-Z0-9_]{0,127}$ |
| region | string | 是 | 计算与存储所使用的物理资源所在区域 目前仅支持“nb”(华东区域) |
| schema | array | 是 | 数据的字段信息 由‘字段名称’、‘字段类型’、‘数组类型’、‘是否必填’组成 |
| schema.key | string | 是 | 字段名称 命名规则: ^[a-zA-Z_][a-zA-Z0-9_]{0,127}$ |
| schema.valtype | string | 是 | 字段类型 目前仅支持: boolean:布尔类型long:整型date:RFC3339日期格式float:64位精度浮点型string:字符串array:数组map:嵌套类型,可嵌套,最多5层,类似于json objectjsonstring:符合json格式的字符串 |
| schema.elemtype | string | 否 | 数组类型 当 schema.valtype:"array"时必填目前仅支持 long、float、string |
| schema.required | bool | 否 | 是否必填 用户在传输数据时 key字段是否必填 |
| options | map | 否 | 表达一些repo的可选项 |
| options.withIP | string | 否 | 在写入的数据中加入用户的来源IP信息,并命名为 |
示例
curl -X POST https://pipeline.qiniu.com/v2/repos/Test_Repo \-H 'Content-Type: application/json' \-H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \-d '{"region": "nb","schema": [{"key": "userName","valtype": "string","required": true},{"key": "age","valtype": "float","required": true},{"key": "addresses","valtype": "array","elemtype": "long","required": true},{"key": "profile","valtype": "map","required": true,"schema": [{"key": "position","valtype": "string","required": true},{"key": "salary","valtype": "float","required": true},{"key": "education","valtype": "array","elemtype": "string","required": false}]}]}'
查看所有消息队列
请求语法
GET /v2/reposAuthorization: Pandora <auth>
响应报文
Content-Type: application/json{"repos": [{"name": <RepoName>,"region": <Region>,"derivedFrom": <TransformName>},...]}
响应内容
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| derivedFrom | string | - | 表示这个消息队列是由哪个transform生成的 如果此项为空,说明该消息队列是由用户自行创建的 |
根据名称查询消息队列
请求语法
GET /v2/repos/<RepoName>Authorization: Pandora <auth>
响应报文
Content-Type: application/json{"region": <Region>,"derivedFrom": <TransformName>,"schema": [{"key": <Key>,"valtype": <ValueType>,"elemtype": <ElemType>,"required": <Required>,"schema": [...]},...]}
根据名称删除消息队列
请求语法
DELETE /v2/repos/<RepoName>Authorization: Pandora <auth>
根据名称更新消息队列
请求语法
PUT /v2/repos/<RepoName>Content-Type: application/jsonAuthorization: Pandora <auth>{"schema": [{"key": <Key>,"valtype": <ValueType>,"elemtype": <ElemType>,"required": <Required>,"schema": [...]},...]}
!> 注意: 更新字段信息时,如果需要保留已有的字段信息,也需要填写上去,这是一次全量更新。
创建流式计算任务
请求语法
POST /v2/repos/<RepoName>/transforms/<TransformName>/to/<DestinationRepoName>Content-Type: application/jsonAuthorization: Pandora <auth>{"plugin": {"name": <PluginName>,"output": [{"name": <FieldName1>,"type": <FieldType>},{"name": <FieldName2>},......],},"mode": <Mode>,"code": <Code>,"interval": <Interval>,"container": {"type": <ContainerType>,"count": <ContainerCount>},"whence": <TransformWhence>,"destrepo": [{"key": <Key>,"valtype": <ValueType>,"elemtype": <ElemType>,"required": <Required>,"schema": [...]},...]}
请求内容
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| RepoName | string | 是 | 指定一个消息队列的名称 |
| TransformName | string | 是 | 计算任务名称 用来标识该消息队列的唯一性 命名规则: ^[a-zA-Z_][a-zA-Z0-9_]{0,127}$ |
| DestinationRepoName | string | 是 | 计算结果输出消息队列 如果该消息队列不存在 将自动创建一个 |
| plugin | json | 否 | 自定义计算 |
| name | string | 是 | 自定义计算名称 |
| output | json | 是 | 输出数组 即这个plugin计算完成后,输出的数据结果的结构和类型 也可以理解为一张表,包含字段名称和字段类型 |
| output.name | string | 是 | 输出字段名称 命名规则: ^[a-zA-Z_][a-zA-Z0-9_]{0,127}$ |
| output.type | string | 否 | 输出字段类型 支持 string、long和float三种时间类型使用 long类型默认为 string类型 |
| mode | string | 否 | 该计算任务使用的语言类型 目前仅支持 sql |
| code | string | 否 | sql语句代码 |
| interval | string | 否 | 计算任务的运行时间间隔 目前支持 5s、10s、20s、30s、1m、5m和10m的粒度如果不指定,系统默认使用 1m |
| container | map | 否 | 计算资源的数量及类型 |
| type | string | 否 | 目前支持1U2G、1U4G、2U4G、4U8G、4U16G和8U16G分别代表 1核(CPU)2G(内存)、1核(CPU)4G(内存)、2核(CPU)4G(内存)、4核(CPU)8G(内存)、4核(CPU)16G(内存)、8核(CPU)16G(内存) |
| count | int | 否 | 指资源type的数量,最小为1,没有上限 |
| whence | string | 否 | 计算数据的起始位置, 目前支持oldest、newest, 分别表示从指定仓库的最早、最新数据开始计算, 默认值为newest |
!> 注意:mode加code是基础的数据计算方式,自定义计算(plugin)是更为高级的数据计算方式,要注意mode/code和自定义计算两种计算方式可以共存,但不可以一种都不指定。当自定义计算和mode/code共存时,系统优先执行自定义计算,后执行mode/code。
示例
curl -X POST https://pipeline.qiniu.com/v2/repos/test_repo/transforms/transform_job/to/compute_repo \-H 'Content-Type: application/json' \-H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \-d {"mode": "sql","code": "select count(*) from test_repo","interval": "1m","container": {"type": "M16C4","count": 5}}
上传jar包(自定义计算使用)
请求语法
POST /v2/plugins/<PluginName>Content-Type: application/java-archiveContent-MD5: <ContentMD5>Authorization: Pandora <auth>
请求内容
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| PluginName | string | 是 | plugin名称 命名规则: ^[a-zA-Z][a-zA-Z0-9_\\.]{0,127}[a-zA-Z0-9_]$ |
| ContentMD5 | string | 是 | jar包的MD5码 |
Plugin说明:
- Jar包的命名必须和包含代码方法的类名一致
- 上传的Plugin Jar包最大为100MB。
- Content-MD5头部是可选的。如果上传plugin的时候带上该头部服务器会校验上传数据的校验和,如果两者不一致服务器将拒绝上传。如果不带该头部,服务器不做任何校验和的检查。
是先计算plugin内容的MD5,再对MD5做一次base64编码转化为字符串。例如qiniu这个字符串的Content-MD5是gLL29S04bTCxYd2kCqsEIQ==而不是7b9d6b4d89f6825a196d4cc50fdbedc5 - PluginName必须与用户所编写的Parser类的全限定名保持一致,否则transform执行plugin会失败。 例如NginxLogParser位于com.qiniu包,PluginName须写为com.qiniu.NginxLogParser。
示例
curl -X POST https://pipeline.qiniu.com/v2/plugins/ComputeSumDataParser \-H 'Content-Type: application/java-archive' \-H 'Content-MD5: 900150983cd24fb0d6963f7d28e17f72' \-H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \-T ./TestPlugin.jar \
查看所有流式计算任务
请求语法
GET /v2/repos/<RepoName>/transformsAuthorization: Pandora <auth>
查看指定流式计算任务的信息
请求语法
GET /v2/repos/<RepoName>/transforms/<TransformName>Authorization: Pandora <auth>
响应报文
200 OKTransform-Type: application/<TransformType>{"name": "<TransformName1>","to": "<DestRepo1>","spec": {"plugin": {"name": <PluginName>,"output": [{"name": <FieldName1>,"type": <FieldType>},{"name": <FieldName2>},...],},"mode": <Mode>,"code": <Code>,"interval": <Interval>}}
修改流式计算任务
请求语法
PUT /v2/repos/<RepoName>/transforms/<TransformName>Content-Type: application/jsonAuthorization: Pandora <auth>{"plugin": {"name": <PluginName>,"output": [{"name": <FieldName1>,"type": <FieldType>},{"name": <FieldName2>},...],},"code": <Code>,"interval": <Interval>,"container": {"type": <ContainerType>,"count": <ContainerCount>}}
注意:
1.更新计算任务,可以同时更新
plugin、sql代码、运行时间间隔和配额,也可以只更新其中一种,但不能一种都不指定。2.在更新
sql和plugin的输出字段时,只能添加新的字段,不能删除和更改已经存在的字段。
删除流式计算任务
请求语法
DELETE /v2/repos/<RepoName>/transforms/<TransformName>Authorization: Pandora <auth>
流式导出数据至HTTP地址
请求语法
POST /v2/repos/<RepoName>/exports/<ExportName>Content-Type: application/jsonAuthorization: Pandora <auth>{"type": <http>,"whence": <ExportWhence>,"spec": {"host": <Host>,"uri": <RequestURI>,"format": <ExportFormat>}}
请求内容
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| RepoName | string | 是 | 需要导出数据的消息队列名称 |
| ExportName | string | 是 | 导出任务名称 命名规则: ^[a-zA-Z_][a-zA-Z0-9_]{0,127}$ |
| Type | string | 是 | 导出方式 目前支持 http、logdb、mongo、tsdb、kodo、report在这里我们选择 http |
| whence | string | 否 | 导出数据的起始位置 目前支持 oldest、newest,分别表示从指定仓库的 最早、最新数据开始导出默认值为oldest |
| Spec | json | 是 | 导出任务的参数主体 选择不同的 typeSpec也需要填写不同的参数将在下面分开讲解 |
| host | string | 是 | 服务器地址(ip或域名) 例如: https://pipeline.qiniu.com 或 127.0.0.1:7758 |
| uri | string | 是 | 请求资源路径(具体地址,不包含ip或域名) 例如: /test/repos |
| format | string | 否 | 导出方式 支持 text和json如果没有填写此项,默认为 text |
!> 注意: 导出数据格式和推送数据相同。
示例
curl -X POST https://pipeline.qiniu.com/v2/repos/test_Repo/exports/export_job1 \-H 'Content-Type: application/json' \-H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \-d '{"type": "http","spec": {"host": "www.qiniu.com","uri": "/test/repos"}}'
流式导出数据至时序数据库
请求语法
POST /v2/repos/<RepoName>/exports/<ExportName>Content-Type: application/jsonAuthorization: Pandora <auth>{"type": <tsdb>,"whence": <ExportWhence>,"spec": {"destRepoName": <DestRepoName>,"series": <SeriesName>,"omitInvalid": <OmitInvalid>,"omitEmpty": <OmitEmpty>,"tags": {"tag1": <#key1>,"tag2": <#key2>,...},"fields": {"field1": <#key1>,"field2": <#key2>,...},"timestamp": <#key1>,}}
请求内容
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| destRepoName | string | 是 | 数据库名称 |
| series | string | 是 | 序列名称 |
| omitInvalid | bool | 否 | 是否忽略无效数据,默认值为false |
| omitEmpty | bool | 否 | 当某条数据的字段取值全部为null时是否忽略该条数据,默认值为false,设置为true时可避免导出没有意义的数据 |
| tags | map | 是 | 索引字段 |
| fields | map | 是 | 普通字段 |
| timestamp | string | 否 | 时间戳字段 会用rfc3339日期格式进行解析 如果格式不正确则会抛弃这一条数据 如果此项为空,则默认使用当前时间 |
时序数据库中的timestamp字段的类型必须为 date;
消息队列中字段类型为:Long/String/Date 的字段都可以导出至时序数据库中的 timestamp 字段
示例
curl -X POST https://pipeline.qiniu.com/v2/repos/test_Repo/exports/export_job4 \-H 'Content-Type: application/json' \-H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \-d '{"type": "tsdb","spec":{"destRepoName": "test_tsdb","series": "req_io","tags": {"type": "#type","src": "#src","zone": "#zone","time": "#time","bucket": "#bucket","domain": "#domain"},"fields": {"hits": "#hits","flow": "#flow"},}}'
流式导出数据至日志检索服务
请求语法
POST /v2/repos/<RepoName>/exports/<ExportName>Content-Type: application/jsonAuthorization: Pandora <auth>{"type": <logdb>,"whence": <ExportWhence>,"spec": {"destRepoName": <DestRepoName>,"omitInvalid": <OmitInvalid>,"omitEmpty": <OmitEmpty>,"doc": {"toRepoSchema1": <#fromRepoSchema1>,"toRepoSchema2": {"toRepoSchema3": <#fromRepoSchema3>,}......}}
请求内容
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| destRepoName | string | 是 | 日志仓库名称 |
| omitInvalid | bool | 否 | 是否忽略无效数据,默认值为false |
| omitEmpty | bool | 否 | 当某条数据的字段取值全部为null时是否忽略该条数据,默认值为false,设置为true时可避免导出没有意义的数据 |
| doc | map | 是 | 字段关系说明fromRepoSchema表示源消息队列字段名称toRepoSchema表示目标日志仓库字段名称 |
消息队列中,字段的类型与日志检索服务中的字段类型需要作出如下对应:
消息队列类型:string 对应 日志检索服务:string / date
消息队列类型:long 对应 日志检索服务:long / date
消息队列类型:float 对应 日志检索服务:float
消息队列类型:array[string] 对应 日志检索服务:string
消息队列类型:array[long] 对应 日志检索服务:long
消息队列类型:array[float] 对应 日志检索服务:float
消息队列类型:map 对应 日志检索服务:object
消息队列类型:date 对应 日志检索服务:date
消息队列类型:jsonstring 对应 日志检索服务:object
!> 注意: 对于消息队列的jsonstring类型,导出至日志检索服务的object类型时,会将内嵌字段名称中所有圆点(.)替换为下划线(由于日志检索服务的object类型的内嵌字段名称不支持圆点(.))。例如,消息队列中某一个字段f1的类型为jsonstring,取值为{"education.level": "university"},最终导出至日志检索服务为{"education_level": "university"},内嵌字段education.level中的圆点(,)被替换为下划线(_)。
示例
curl -X POST https://pipeline.qiniu.com/v2/repos/test_Repo/exports/export_job2 \-H 'Content-Type: application/json' \-H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \-d '{"type": "logdb","spec": {"destRepoName": "logdb_testRepo","doc":{"user":"userName","profile":{"age":"age"}}}}'
流式导出数据至对象存储服务
请求语法
POST /v2/repos/<RepoName>/exports/<ExportName>Content-Type: application/jsonAuthorization: Pandora <auth>{"type": <kodo>,"whence": <ExportWhence>,"spec": {"bucket": <Bucket>,"keyPrefix": <KeyPrefix>,"email": <Email>,"accessKey": <AccessKey>,"fields": {"key1": <#value1>,"key2": <#value2>,...},"rotateStrategy": <RotateStrategy>,"rotateSize": <RotateSize>,"rotateInterval": <RotateInterval>,"format": <Format>,"delimiter": <Delimiter>,"compress": <true|false>,"retention": <Retention>}}
请求内容
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| bucket | string | 是 | 数据中心名称 |
| keyPrefix | string | 否 | 导出的文件名的前缀 |
| string | 是 | 数据中心名称所属用户的七牛账户名称 | |
| accessKey | string | 是 | 七牛账户的公钥 |
| fields | map | 是 | 字段关系说明key为kodo-bucket的字段名value为导出数据的消息队列的字段名 |
| rotateStrategy | string | 否 | 文件切割策略,可取值为size、interval、both,其中,size表示文件大小超过rotateSize触发切割行为;interval表示文件写时长超过rotateInterval将进行切割;both表示只要满足其中一个条件将触发切割行为。为了保持兼容性,默认值为interval |
| rotateSize | int | 否 | 当文件大小超过该值时将触发切割行为,单位为字节,默认值为5242880(5MB),最大值不超过1073741824(1GB) |
| rotateInterval | int | 否 | 文件切割间隔,单位为秒(s),默认值为600(10分钟) |
| format | string | 否 | 文件导出格式 支持 json、text、parquet、csv四种形式默认为 json |
| delimiter | string | 否 | csv文件分割符,当文件类型为csv时,delimiter为必填项 |
| compress | bool | 否 | 是否开启文件压缩功能 默认为 false |
| retention | int | 否 | 数据储存时限 以天为单位 当不大于0或该字段为空时,则永久储存 |
!> 注1: compress 会压缩成gzip格式,但当用户指定format为parquet时,由于parquet已经是压缩好的列存格式,compress选项将不起作用。
!> 注2: keyPrefix字段表示导出文件名称的前缀,该字段可选,默认值为””(生成文件名会自动加上时间戳格式为yyyy-MM-dd-HH-mm-ss),如果使用了一个或者多个魔法变量时不会自动添加时间戳,支持魔法变量,采用$(var)的形式求值,目前可用的魔法变量var如下:
year上传时的年份mon上传时的月份day上传时的日期hour上传时的小时min上传时的分钟sec上传时的秒钟
举例说明:
- 假如keyPrefix取值为kodo-parquet/date=$(year)-$(mon)-$(day)/hour=$(hour)/min=$(min)/$(sec),且生成某一文件时的北京标准时间为
2017-01-12 15:30:00, 则keyPrefix将被解析为kodo-parquet/date=2017-01-12/hour=15/min=30/00,其中的魔法变量$(year)、$(mon)、$(day)、$(hour)、$(min)、$(sec)分别对应文件生成时间2017-01-12 15:30:00的年、月、日、时、分、秒。- 假如keyPrefix使用默认值,且生成某一文件时的北京标准时间为
2017-01-12 15:30:00, 则keyPrefix将被解析为2017-01-12-15-30-00。
示例
curl -X POST https://pipeline.qiniu.com/v2/repos/repox/exports/export1 \-H 'Content-Type: application/json' \-H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \-d '{"type": "kodo","spec": {"bucket": "bucket2","keyPrefix": "key1/","email": "xiaoming@qiniu.com","accessKey": "7H4FDc1M-FxXFZKwjbN_Up1OfY7DotXDjaM5jXzm","fields": {"f1": "#f1","f2": "#f2"}"format":"json","compress": true}'
流式导出数据至报表平台
请求语法
POST /v2/repos/<RepoName>/exports/<ExportName>Content-Type: application/jsonAuthorization: Pandora <auth>{"type": <report>,"whence": <ExportWhence>,"spec": {"dbName": <DBName>,"tableName": <TableName>,"columns": {"column1": <#key1>,"column2": <#key2>,...}}}
请求内容
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| database | string | 是 | 数据库名称 |
| tableName | string | 是 | 数据表名称 |
| columns | map | 是 | 字段关系说明keyN表示源消息队列字段名称columnN表示报表服务数据表字段名称 |
更新流式导出任务
请求语法
PUT /v2/repos/<RepoName>/exports/<ExportName>Content-Type: application/jsonAuthorization: Pandora <auth>{"spec": <Spec>}
!> 注意:仅支持对 spec 的修改(不允许修改type、whence)
查看所有流式导出任务
请求语法
GET /v2/repos/<RepoName>/exportsAuthorization: Pandora <auth>
响应报文
Content-Type: application/json{"name": <ExportName>,"type": <ExportSchema>,"spec": <Spec>,"whence": <ExportWhence>}
根据名称查看流式导出任务
请求语法
GET /v2/repos/<RepoName>/exports/<ExportName>Authorization: Pandora <auth>
根据名称删除流式导出任务
请求语法
DELETE /v2/repos/<RepoName>/exports/<ExportName>Authorization: Pandora <auth>
错误代码及相关说明
| 错误码 | 错误描述 |
|---|---|
| 500 | 服务器内部错误 |
| 411 | E18003: 缺少内容长度 |
| 400 | E18004: 无效的内容长度 |
| 413 | E18005: 请求实体过大 |
| 400 | E18006: 请求实体为空 |
| 400 | E18007: 请求实体格式非法 |
| 400 | E18008: 字段长度超过限制 |
| 409 | E18101: 仓库已经存在 |
| 404 | E18102: 仓库不存在 |
| 400 | E18103: 无效的仓库名称 |
| 400 | E18104: 无效的日期格式 |
| 400 | E18105: 仓库Schema为空 |
| 400 | E18106: 无效的字段名称 |
| 400 | E18107: 不支持的字段类型 |
| 400 | E18108: 源仓库数量超过限制 |
| 400 | E18109: 无效的仓库模式 |
| 400 | E18110: 无效的字段格式 |
| 404 | E18111: 字段不存在 |
| 400 | E18112: 仓库上存在着级联的转换任务或者导出任务 |
| 409 | E18113: 仓库处于删除状态中 |
| 400 | E18117: Plugin名称不合法 |
| 404 | E18120: 共享资源池不存在 |
| 404 | E18122: 导出的仓库在logd中不存在 |
| 202 | E18124: 仓库处于创建中 |
| 400 | E18125: 读取gzip的打点请求体出错 |
| 409 | E18201: 计算任务已经存在 |
| 404 | E18202: 计算任务不存在 |
| 415 | E18203: 计算任务类型不支持 |
| 409 | E18204: 计算任务的源仓库与目的仓库相同 |
| 409 | E18205: 目的仓库已经被其他转换任务占用 |
| 400 | E18206: 目的仓库必须通过删除计算任务的方式删除 |
| 400 | E18207: 计算任务描述格式非法 |
| 400 | E18208: 计算任务interval非法 |
| 400 | E18209: 计算任务中的SQL语句非法 |
| 400 | E18211: 计算任务中plugin输出字段类型非法 |
| 400 | E18212: 仓库的区域信息和数据中心不相符 |
| 400 | E18213: 计算任务中容器类型非法 |
| 400 | E18214: 计算任务中容器数量非法 |
| 409 | E18215: 共享资源池处于使用中 |
| 404 | E18216: Plugin不存在 |
| 409 | E18217: Plugin已存在 |
| 409 | E18218: 共享资源池已存在 |
| 400 | E18219: Plugin上传内容长度不一致 |
| 400 | E18220: Plugin上传内容的MD5不一致 |
| 400 | E18221: 共享资源池名称非法 |
| 400 | E18222: 共享资源池的区域信息不一致 |
| 400 | E18223: 不能向计算任务的目标仓库中打点 |
| 409 | E18301: 导出任务已经存在 |
| 404 | E18302: 导出任务不存在 |
| 400 | E18303: 提交导出任务失败 |
| 400 | E18304: 删除导出任务失败 |
| 400 | E18305: 导出任务出现错误 |
| 401 | bad token:鉴权不通过 、token已过期、机器时间未同步 |
