数据湖探索 DLI-使用SDK提交SQL作业:查询指定作业的结果

时间:2025-06-11 15:15:00

查询指定作业的结果

  • 使用说明

    com.huawei.dli.sdk.SQLJob#getResultSet(),OBS读数据相关API调用,DLI提供了一个OBS csv reader实现,可依据业务需求自定义实现。

    使用本方法的前提是需要开启结果写作业桶特性。可通过查询作业状态API响应体中的 result_path 来判断是否已开启作业结果写作业桶特性。待作业运行结束后,如果result_path 以 obs:// 开头,则已开启作业结果写作业桶特性,否则未开启。

  • 相关链接

    SQL语法参考基本语句

    OBS文档

    查询作业状态API

  • 示例代码
     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();
                }
            }
        }
    
support.huaweicloud.com/sdkreference-dli/dli_04_0084.html