起因
前段时间写了个递归查找hive table trigger的API。当时的逻辑是
- 如果是table 是实体table,返回它的trigger。如果trigger 不存在,Log.error(table),一般是最新的table,oozieviz 没有重新run。
- 如果是table 是view,从viewsql里面找到所有的上游table,然后把上游table的triggers给这个view
当时时间比较匆忙,就简单写了个api,通过get请求携带参数: ?tbl=xx&tbl=xx&tbl=xx. 如果table太多的话,就不能发get请求了。get请求最多允许2048个字节。于是想到了post请求。
方法
post 请求不太好用chrome 发出去,想到了postman。主要的问题有两个。
- 每次后端起来都要login,于是在postman里面先发个post请求,在Body那块勾选form data,然后通过chrome看看到底发了哪些参数过去,照葫芦画瓢填写form data就可以
- 发送list of tables. 还是在Body 那块,选择raw,json(application/json).
1 2 3
| { "tbl":["xx","xx","xx"] }
|
后端的get请求和post请求解析参数的方式是不一样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| locahost:8081/API/PTP/oozieviz/tablesTriggers?tbl=xx&tbl=xx&tbl=xx @RequestMapping(value="/tables/triggers", method=RequestMethod.GET) @ResponseBody public TablePTPDetailBody getTablesTriggers( @RequestParam(required=true,value="tbl")List<String>tblNames ) locahost:8081/API/PTP/oozieviz/tablesTriggers @RequestMapping(value="/tables/triggers", method=RequestMethod.POST) @ResponseBody public TablePTPDetailBody getTablesTriggers( @RequestBody Map<String,Object>payload ){ List<String>tables = (List<String>)payload.get("tbl); }
|