福哥答案2020-08-08:
参考答案:
A.通过shell 或python 等调用api,结果先暂存本地,最后将本地文件上传到 Hive 中。
B.通过 datax 的 httpReader 和 hdfsWriter 插件,从而获取所需的数据。
C.比较理想的回答,是在计算引擎的 UDF 中调用查询 api,执行UDF 的查询结果存储到对应的表中。一方面,不需要同步任务的导出导入;另一方面,计算引擎的分布式框架天生提供了分布式、容错、并发等特性。
[知乎答案:](https://www.zhihu.com/question/412788310)
那感觉最好用 Hive 的 UDF(User Define Function)功能,将调用api写入UDF的逻辑中。这样能利用Hive的分布式能力。例如:
定义UDF:
package test; public class GetWeatherDataUDF extends UDF { public String evaluate(String param) { return getFromApi(param);//调用api } }
之后打包发布到Hive,定义这个UDF:
CREATE TEMPORARY FUNCTION GetWeather AS 'test.GetWeatherDataUDF';
最后就可以使用这个函数了,例如某个表的一列就是所有的参数:
select GetWeather(param) from one_table;
***
[评论](https://user.qzone.qq.com/3182319461/blog/1596842877)