数据湖探索 DLI-使用SDK提交SQL作业:查询指定作业的结果
查询指定作业的结果
- 使用说明
com.huawei.dli.sdk.SQLJob#getResultSet(),OBS读数据相关API调用,DLI提供了一个OBS csv reader实现,可依据业务需求自定义实现。
使用本方法的前提是需要开启结果写作业桶特性。可通过查询作业状态API响应体中的 result_path 来判断是否已开启作业结果写作业桶特性。待作业运行结束后,如果result_path 以 obs:// 开头,则已开启作业结果写作业桶特性,否则未开启。
- 相关链接
- 示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
private static void queryDataByJobId(DLIInfo dliInfo, String jobId) throws DLIException { // 检查该jobId对应的作业是否已运行结束,如未运行结束,则等待运行结束 SQLJob sqlJob = new SQLJob(dliInfo, null); sqlJob.setJobId(jobId); checkRunning(V3ClientUtils.getDliClient(dliInfo), jobId); // 根据jobId,获取结果数据的schema、结果数据在用户作业桶中的存储路径 ShowSqlJobStatusResponse resp = V3ClientUtils.getDliClient(dliInfo) .showSqlJobStatus(new ShowSqlJobStatusRequest().withJobId(jobId)); sqlJob.setJobStatus(resp.getStatus().getValue()); sqlJob.setResultSchema(SchemaUtils.getSchemaFromJson(resp.getDetail())); sqlJob.setResultPath(resp.getResultPath()); sqlJob.setResultCount(resp.getResultCount() != null ? resp.getResultCount() : 0); ResultSet resultSet = null; try { // 获取该jobId对应的查询结果, 并返回结果迭代器。 resultSet = sqlJob.getResultSet(); handleResult(resultSet); } finally { if (resultSet != null) { resultSet.close(); } } }