起因

前段时间写了个递归查找hive table trigger的API。当时的逻辑是

  1. 如果是table 是实体table,返回它的trigger。如果trigger 不存在,Log.error(table),一般是最新的table,oozieviz 没有重新run。
  2. 如果是table 是view,从viewsql里面找到所有的上游table,然后把上游table的triggers给这个view

当时时间比较匆忙,就简单写了个api,通过get请求携带参数: ?tbl=xx&tbl=xx&tbl=xx. 如果table太多的话,就不能发get请求了。get请求最多允许2048个字节。于是想到了post请求。

方法

post 请求不太好用chrome 发出去,想到了postman。主要的问题有两个。

  1. 每次后端起来都要login,于是在postman里面先发个post请求,在Body那块勾选form data,然后通过chrome看看到底发了哪些参数过去,照葫芦画瓢填写form data就可以
  2. 发送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);
}