通用数据查询服务 JFetch¶
简介¶
JFetch 是基于近年来公司交易量持续攀升所积累的交易数据,提供高效、通用、轻量的数据查询服务,以满足多场景的数据查询需求 ,可支持 SaaS、PaaS 两种方式灵活部署。
JFetch 有以下功能优势:
接入简单,实现无驱动模式方式接入,支持 RESTful API 接入,实现多数据源的统一管理;
支持多数据源,支持 Vertica、Oracle、MySQL、Hive、Redis 和 Memcache 等数据源,未来还会支持 HBase 等大数据数据源;
类型多场景应用,支持同步查询和异步查询,同步应用于实时、小数据量场景,异步应用于非实时、大数据量场景;
部署灵活,支持 SaaS 和 PaaS 部署模式,服务子公司和外部商户;
应用场景¶
通用大数据查询场景¶
通过接入 JFetch 实现风控、合规业务的数据查询,业务无需关系后端数据源。为可视化 BI 系统提供历史数据和实时数据查询。
应用案例
通用数据执行场景¶
通过接入 JFetch 实现测试环境数据执行操作。
应用案例
自研自动化测试工具 agbot 使用 JFetch 实现 MySQL、Oracle、Redis 和 Memcache 等数据库的数据写入和更新等操作,从而协助 agbot 实现自动化数据测试。
常见问题¶
异步查询接口回调¶
确保调用异步查询接口的 req_id 参数唯一
确保接口回调的服务与环境所在 Virgo 服务的网络能够连通
调用 JFetch 没有响应¶
JFetch 在普天环境和阿里云环境都有部署,确定调用的环境以及网络是否连通
接入流程¶
申请 BUser,具体参考“Jarvis账号申请流程”
按照公司流程,向 DBA 申请数据源配置,DBA 管理数据源的用户表权限
准备以下表格,app_token 是 BUser 标识,数据源配置包括类型、URL、用户名和密码
系统中文名 |
系统英文名 |
环境 |
app_token |
数据源类型 |
URL |
用户名 |
密码 |
---|---|---|---|---|---|---|---|
速刷 |
supay |
测试 |
Vertica |
jdbc:vertica://*:*/***db |
jf_***_user |
||
速刷 |
supay |
生产 |
Vertica |
jdbc:vertica://*:*/***db |
jf_***_user |
以上表格,邮件给审批人(xin.guo@huifu.com)申请,并抄送项目经理
审批人进行审核,通过后,将 ds_key 发给用户
API 文档¶
请求地址¶
测试地址:http://192.168.16.210:7099
联调地址:http://192.168.16.248:10010
生产地址(阿里云):https://jua.cloudpnr.com
生产地址(普天):http://10.99.1.4
公共参数¶
所有接口均包含公共参数,为减少冗余,单独提出。
公共请求参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
req_id |
String |
是 |
变长 32 位 |
请求流水号,不具有业务含义,用于跟踪请求信息。建议采用 {JMan用户名}_{请求方唯一数字流水号},以保持唯一 |
app_token |
String |
是 |
变长 40 位 |
Jarvis分配的,app_token用于同一用户不同产品或渠道的接口调用区分 |
signature |
String |
是 |
定长 64 位 |
v1.0.0版本,明文拼接规则:请求方法方式(大写) + app_token + 请求参数(请求参数需要按 ASCII 字符排序依次拼接),明文加签规则:见章节“API签名”。v2版本,明文拼接规则和明文加签规则参见“API签名”。 |
公共响应参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
req_id |
String |
是 |
变长 32 位 |
同请求 |
resp_code |
String |
是 |
定长 5 位 |
返回码 |
resp_msg |
String |
是 |
变长 256 位 |
返回描述 |
HTTP 状态码
所有接口均符合 RESTful 规范,返回 HTTP 状态码,为减少冗余,单独提出。
状态码 |
描述 |
状态说明 |
---|---|---|
200 |
OK |
服务器成功返回用户请求的数据,通常出现在GET 操作中 |
201 |
Created |
服务器成功创建用户请求的纪录,通常出现在POST/PUT/PATCH 操作中 |
400 |
Bad Request |
用户发起的请求有错误,参数不符合API 规则 |
401 |
Unauthorized Access |
用户没有权限,通常出现在登录失败或者app_token 错误的情况 |
403 |
Forbidden |
用户登录成功,但是没有该操作的权限 |
404 |
Not Found |
用户发出的请求不存在,该响应可能是请求的记录或者请求的页面不存在,具体参考详细的错误码 |
5xx |
Internal Server Error |
服务器内部错误,出现该错误说明Jarvis 服务目前不可用 |
返回码定义
JFetch 返回码为 5 位数字,前 3 位表示接口编号,后 2 位表示返回信息。
1xx~8xx 起始的错误码表示仅该接口出现的返回信息,后 2 位为 00-09 时表示成功返回,为 10-99 时表示失败返回。
9xx 起始的返回码表示所有接口都可能出现的公共返回信息,90000~90009 表示成功返回,90010~99999 表示错误返回。
返回码 |
描述 |
状态说明 |
---|---|---|
90000 |
Success |
成功 |
90092 |
Prod Forbid |
生产环境禁止使用该接口 |
90099 |
System Error |
系统内部错误,服务不可用 |
90100 |
Invalid parameters |
请求信息参数不符合规则 |
90201 |
Invalid User Information |
请求用户信息无效 |
90301 |
Authentication Denied |
请求信息权限认证未通过 |
90302 |
Signature Failed |
请求信息签名验证未通过 |
90303 |
Access White List Denied |
请求信息白名单验证未通过 |
通用同步数据查询¶
调用 JFetch 通用同步数据查询接口,可通过指定数据源获取满足查询条件的目标数据集合。
HTTP Request
v1.0.0
GET http://192.168.16.210:7099/fetch/data/v1.0.0/query
v2
GET http://192.168.16.210:7099/fetch/data/v2/query
请求参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
query_lang |
String |
否 |
定长 2 位 |
请求方所采用的查询语言,需注意不同的查询语言,其语法规范会有不同。01-Impala SQL;02-Vertica SQL;03-MySQL SQL;04-Oracle SQL;默认值为03 |
query_sql |
String |
是 |
不定长 |
需要查询引擎执行的查询语句的 Base64 编码,不支持的 SQL 关键字列表:CREATE,DROP,ALTER,TRUNCATE,DELETE,MERGE,INSERT,UPDATE,V$,UTL_HTTP,EXEC ( 不区分大小写 ) 。编码后需进行urlencode编码,防止加号、等于号等出现歧异 |
db_type |
String |
否 |
不定长 |
数据库类型,默认为 MySQL,可取值范围:MySQL,Vertica,Hive,Oracle ( 不区分大小写 ) |
ds_key |
String |
是 |
定长 40 位 |
通过数据源注册接口获取的数据源实例标识,以 “dbs-” 起始的字符串 |
result_form |
String |
否 |
定长 2 位 |
返回结果集的格式,默认取值为 01。01-JSON;02-CSV |
result_flat |
String |
否 |
定长 2 位 |
返回结果集 result_set 采用的处理算法,默认不做任何处理。01-zLib 压缩 ( 压缩结果已执行 Base64 编码变为可见字符 ) ;02-Base64 编码 |
max_rows |
String |
否 |
变长 8 位 |
同步返回最大行数。只在v2版本有效。取值范围在1到50000000之间。默认为1000行。 |
响应参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
result_form |
String |
否 |
定长 2 位 |
返回结果集的格式,默认取值为 01。01-JSON;02-CSV |
result_flat |
String |
否 |
定长 2 位 |
返回结果集 result_set 采用的处理算法,默认不做任何处理。01-zLib 压缩 ( 压缩结果已执行 Base64 编码变为可见字符 ) ;02-Base64 编码 |
result_num |
Integer |
是 |
不定长 |
满足条件的查询结果数目 |
result_set |
String |
是 |
不定长 |
满足条件的查询结果集合 |
expend_time |
Integer |
是 |
不定长 |
查询耗时,以毫秒为单位 |
失败响应
返回码 |
描述 |
状态说明 |
---|---|---|
10098 |
存在异常结果数据,系统处理发生错误 |
存在异常结果数据,系统处理发生错误 |
10097 |
数据源不存在或拒绝接受客户端连接请求 |
数据源不存在或拒绝接受客户端连接请求 |
10096 |
存在 SQL 语法错误,请检查 SQL 指令是否符合相关规范 |
存在 SQL 语法错误,请检查 SQL 指令是否符合相关规范 |
10095 |
无法解析的查询指令,请检查 SQL 指令是否符合相关规范 |
无法解析的查询指令,请检查 SQL 指令是否符合相关规范 |
调用示例
curl -H env:test \
-X GET \
-F "req_id=201709150000002" \
-F "app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2" \
-F "signature=7c44e4d13d4687d3719f5436a497391586abc6cd1dc34bed4996bfb0f58f5643" \
-F "ds_key=dbs-51045419-3c95-4074-bc49-083c7fb8570c" \
-F "query_language=02" \
-F "result_format=01" \
-F "query_sql=U0VMRUNUICogRlJPTSB0YWJfc3lzX2NmZyB0IG9yZGVyIGJ5IHQuY29uZmlnX2lkIGRlc2M7" \
-F "query_lang=01" \
-F "result_flater=02" \
http://192.168.16.210:7099/fetch/data/v1.0.0/query
curl GET http://192.168.16.210:7099/fetch/data/v1.0.0/query?req_id=201709150000002\&app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2\&signature=7c44e4d13d4687d3719f5436a497391586abc6cd1dc34bed4996bfb0f58f5643\&query_language=02\&ds_key=dbs-51045419-3c95-4074-bc49-083c7fb8570c\&result_format=01\&query_sql=U0VMRUNUICogRlJPTSB0YWJfc3lzX2NmZyB0IG9yZGVyIGJ5IHQuY29uZmlnX2lkIGRlc2M7\&query_lang=01\&result_flater=02 -H env:test
成功响应
HTTP Status Code:200
{
"req_id":"201709150000002",
"resp_code":"90100",
"result_flater":"02",
"result_format":"01",
"result_num":3,
"resp_msg":"成功",
"result_set":"W3siY29uZmlnX3ZhbHVlIjoiMTI3LjAuMC4xfDE3Mi4zMS4xOS4yMyIsImNvbmZpZ19yZW1hcmsiOiJJUOWcsOWdgOeZveWQjeWNlSIsImNvbmZpZ19pZCI6IjMiLCJjcnRfZGF0ZXRpbWUiOiIyMDE3LTEwLTE2IDA0OjM2OjEyIiwiY29uZmlnX2tleSI6ImFwcC5hY2Nlc3MuaXBzIiwic3lzX25hbWUiOiJhcHAtZjI4MDQ3YTktMGZlYy00NDU3LWE4YzYtZGZlMTQ2NWNkMWEyIiwiY29uZmlnX3R5cGUiOiJhd2wiLCJ1cGRfZGF0ZXRpbWUiOiIyMDE3LTEwLTE2IDA0OjM3OjE2IiwiY29uZmlnX3ZlcnNpb24iOiJ2MS4wLjAifSx7ImNvbmZpZ192YWx1ZSI6InNrZXktM2Y2Y2M4ODMtODQ5NS00MThkLTgxMDktZjFhNGZjODUyMTZmIiwiY29uZmlnX3JlbWFyayI6IuetvuWQjeS9v+eUqCIsImNvbmZpZ19pZCI6IjIiLCJjcnRfZGF0ZXRpbWUiOiIyMDE3LTEwLTE2IDA0OjM1OjQxIiwiY29uZmlnX2tleSI6ImFwcC5rZXkiLCJzeXNfbmFtZSI6ImFwcC1mMjgwNDdhOS0wZmVjLTQ0NTctYThjNi1kZmUxNDY1Y2QxYTIiLCJjb25maWdfdHlwZSI6ImF3bCIsInVwZF9kYXRldGltZSI6IjIwMTctMTAtMTcgMDg6MTQ6MDIiLCJjb25maWdfdmVyc2lvbiI6InYxLjAuMCJ9LHsiY29uZmlnX3ZhbHVlIjoiamZldGNoX3Rlc3QiLCJjb25maWdfcmVtYXJrIjoi5rWL6K+VQi1VU0VSIiwiY29uZmlnX2lkIjoiMSIsImNydF9kYXRldGltZSI6IjIwMTctMTAtMTYgMDQ6MzQ6NDIiLCJjb25maWdfa2V5IjoiYnVzZXIubmFtZSIsInN5c19uYW1lIjoiYXBwLWYyODA0N2E5LTBmZWMtNDQ1Ny1hOGM2LWRmZTE0NjVjZDFhMiIsImNvbmZpZ190eXBlIjoic3lzIiwidXBkX2RhdGV0aW1lIjoiMjAxNy0xMC0xNiAwNDozNDo0MiIsImNvbmZpZ192ZXJzaW9uIjoidjEuMC4wIn1d",
"expend_time":426
}
失败响应
HTTP Status Code:401
{
"req_id":"201709150000002",
"resp_code":"90201",
"resp_message":"请求用户信息无效"
}
通用缓存数据查询¶
调用 JFetch 通用缓存数据查询接口,可高效快速获取Redis缓存数据库(单机版)指定Key值数据集合。
HTTP Request
v1.0.0
GET http://192.168.16.210:7099/fetch/data/v1.0.0/mapping
v2
GET http://192.168.16.210:7099/fetch/data/v2/mapping
请求参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
ds_key |
String |
是 |
定长 40 位 |
通过数据源注册接口获取的数据源实例标识,以 “dbs-” 起始的字符串 |
db_type |
String |
否 |
不定长 |
数据库类型,默认为 Redis,可取值范围:Redis;Memcached( 不区分大小写 ) |
cache_type |
String |
是 |
定长2位 |
缓存数据类型,可取值范围:01-String 类型;02-Hash 类型。注:Memcached不支持Hash类型 |
cache_key |
String |
是 |
不定长 |
缓存关键字,支持多个关键字 ( 不超过 20 个 ),多个关键字之间使用英文逗号分隔并使用Base64编码,举例:String类型为 key01,key02 ;Hash类型为 ( Hash 类型Key值组织形式为{key}#{field}形式,其中 field 域为空时查询该 Key 所有 field 缓存值)hashMapKey#mapKey1,hashMapKey#mapKeyx 或 hashMapKey# |
result_format |
String |
否 |
定长 2 位 |
返回结果集的格式,默认取值为 01;01-JSON |
result_flater |
String |
否 |
定长 2 位 |
返回结果集 result_set 采用的处理算法,默认不做任何处理;01-zLib 压缩 ( 压缩结果已执行 Base64 编码变为可见字符 ) ;02-Base64编码 |
响应参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
result_format |
String |
否 |
定长 2 位 |
返回结果集的格式,默认取值为 01;01-JSON |
result_flater |
String |
否 |
定长 2 位 |
返回结果集 result_set 采用的处理算法,默认不做任何处理。 01-zLib 压缩 ( 压缩结果已执行 Base64 编码变为可见字符 ) ;02-Base64 编码 |
result_num |
Integer |
是 |
不定长 |
满足条件的查询结果数目 |
result_set |
String |
是 |
不定长 |
满足条件的查询结果集合,举例如下:String 类型为{“key01”:“value01”,“key02”:“value02”};Hash 类型为{“hashMapKey#mapKey1”:“mapValue1”,“hashMapKey#mapKeyx”:“mapValuex”}或 {“hashMapKey#mapKey2”:“mapValue2”,“hashMapKey#mapKey1”:“mapValue1”,“hashMapKey#mapKey0”:“mapValue0”,“hashMapKey#mapKey6”:“mapValue6”,“hashMapKey#mapKey5”:“mapValue5”,“hashMapKey#mapKey4”:“mapValue4”,“hashMapKey#mapKey3”:“mapValue3”,“hashMapKey#mapKey9”:“mapValue9”,“hashMapKey#mapKey8”:“mapValue8”,“hashMapKey#mapKeyx”:“mapValuex”,“hashMapKey#mapKey7”:“mapValue7”} |
expend_time |
Integer |
是 |
不定长 |
查询耗时,以毫秒为单位 |
失败响应
返回码 |
描述 |
状态说明 |
---|---|---|
10198 |
缓存指令个数超过系统限制,请修改后重新提交 |
缓存指令个数超过系统限制,请修改后重新提交 |
10197 |
缓存服务不存在或不可用,请检查网络或配置信息后再试 |
缓存服务不存在或不可用,请检查网络或配置信息后再试 |
10196 |
缓存指令无法执行,请检查指令是否符合相关协议或规范 |
缓存指令无法执行,请检查指令是否符合相关协议或规范 |
10195 |
缓存指令无法解析,请检查指令是否符合相关协议或规范 |
缓存指令无法解析,请检查指令是否符合相关协议或规范 |
调用示例
curl -H env:test
-X GET
-F req_id=201709150000002000
-F app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2
-F signature=7c44e4d13d4687d3719f5436a497391586abc6cd1dc34bed4996bfb0f58f5643
-F ds_key=dbs-51045419-3c95-4074-bc49-083c7fb85703
-F result_format=01
-F cache_type=01
-F db_type=Redis
-F cache_key=a2V5MDEsa2V5MDI=
http://192.168.16.210:7099/fetch/data/v1.0.0/mapping
curl GET http://192.168.16.210:7099/fetch/data/v1.0.0/mapping?req_id=201709150000002000\&app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2\&signature=7c44e4d13d4687d3719f5436a497391586abc6cd1dc34bed4996bfb0f58f5643\&ds_key=dbs-51045419-3c95-4074-bc49-083c7fb85703\&result_format=01\&cache_type=01\&db_type=Redis\&cache_key=a2V5MDEsa2V5MDI= -H env:test
成功响应
HTTP Status Code:200
{
"req_id":"201709150000002000",
"resp_code":"90000",
"result_flater":"",
"result_format":"01",
"result_num":2,
"resp_msg":"成功",
"result_set":"{\"key01\":\"value01\",\"key02\":\"value02\"}",
"expend_time":7
}
失败响应
HTTP Status Code:401
{
"req_id":"201709150000002000",
"resp_code":"90201",
"resp_message":"请求用户信息无效"
}
通用异步任务提交¶
调用 JFetch 通用异步任务提交接口,可通过指定任务类型,来执行不同的异步查询。
HTTP Request
v1.0.0
POST http://192.168.16.210:7099/fetch/data/v1.0.0/queryAsync
v2
POST http://192.168.16.210:7099/fetch/data/v2/queryAsync
请求参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
ds_key |
String |
是 |
定长 40 位 |
通过数据源注册接口获取的数据源实例标识,以“dbs-”起始的字符串 |
mer_ret_url |
String |
是 |
不定长 |
回调URL,异步任务执行完成,将会调用该URL,用Base64编码 |
task_param |
String |
是 |
不定长 |
任务参数,使用json格式并且进行Base64编码。应当包含一个key为“query_sql”、值为SQL字符串的属性。SQL长度不应超过4000 |
响应参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
task_id |
String |
是 |
变长 40 位 |
任务ID,该任务的唯一ID |
调用示例
curl -X POST \
-F "req_id=001" \
-F "app_token=app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc" \
-F "signature=74303f2f20c2169a422ab60435db165718a65c64262ca6e503e8c7150ea40697" \
-F "ds_key=dbs-b0a6664a-d201-4ad0-b9f9-274c2635eb49" \
-F "task_param=eydxdWVyeV9zcWwnOidTRUxFQ1QgKiBmcm9tIGRtX3JjLnN1cGF5X2dhX21lcl9zY29yZSd9" \
-F "mer_ret_url=aHR0cDovLzE3Mi4zMS4xOS41ODo4MDkwL2JnL3F1ZXJ5QXN5bmNDYWxsYmFjaw==" \
http://192.168.16.210:7099/fetch/data/v1.0.0/queryAsync
curl -X POST -d 'req_id=001&mer_ret_url=aHR0cDovLzE3Mi4zMS4xOS41ODo4MDkwL2JnL3F1ZXJ5QXN5bmNDYWxsYmFjaw==&app_token=app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc&signature=74303f2f20c2169a422ab60435db165718a65c64262ca6e503e8c7150ea40697&ds_key=dbs-b0a6664a-d201-4ad0-b9f9-274c2635eb49&task_param=eydxdWVyeV9zcWwnOidTRUxFQ1QgKiBmcm9tIGRtX3JjLnN1cGF5X2dhX21lcl9zY29yZSd9' http://192.168.16.210:7099/fetch/data/v1.0.0/queryAsync
成功响应
HTTP Status Code:200
{
"req_id":"001",
"resp_code":"90000",
"resp_msg":"成功",
"task_id":"task-99430690-52e2-4463-ba21-561bda669e70"
}
失败响应
HTTP Status Code:401
{
"req_id":"1001",
"resp_code":"90201",
"resp_message":"请求用户信息无效"
}
通用异步任务查询¶
调用 JFetch 通用异步任务查询接口,可查询异步任务的详细信息。
HTTP Request
v1.0.0
GET http://192.168.16.210:7099/fetch/data/v1.0.0/queryTask
v2
GET http://192.168.16.210:7099/fetch/data/v2/queryTask
请求参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
task_id |
String |
是 |
变长 40 位 |
任务ID,该任务的唯一ID |
响应参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
task_id |
String |
是 |
变长 40 位 |
任务ID,该任务的唯一ID |
app_token |
String |
是 |
变长 40 位 |
参数中的app_token |
task_type |
String |
是 |
变长 24 位 |
任务类型,Vertica异步查询为AsyncVertica |
task_req_id |
String |
是 |
变长 32 位 |
任务提交时的请求ID |
task_app_token |
String |
是 |
变长 40 位 |
任务提交时的app_token |
task_state |
String |
是 |
定长 1 位 |
任务状态“I”:任务初期化“S”:任务成功“F”:任务失败 |
task_param |
String |
是 |
不定长 |
任务提交时的参数 |
task_sync_result |
String |
是 |
不定长 |
任务同步返回结果,json格式 |
task_async_result |
String |
否 |
不定长 |
任务异步返回结果,json格式 |
ret_url |
String |
是 |
不定长 |
任务回调URL |
ret_param |
String |
否 |
不定长 |
任务回调参数 |
crt_date |
String |
是 |
不定长 |
任务创建日期 |
crt_time |
String |
是 |
不定长 |
任务创建时间 |
upd_date |
String |
是 |
不定长 |
任务更新日期 |
upd_time |
String |
是 |
不定长 |
任务更新时间 |
失败响应
返回码 |
描述 |
状态说明 |
---|---|---|
10098 |
异步任务不存在 |
使用该任务ID,无法查询到相应的异步任务 |
10099 |
只能查询本APP的任务 |
查询的任务不是本APP_TOKEN提交的 |
调用示例
curl -X GET \
-F "req_id=001" \
-F "app_token=app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc" \
-F "signature=ffa1974beb0428950281f171d9023178bd4b205ee688207a64c92bebb8eadcb" \
-F "task_id=task-99430690-52e2-4463-ba21-561bda669e70" \
http://192.168.16.210:7099/fetch/data/v1.0.0/queryTask
curl GET http://192.168.16.210:7099/fetch/data/v1.0.0/queryTask?task_id=task-99430690-52e2-4463-ba21-561bda669e70\&app_token=app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc\&req_id=001\&signature=ffa1974beb0428950281f171d9023178bd4b205ee688207a64c92bebb8eadcb
成功响应
HTTP Status Code:200
{
"app_token":"app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc",
"task_async_result":"{\"req_id\":\"001\",\"resp_code\":\"90000\",\"task_state\":\"S\",\"task_id\":\"task-99430690-52e2-4463-ba21-561bda669e70\",\"resp_msg\":\"成功\",\"async_task_result\":\"eyJmaWxlX3BhdGgiOiIvYXBwL3NjcmlwdHMvamZldGNoX2ZpbGUvMjAxODA2MTkvMTUyOTQxNDU3OTA2ZjE3ZThiLTJkMDgtNDZhMS04MTJkLTVlYjBiOWQzY2UyNiIsImlwIjoiMTAuOTYuNTQuMTI1In0=\"}",
"task_app_token":"app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc",
"task_state":"S",
"task_id":"task-99430690-52e2-4463-ba21-561bda669e70",
"req_id":"001",
"upd_date":"20180619",
"resp_code":"90000",
"task_param":"{\"querySql\":\"SELECT * from dm_rc.supay_ga_mer_score\"}",
"ret_param":"?resp_code=90000&resp_msg=%E6%88%90%E5%8A%9F&req_id=001&task_id=task-99430690-52e2-4463-ba21-561bda669e70&task_state=S&async_task_result=eyJmaWxlX3BhdGgiOiIvYXBwL3NjcmlwdHMvamZldGNoX2ZpbGUvMjAxODA2MTkvMTUyOTQxNDU3OTA2ZjE3ZThiLTJkMDgtNDZhMS04MTJkLTVlYjBiOWQzY2UyNiIsImlwIjoiMTAuOTYuNTQuMTI1In0=",
"crt_time":"212254",
"upd_time":"212343",
"task_req_id":"001",
"task_type":"AsyncVertica",
"resp_msg":"成功",
"task_sync_result":"{\"req_id\":\"001\",\"resp_code\":\"90000\",\"task_id\":\"task-99430690-52e2-4463-ba21-561bda669e70\",\"resp_msg\":\"成功\"}",
"ret_url":"http://172.31.31.158:9999/bg/queryAsyncCallback",
"crt_date":"20180619"
}
失败响应
HTTP Status Code:401
{
"req_id":"001",
"resp_code":"90201",
"resp_message":"请求用户信息无效"
}
异步回调请求¶
在异步任务执行完成之后, JFetch 会发起异步回调请求,将异步任务结果发送给调用方。请求URL为提交任务时的mer_ret_url参数。
请求参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
req_id |
String |
是 |
定长 40 位 |
任务提交时的请求ID |
resp_code |
String |
是 |
不定长 |
异步任务执行结果,90000为正确 |
task_state |
String |
是 |
不定长 |
任务状态 |
task_id |
String |
是 |
不定长 |
任务ID,该任务的唯一ID |
resp_msg |
String |
是 |
不定长 |
异步任务执行结果,“成功”表示正确 |
async_task_result |
String |
是 |
不定长 |
异步任务结果,使用Base64解码。Vertica异步查询的话,包含结果文件所在机器的IP和文件路径 |
调用示例
curl -X GET \
-F "req_id=001" \
-F "resp_code=90000" \
-F "task_state=S" \
-F "task_id=task-dd904e5f-64d1-4e09-85f9-e224c09ea3f5" \
-F "resp_msg=成功" \
-F "async_task_result=eyJmaWxlX3BhdGgiOiIvYXBwL3NjcmlwdHMvamZldGNoX2ZpbGUvMjAxODA2MTkvMTUyOTQxNTU2NzQ4MzE4YzEyLTk5YTktNGVlYS05MzIzLWVkZWZmNjA1MTBkZCIsImlwIjoiMTAuOTYuQuMTI1In0=" \
http://172.31.19.58:8090/bg/queryAsyncCallback
curl GET http://172.31.19.58:8090/bg/queryAsyncCallback?task_id=task-dd904e5f-64d1-4e09-85f9-e224c09ea3f5\&resp_code=90000\&req_id=001\&task_state=S\&resp_msg=成功\&async_task_result=eyJmaWxlX3BhdGgiOiIvYXBwL3NjcmlwdHMvamZldGNoX2ZpbGUvMjAxODA2MTkvMTUyOTQxNTU2NzQ4MzE4YzEyLTk5YTktNGVlYS05MzIzLWVkZWZmNjA1MTBkZCIsImlwIjoiMTAuOTYuQuMTI1In0=
通用数据执行¶
调用 JFetch 通用数据执行接口,可执行插入、更新、删除SQL。
HTTP Request
v1.1.0
POST http://192.168.16.210:7099/fetch/data/v1.1.0/execute
v2
POST http://192.168.16.210:7099/fetch/data/v2/execute
请求参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
query_lang |
String |
否 |
定长 2 位 |
请求方所采用的查询语言,需注意不同的查询语言,其语法规范会有不同。01-Impala SQL;02-Vertica SQL;03-MySQL SQL;04-Oracle SQL;默认值为03 |
query_sql |
String |
是 |
不定长 |
需要查询引擎执行的查询语句的 Base64 编码,不支持的 SQL 关键字列表:SELECT,DROP,ALTER,MERGE,TRUNCATE,WITH,INSERT,V$,UTL_HTTP,EXEC ( 不区分大小写 ),只支持INSERT,UPDATE,DELETE(不区分大小写) |
db_type |
String |
否 |
定长 2 位 |
数据库类型,默认为 MySQL,可取值范围:MySQL,Vertica,Hive,Oracle ( 不区分大小写 ) |
ds_key |
String |
是 |
定长 40 位 |
通过数据源注册接口获取的数据源实例标识,以 “dbs-” 起始的字符串 |
响应参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
expend_time |
Integer |
是 |
查询耗时,以毫秒为单位 |
调用示例
curl -X POST \
-F "req_id=redis_test1" \
-F "ds_key=dbs-86ffaa1b-8a84-4540-82ab-dcb9f56eeb45" \
-F "app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2" \
-F "signature=b1400d11f797a9364e9b04f4797c92a0490f0212cb61ebde47be331840397eef" \
-F "query_lang=04" \
-F "query_sql=VVBEQVRFIG11c2VyZGIucDJwX2NvbmZfaW5mbyB0IFNFVCB0LklOVkVTVF9CT1JST1dfU0VQRVJBVEVfU1dJVENIID0gJ1knIFdIRVJFIHQuY3VzdF9pZCA9ICc2MDAwMDYwMDAwODg1NzQyJzs=" \
-F "db_type=Oracle" \
http://192.168.16.210:7099/fetch/data/v1.1.0/execute
成功响应
HTTP Status Code:200
{
"req_id":"redis_test1",
"resp_code":"90000",
"resp_msg":"成功",
"expend_time":270
}
失败响应
HTTP Status Code:500
{
"req_id":"redis_test1",
"resp_code":"10097",
"resp_msg":"数据源不存在或拒绝接受客户端连接请求",
"expend_time":0
}
通用缓存执行¶
调用 JFetch 通用缓存执行接口,可执行设置、删除缓存。
HTTP Request
v1.1.0
POST http://192.168.16.210:7099/fetch/data/v1.1.0/cache
v2
POST http://192.168.16.210:7099/fetch/data/v2/cache
请求参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
cache_type |
String |
是 |
定长 2 位 |
缓存数据类型,可取值范围:01-String 类型;02-Hash 类型。注:memcached不支持Hash类型 |
cache_key |
String |
是 |
不定长 |
缓存关键字,支持多个关键字(不超过20个),多个关键字之间使用英文逗号分隔并使用Base64编码,举例: String类型 : key01,key02;Hash类型 : (Hash类型Key值组织形式为{key}#{field}形式,其中field域为空时查询该Key所有field缓存值)hashMapKey#mapKey1,hashMapKey#mapKeyx 或 hashMapKey#。注:memcached不支持批量操作 |
cache_value |
String |
是 |
不定长 |
缓存值,数量应当和cache_key相同,多个值之间使用英文逗号分隔开并使用Base64编码,举例 : value01,value02 |
db_type |
String |
否 |
定长 2 位 |
数据库类型,默认为 Redis,可取值范围:Redis ( 不区分大小写 )、Memcached(不区分大小写) |
ds_key |
String |
是 |
定长 40 位 |
通过数据源注册接口获取的数据源实例标识,以 “dbs-” 起始的字符串 |
execute_type |
String |
是 |
定长 2 位 |
执行类型,可取值范围:01-SET或HSET;设置、02-DEL,删除 |
expire_time |
String |
是 |
不定长 |
过期时间。纯数字,不得超过8位,以秒为单位,不传或传0,表示不设置超时时间 |
响应参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
expend_time |
Integer |
是 |
查询耗时,以毫秒为单位 |
调用示例
curl -X POST \
-F "req_id=redis_test1" \
-F "ds_key=dbs-aab3388f-b354-4ddf-a189-07c4cf1c7295" \
-F "app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2" \
-F "signature=c8b0932a6993a022472025f13681e19f1572dd106d798268085953899a15fa56" \
-F "db_type=Redis" \
-F "cache_type=01" \
-F "cache_key=YWFh" \
-F "cache_value=MTEx" \
-F "execute_type=01" \
http://192.168.16.210:7099/fetch/data/v1.1.0/cache
成功响应
HTTP Status Code:200
{
"req_id":"redis_test1",
"resp_code":"90000",
"resp_msg":"成功",
"expend_time":270
}
失败响应
HTTP Status Code:500
{
'req_id': 'redis_test1',
'expend_time': 0,
'resp_code': '90099',
'resp_msg': '系统异常,请稍后再试'
}