
# 获取SQL节点的输出结果值
当您在数据开发模块进行作业开发，需要获取SQL节点的输出结果值，并将结果应用于后续作业节点或判断时，可参考本教程获取SQL节点的输出结果。
#### 场景说明
使用EL表达式**#{Job.getNodeOutput("前一节点名")}** 获取的前一节点的输出结果时，输出结果为二维数组形式 ，形如\[\["Dean",...,"08"\],...,\["Smith",...,"53"\]\]所示。为获取其中的值，本案例提供了如[表1]所示的两个常见方法示例。
 表1获取结果值常见方法 
| 方法                                                                                                                                   | 关键配置                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 适用场景要求                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|:---|:---|:---|
| [通过StringUtil提取输出结果值]                                   | 当SQL节点的输出结果只有一个字段，形如\[\["11"\]\]所示时，可以通过StringUtil内嵌对象EL表达式分割二维数组，获取前一节点输出的字段值： #{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput("***前一节点名***"),"\]")\[0\],"\[")\[0\],"\\\\"")\[0\]} 说明： 使用**Subjob算子** 时，如果要把前一个SQL节点的执行结果传给子作业时，则子作业参数的表达式应为：#{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput("***前一节点名*** "),"\]")\[0\],"\[")\[0\],"**\\**"")\[0\]}，否则会执行报错。 | 通过StringUtil提取输出结果值配置简单，但对适用场景有如下要求： - 前一SQL节点的输出结果只有一个字段，形如\[\["11"\]\]所示。  - 输出结果值数据类型为String，需要应用场景支持String数据类型。例如当需要使用IF条件判断输出结果值的数值大小时，不支持String类型，则不能使用本方法。                                                                                                                            |
| [通过For Each节点提取输出结果值]                                      | 通过For Each节点，循环获取数据集中二维数组的值： - For Each节点数据集：#{Job.getNodeOutput('***前一节点名***')}  - For Each节点子作业参数：#{Loop.current\[***索引***\]}                                                      | 通过For Each节点输出结果值适用场景更广泛，但需将作业拆分为主作业和子作业。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| [DataArts Studio的数据开发作业中Shell节点如何获取MRS Hive SQL节点执行的结果] | 通过四种方式，讲解在数据开发作业中Shell节点如何获取MRS Hive SQL节点执行的结果。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | - 使用参数传递  - 通过OBS中转  - 通过HDFS中转  - 通过数据库中转，使用JDBC连接查询结果表。   |
   
 #### 通过StringUtil提取输出结果值
**场景说明**
通过StringUtil内嵌对象EL表达式分割二维数组结果，获取前一节点输出的字段值，输出结果类型为String。
本例中，MRS Hive SQL节点返回单字段二维数组，Kafka Client节点发送的数据定义为StringUtil内嵌对象EL表达式，通过此表达式即可分割二维数组，获取MRS Hive SQL节点输出的字段值。
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
为便于查看最终获得的结果值，本例选择Kafka Client节点进行演示。在实际使用中，您可以根据您的业务需求选择后续节点类型，在节点任务中应用StringUtil内嵌对象EL表达式，即可获取前一节点返回的数据值。
图1作业样例   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001488389168.png)
其中，Kafka Client节点的关键配置为"发送数据"参数，取值如下：
```
#{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput("count95"),"]")[0],"[")[0],"\\"")[0]}
```
**配置方法**
1. 登录DataArts Studio控制台，找到所需要的DataArts Studio实例，单击实例卡片上的"进入控制台"，进入概览页面。
2. 选择"空间管理"页签，在工作空间列表中，找到所需要的工作空间，单击工作空间的"数据开发"，系统跳转至数据开发页面。
3. 构造原始表格student_score。新建临时Hive SQL脚本，选择Hive连接和数据库后，粘贴如下SQL语句并运行，运行成功后即可删除此脚本。 
   ```
   CREATE TABLE `student_score` (`name` String COMMENT '', `score` INT COMMENT '');
   INSERT INTO
       student_score
   VALUES
       ('ZHAO', '90'),
       ('QIAN', '88'),
       ('SUN', '93'),
       ('LI', '94'),
       ('ZHOU', '85'),
       ('WU', '79'),
       ('ZHENG', '87'),
       ('WANG', '97'),
       ('FENG', '83'),
       ('CHEN', '99');
   ```
   
   
4. 新建MRS Hive SQL节点调用的Hive SQL脚本。新建Hive SQL脚本，选择Hive连接和数据库后，粘贴如下SQL语句并提交版本，脚本命名为count95。
   
   ```
   --从student_score表中统计成绩在95分以上的人数--
   SELECT count(*) FROM student_score WHERE score> "95" ;
   ```
   
   
5. 在"作业开发"页面，新建数据开发作业。选择一个MRS Hive SQL节点和一个Kafka Client节点，选中连线图标![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001488398956.png)并拖动，编排如[图1]所示的作业。
6. 配置MRS Hive SQL节点参数。SQL脚本选择[4]中提交的脚本count95，选择Hive连接和数据库。
   
   图2配置MRS Hive SQL节点参数   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001488871648.png "点击放大")
   
   
   
7. 配置Kafka Client节点参数。发送数据定义为：#{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput("count95"),"\]")\[0\],"\[")\[0\],"\\\\"")\[0\]}，选择Kafka连接和Topic名称。 
   图3配置Kafka Client节点参数   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001488711796.png "点击放大")
   
   
   
8. 作业节点配置完成后，选择测试运行。待作业测试运行成功后，在Kafka Client节点上右键查看日志，可以发现MRS Hive SQL节点返回的二维数组**\[\["2"\]\]** 已被清洗为**2** 。
   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   您可以将Kafka Client节点中的发送数据定义为**#{Job.getNodeOutput("count95")}** ，然后作业运行后查看Kafka Client节点日志，则可以验证MRS Hive SQL节点返回的结果为二维数组**\[\["2"\]\]**。
   图4查看Kafka Client节点日志   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001539794093.png "点击放大")
   
   
   
 
 #### 通过For Each节点提取输出结果值
**场景说明**
结合For Each节点及其支持的Loop内嵌对象EL表达式#{Loop.current\[0\]}，循环获取前一节点输出的结果值。
本例中，MRS Hive SQL节点返回多字段的二维数组，选择For Each节点和EL表达式**#{Loop.current\[\]}** ，再通过For Each循环调用Kafka Client节点子作业，Kafka Client节点发送的数据也定义为#{Loop.current\[\]}，通过此配置即可获取MRS Hive SQL节点输出的结果值。
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
为便于查看最终获得的结果值，本例中For Each节点子作业选择Kafka Client节点进行演示。在实际使用中，您可以根据您的业务需求选择子作业节点类型，在节点任务中应用Loop内嵌对象EL表达式，即可获取For Each前一节点返回的结果值。
For Each节点主作业编排如[图5]所示。其中，For Each节点的关键配置如下：
- 数据集：数据集就是HIVE SQL节点的Select语句的执行结果。使用EL表达式**#{Job.getNodeOutput("select95")}** ，其中**select95**为前一个节点的名称。
- 子作业参数：子作业参数是子作业中定义的参数名，然后在主作业中定义的参数值，传递到子作业以供使用。此处子作业参数名定义为**name** 和**score** ，其值分别为数据集中的第一列和第二列数值，使用EL表达式**#{Loop.current\[0\]}** 和**#{Loop.current\[1\]}**。
 
图5主作业样例   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001539796869.png "点击放大")
而For Each节点中所选的子作业，则需要定义For Each节点中的子作业参数名，以便让主作业识别参数定义，作业如[图6]所示。
图6子作业样例   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001488876904.png "点击放大")
**配置方法**
开发子作业
1. 登录DataArts Studio控制台，找到所需要的DataArts Studio实例，单击实例卡片上的"进入控制台"，进入概览页面。
2. 选择"空间管理"页签，在工作空间列表中，找到所需要的工作空间，单击工作空间的"数据开发"，系统跳转至数据开发页面。
3. 在"作业开发"页面，新建数据开发子作业**EL_test_slave** 。选择一个Kafka Client节点，并配置作业参数，编排[图6]所示的作业。
   
   此处需将参数名填写为**name** 和**score**，仅用于主作业的For Each节点识别子作业参数；参数值无需填写。
   
   
4. 配置Kafka Client节点参数。发送数据定义为：**${name}: ${score}** ，选择Kafka连接和Topic名称。
   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   此处不能使用EL表达式#{Job.getParam("job_param_name")} ，因为此表达式只能直接获取当前作业里配置的参数的value，并不能获取到父作业传递过来的参数值，也不能获取到工作空间里面配置的全局变量，作用域仅为本作业。
   而表达式${job_param_name}，既可以获取到父作业传递过来的参数值，也可以获取到全局配置的变量。
   图7配置Kafka Client节点参数   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001539637525.png "点击放大")
   
   
   
5. 配置完成后提交子作业。
 
开发主作业
1. 在"作业开发"主页面，进入脚本开发。
2. 构造原始表格student_score。新建临时Hive SQL脚本，选择Hive连接和数据库后，粘贴如下SQL语句并运行，运行成功后即可删除此脚本。 
   ```
   CREATE TABLE `student_score` (`name` String COMMENT '', `score` INT COMMENT '');
   INSERT INTO
       student_score
   VALUES
       ('ZHAO', '90'),
       ('QIAN', '88'),
       ('SUN', '93'),
       ('LI', '94'),
       ('ZHOU', '85'),
       ('WU', '79'),
       ('ZHENG', '87'),
       ('WANG', '97'),
       ('FENG', '83'),
       ('CHEN', '99');
   ```
   
   
3. 新建MRS Hive SQL节点调用的Hive SQL脚本。新建Hive SQL脚本，选择Hive连接和数据库后，粘贴如下SQL语句并提交版本，脚本命名为select95。
   
   ```
   --从student_score表中展示成绩在95分以上的姓名和成绩--
   SELECT * FROM student_score WHERE score> "95" ;
   ```
   
   
4. 在"作业开发"页面，新建数据开发主作业**EL_test_master** 。选择一个HIVE SQL节点和一个For Each节点，选中连线图标![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001488718736.png)并拖动，编排[图5]所示的作业。
5. 配置MRS Hive SQL节点参数。SQL脚本选择[3]中提交的脚本select95，选择Hive连接和数据库。
   
   图8配置MRS Hive SQL节点参数   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001488558168.png "点击放大")
   
   
   
6. 配置For Each节点属性，如[图9]所示。
   
   - 子作业：子作业选择已经开发完成的子作业**EL_test_slave**。
   
   - 数据集：数据集就是HIVE SQL节点的Select语句的执行结果。使用EL表达式**#{Job.getNodeOutput("select95")}** ，其中**select95**为前一个节点的名称。
   
   - 子作业参数：子作业参数是子作业中定义的参数名，然后在主作业中定义的参数值，传递到子作业以供使用。此处子作业参数名定义为**name** 和**score** ，其值分别为数据集中的第一列和第二列数值，使用EL表达式**#{Loop.current\[0\]}** 和**#{Loop.current\[1\]}**。
   
   
   图9配置For Each节点参数   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001488878148.png "点击放大")
   
   
   
7. 配置完成后保存作业。
测试运行主作业
1. 单击主作业**EL_test_master** 画布上方的"测试运行"按钮，测试作业运行情况。主作业运行后，会通过For Each节点循环调用运行子作业**EL_test_slave**。
2. 单击左侧导航栏中的"实例监控"，进入实例监控中查看作业运行结果。
3. 待作业运行完成后，从实例监控中找到子作业**EL_test_slave** 的循环运行结果，如[图10]所示。
   
   图10子作业运行结果   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001539678425.png "点击放大")
   
   
   
4. 查看子作业**EL_test_slave** 在循环运行中的结果日志，从日志中可以看到，结合For Each节点及其支持的Loop内嵌对象EL表达式，成功获取For Each前一节点输出的结果值。
   
   图11查看日志   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001539518389.png "点击放大")
   
   
   
 #### DataArts Studio的数据开发作业中Shell节点如何获取MRS Hive SQL节点执行的结果
在DataArts Studio的数据开发作业中，Shell节点获取MRS Hive SQL节点执行结果，可参考以下几种方法：
- **方法一：使用参数传递**
  1. [登录DataArts Studio管理控制台](https://console.huaweicloud.com/dayu/)。
     详情请参考[访问DataArts Studio实例控制台](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0001.html)。
     
  
  2. 在DataArts Studio控制台首页，选择对应工作空间的"数据开发"模块，进入数据开发页面。
  
  3. 进入"数据开发 \> 脚本开发"主界面。创建一个Hive SQL脚本。设置脚本参数，比如，数据连接、数据库等参数为必填，MRS资源队列为可选参数。 输入如下语句，确保该SQL语句将结果输出到HDFS上的一个文件中。
     ```
     INSERT OVERWRITE DIRECTORY '/user/your_username/hive_output'
     ROW FORMAT DELIMITED
     FIELDS TERMINATED BY '\t'
     SELECT * FROM your_table WHERE condition;
     ```
     保存并提交脚本版本，运行该脚本。
     
  
  4. 进入"数据开发 \> 作业开发"主界面，创建批处理的Pipeline作业。
  
  5. 在作业画布中，从左侧节点列表中拖动"MRS Hive SQL"节点到画布上。
  
  6. 单击MRS Hive SQL节点，进入节点配置页面。
  
  7. 配置"SQL脚本"参数，需要新建Hive SQL脚本或者引用已创建的Hive SQL脚本，脚本中要包含如下语句，确保该SQL语句将结果输出到HDFS上的一个文件中，例如：
     ```
     INSERT OVERWRITE DIRECTORY '/user/your_username/hive_output'
     ROW FORMAT DELIMITED
     FIELDS TERMINATED BY '\t'
     SELECT * FROM your_table WHERE condition;
     ```
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     - 如果没有已创建好的脚本，单击"新建"按钮（![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000002592023952.png)），创建Hive SQL脚本，并引用该脚本。
     
     - 如果已创建好的脚本，直接引用已创建Hive SQL脚本。（**步骤3已创建**）
     
     - 引用已创建的Hive SQL脚本时，数据连接、数据库等参数信息会自动同步已关联的脚本配置信息。
       
  
  8. 设置输出路径参数。
     1. 在Hive SQL节点的配置页面中，设置一个参数来传递输出路径。例如，可以设置一个参数**output_path** ，值为**/user/your_username/hive_output** 。具体操作如下：
        1. 单击"作业参数配置"页签，添加一个参数。
        
        2. 参数名称设置为output_path。
        
        3. 参数值设置为/user/your_username/hive_output
         
     
     2. 在上面步骤7的Hive SQL脚本中使用该参数，例如：
        ```
        INSERT OVERWRITE DIRECTORY '${output_path}'
        ROW FORMAT DELIMITED
        FIELDS TERMINATED BY '\t'
        SELECT * FROM your_table WHERE condition;
        ```
        
      
  
  9. 配置完成后，保存节点配置。
  
  10. 在作业画布中，从左侧节点列表中拖动"Shell"节点到画布上。将Shell节点连接到Hive SQL节点，确保Shell节点在Hive SQL节点执行成功后开始执行。
  
  11. 单击Shell节点，进入节点配置页面。
      在"Shell语句"中编写Shell脚本，从HDFS中读取Hive SQL节点的输出文件。以下是一个示例脚本：
      ```
      #!/bin/bash
      # 从Hive SQL节点传递的参数中获取输出路径
      OUTPUT_PATH=$1
      LOCAL_OUTPUT_FILE="/path/to/local/output/file"
      # 从HDFS中读取文件
      hadoop fs -getmerge $OUTPUT_PATH $LOCAL_OUTPUT_FILE
      # 检查文件是否成功下载
      if [ $? -eq 0 ]; then
          echo "文件已成功下载到 $LOCAL_OUTPUT_FILE"
      else    
          echo "文件下载失败"
      fi
      ```
      替换/path/to/local/output/file为实际的值。
      
  
  12. 配置参数传递。
      1. 在Shell节点的配置页面中，设置参数传递。在"参数"部分，添加一个参数，例如**output_path** ，**并将其值设置为Hive SQL节点中设置的输出路径参数**。
      
      2. 确保Shell脚本中的第一个参数$1对应于传递的output_path参数。具体操作如下：
         1. 单击"作业参数配置"页签，添加一个参数。
         
         2. 参数名称设置为output_path。
         
         3. 参数值设置为MRS Hive SQL节点中设置的输出路径参数，例如/user/your_username/hive_output。
            ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
            该参数可以是常量或者变量。具体取决于您的需求和配置方式。
            常量配置：
            - 参数名称设置为output_path。
            
            - 参数值设置为一个固定的值，例如/user/your_username/hive_output。
            
            
            变量配置：
            - 参数名称设置为output_path。
            
            - 参数值设置为一个变量，例如${output_path}，这个变量的值从上游的MRS Hive SQL节点传递过来。
              
          
       
  
  13. 配置完成后，保存节点配置。
  
  14. 作业配置完成后，保存并提交作业版本。运行作业以验证Hive SQL节点和Shell节点的执行结果。检查Shell节点是否能够正确获取Hive SQL节点的执行结果，并进行必要的调试。
  
  15. 对作业进行执行调度，在"批作业监控"查看作业运行结果。
      - 监控作业的执行状态，确保Hive SQL节点和Shell节点都成功执行。
      
      
      
      - 检查Shell节点生成的输出文件，确保文件内容与Hive SQL节点的执行结果一致。
      
      - 如果有错误，根据日志信息进行调试和修正。
       
  
  
  ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
  在DataArts Studio的数据开发中，通过参数传递的方法让Shell节点获取Hive SQL节点的执行结果时，**$1** 和**output_path**参数之间的关系如下：
  - **output_path参数**：在Hive SQL节点中定义并设置的输出路径参数。
  
  - **$1参数**：在Shell脚本中，用于接收传递的output_path参数值的位置参数。
  
  
  **关系说明**：
  **output_path参数**：
  定义：在Hive SQL节点中定义的一个参数，用于传递输出路径。
  配置：在Hive SQL节点的配置页面中，设置一个参数output_path，并为其赋值，例如/user/your_username/hive_output。
  使用：在Hive SQL节点的SQL脚本中使用该参数。详细配置请参见**[8]**。
  **$1参数**：
  定义：在Shell脚本中，$1是一个位置参数，表示传递给Shell脚本的第一个参数。
  配置：在Shell节点的配置页面中，设置一个参数output_path，并将其值设置为MRS Hive SQL节点中设置的输出路径参数。
  使用：在Shell脚本中，使用$1来接收传递的output_path 参数值。详细配置请参见**[11]**。
  **主要操作步骤如下：**
  1. **Hive SQL节点**：
     1. 设置参数output_path，值为/user/your_username/hive_output。
     
     2. 在SQL脚本中使用${output_path}。
      
  
  2. **Shell节点** ：
     1. 设置参数output_path，值为Hive SQL节点中设置的输出路径参数。
     
     2. 在Shell脚本中，使用$1接收传递的output_path参数值。
      
    

- **方法二：通过OBS中转**
  1. [登录DataArts Studio管理控制台](https://console.huaweicloud.com/dayu/)。
     详情请参考[访问DataArts Studio实例控制台](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0001.html)。
     
  
  2. 在DataArts Studio控制台首页，选择对应工作空间的"数据开发"模块，进入数据开发页面。
  
  3. 进入"数据开发 \> 脚本开发"主界面。创建一个Hive SQL脚本。设置脚本参数，比如，数据连接、数据库等参数为必填，MRS资源队列为可选参数。 输入如下语句，确保该SQL语句将结果输出到OBS上的一个文件中。
     ```
     INSERT OVERWRITE DIRECTORY 'obs://your-bucket/hive_output'
     ROW FORMAT DELIMITED
     FIELDS TERMINATED BY '\t'
     SELECT * FROM your_table WHERE condition;
     ```
     保存并提交脚本版本，运行该脚本。
     
  
  4. 进入"数据开发 \> 作业开发"主界面，创建批处理的Pipeline作业。
  
  5. 在作业画布中，从左侧节点列表中拖动"MRS Hive SQL"节点到画布上。
  
  6. 单击MRS Hive SQL节点，进入节点配置页面。
  
  7. 配置"SQL脚本"参数，需要新建Hive SQL脚本或者引用已创建的Hive SQL脚本，脚本中要包含如下语句，确保该SQL语句将结果输出到OBS上的一个文件中，例如：
     ```
     INSERT OVERWRITE DIRECTORY 'obs://your-bucket/hive_output'
     ROW FORMAT DELIMITED
     FIELDS TERMINATED BY '\t'
     SELECT * FROM your_table WHERE condition;
     ```
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     - 如果没有已创建好的脚本，单击"新建"按钮（![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000002622357845.png)），创建Hive SQL脚本，并引用该脚本。
     
     - 如果已创建好的脚本，直接引用已创建Hive SQL脚本。（**步骤3已创建**）
     
     - 引用已创建的Hive SQL脚本时，数据连接、数据库等参数信息会自动同步已关联的脚本配置信息。
       
  
  8. （可选）配置MRS Hive SQL节点的其他参数，如资源、参数等。
  
  9. 配置完成后，保存节点配置。
  
  10. 在作业画布中，从左侧节点列表中拖动"Shell"节点到画布上。将Shell节点连接到Hive SQL节点，确保Shell节点在Hive SQL节点执行成功后开始执行。
  
  11. 单击Shell节点，进入节点配置页面。 在"Shell语句"中编写Shell脚本，从OBS中读取Hive SQL节点的输出文件。以下是一个示例脚本：
      ```
      #!/bin/bash
      # 设置OBS路径和本地输出路径
      OBS_PATH="obs://your-bucket/hive_output"
      LOCAL_OUTPUT_FILE="/path/to/local/output/file"
      # 设置OBS访问密钥
      export AWS_ACCESS_KEY_ID="your_access_key"
      export AWS_SECRET_ACCESS_KEY="your_secret_key"
      # 从OBS中读取文件
      hadoop fs -getmerge $OBS_PATH $LOCAL_OUTPUT_FILE
      # 检查文件是否成功下载
      if [ $? -eq 0 ]; then    
          echo "文件已成功下载到 $LOCAL_OUTPUT_FILE"
      else    
          echo "文件下载失败"
      fi
      ```
      替换your-bucket、/path/to/local/output/file、your_access_key和your_secret_key为实际的值。
      
  
  12. （可选）配置Shell节点的其他参数，如资源、参数等。
  
  13. 配置完成后，保存节点配置。
  
  14. 作业配置完成后，保存并提交作业版本。运行作业以验证Hive SQL节点和Shell节点的执行结果。检查Shell节点是否能够正确获取Hive SQL节点的执行结果，并进行必要的调试。
  
  15. 对作业进行执行调度，在"批作业监控"查看作业运行结果。
      - 监控作业的执行状态，确保Hive SQL节点和Shell节点都成功执行。
      
      
      
      - 检查Shell节点生成的输出文件，确保文件内容与Hive SQL节点的执行结果一致。
      
      - 如果有错误，根据日志信息进行调试和修正。
       
   

- **方法三：** **通过HDFS（Hadoop Distributed File System，即Hadoop分布式文件系统）中转**
  1. [登录DataArts Studio管理控制台](https://console.huaweicloud.com/dayu/)。
     详情请参考[访问DataArts Studio实例控制台](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0001.html)。
     
  
  2. 在DataArts Studio控制台首页，选择对应工作空间的"数据开发"模块，进入数据开发页面。
  
  3. 进入"数据开发 \> 脚本开发"主界面。创建一个Hive SQL脚本。设置脚本参数，比如，数据连接、数据库等参数为必填，MRS资源队列为可选参数。 输入如下语句，确保该SQL语句将结果输出到HDFS上的一个文件中。
     ```
     INSERT OVERWRITE DIRECTORY '/user/your_username/hive_output'
     ROW FORMAT DELIMITED
     FIELDS TERMINATED BY '\t'
     SELECT * FROM your_table WHERE condition;
     ```
     保存并提交脚本版本，运行该脚本。
     
  
  4. 进入"数据开发 \> 作业开发"主界面，创建批处理的Pipeline作业。
  
  5. 在作业画布中，从左侧节点列表中拖动"MRS Hive SQL"节点到画布上。
  
  6. 单击MRS Hive SQL节点，进入节点配置页面。
  
  7. 配置"SQL脚本"参数，需要新建Hive SQL脚本或者引用已创建的Hive SQL脚本，脚本中要包含如下语句，确保该SQL语句将结果输出到HDFS上的一个文件中，例如：
     ```
     INSERT OVERWRITE DIRECTORY '/user/your_username/hive_output'
     ROW FORMAT DELIMITED
     FIELDS TERMINATED BY '\t'
     SELECT * FROM your_table WHERE condition;
     ```
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     - 如果没有已创建好的脚本，单击"新建"按钮（![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000002622312779.png)），创建Hive SQL脚本，并引用该脚本。
     
     - 如果已创建好的脚本，直接引用已创建Hive SQL脚本。（**步骤3已创建**）
     
     - 引用已创建的Hive SQL脚本时，数据连接、数据库等参数信息会自动同步已关联的脚本配置信息。
       
  
  8. （可选）配置MRS Hive SQL节点的其他参数，如资源、参数等。
  
  9. 配置完成后，保存节点配置。
  
  10. 在作业画布中，从左侧节点列表中拖动"Shell"节点到画布上。将Shell节点连接到Hive SQL节点，确保Shell节点在Hive SQL节点执行成功后开始执行。
  
  11. 单击Shell节点，进入节点配置页面。 在"Shell语句"中编写Shell脚本，从HDFS中读取Hive SQL节点的输出文件。以下是一个示例脚本：
      ```
      #!/bin/bash 
      # 设置HDFS路径和本地输出路径
      HDFS_PATH="/user/your_username/hive_output"
      LOCAL_OUTPUT_FILE="/path/to/local/output/file"# 从HDFS中读取文件
      # 从HDFS中读取文件
      hadoop fs -getmerge $HDFS_PATH $LOCAL_OUTPUT_FILE# 检查文件是否成功下载
      # 检查文件是否成功下载
      if [ $? -eq 0 ]; then    
          echo "文件已成功下载到 $LOCAL_OUTPUT_FILE"
      else    
          echo "文件下载失败"
      fi
      ```
      替换/user/your_username/hive_output和/path/to/local/output/file为实际的值。
      
  
  12. （可选）配置Shell节点的其他参数，如资源、参数等。
  
  13. 配置完成后，保存节点配置。
  
  14. 作业配置完成后，保存并提交作业版本。运行作业以验证Hive SQL节点和Shell节点的执行结果。检查Shell节点是否能够正确获取Hive SQL节点的执行结果，并进行必要的调试。
  
  15. 对作业进行执行调度，在"批作业监控"查看作业运行结果。
      - 监控作业的执行状态，确保Hive SQL节点和Shell节点都成功执行。
      
      
      
      - 检查Shell节点生成的输出文件，确保文件内容与Hive SQL节点的执行结果一致。
      
      - 如果有错误，根据日志信息进行调试和修正。
       
   
- **方法四：通过数据库中转，使用JDBC连接查询结果表**
  1. [登录DataArts Studio管理控制台](https://console.huaweicloud.com/dayu/)。
     详情请参考[访问DataArts Studio实例控制台](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0001.html)。
     
  
  2. 在DataArts Studio控制台首页，选择对应工作空间的"数据开发"模块，进入数据开发页面。
  
  3. 进入"数据开发 \> 脚本开发"主界面。创建一个Hive SQL脚本。设置脚本参数，比如，数据连接、数据库等参数为必填，MRS资源队列为可选参数。 输入如下语句，确保该SQL语句将结果插入到一个临时表中。
     ```
     CREATE TABLE IF NOT EXISTS temp_results AS
     SELECT * FROM your_table WHERE condition;
     ```
     保存并提交脚本版本，运行该脚本。
     
  
  4. 进入"数据开发 \> 作业开发"主界面，创建批处理的Pipeline作业。
  
  5. 在作业画布中，从左侧节点列表中拖动"MRS Hive SQL"节点到画布上。
  
  6. 单击MRS Hive SQL节点，进入节点配置页面。
  
  7. 配置"SQL脚本"参数，需要新建Hive SQL脚本或者引用已创建的Hive SQL脚本，脚本中要包含如下语句，确保该SQL语句将结果插入到一个临时表中，例如：
     ```
     CREATE TABLE IF NOT EXISTS temp_results AS
     SELECT * FROM your_table WHERE condition;
     ```
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     - 如果没有已创建好的脚本，单击"新建"按钮（![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000002591983472.png)），创建Hive SQL脚本，并引用该脚本。
     
     - 如果已创建好的脚本，直接引用已创建Hive SQL脚本。（**步骤3已创建**）
     
     - 引用已创建的Hive SQL脚本时，数据连接、数据库等参数信息会自动同步已关联的脚本配置信息。
       
  
  8. （可选）配置MRS Hive SQL节点的其他参数，如资源、参数等。
  
  9. 配置完成后，保存节点配置。
  
  10. 在作业画布中，从左侧节点列表中拖动"Shell"节点到画布上。将Shell节点连接到Hive SQL节点，确保Shell节点在Hive SQL节点执行成功后开始执行。
  
  11. 单击Shell节点，进入节点配置页面。 在"Shell语句"中编写Shell脚本，使用JDBC连接查询临时表中的数据。以下是一个示例脚本：
      ```
      #!/bin/bash
      # 设置JDBC连接参数
      JDBC_URL="jdbc:hive2://<Hive服务器IP>:<端口>/default"
      JDBC_USER="your_username"
      JDBC_PASSWORD="your_password"
      OUTPUT_FILE="/path/to/output/file"
      # 使用JDBC连接查询临时表
      beeline -u "$JDBC_URL" -n "$JDBC_USER" -p "$JDBC_PASSWORD" -e "SELECT * FROM temp_results" > "$OUTPUT_FILE"
      # 检查查询结果
      if [ $? -eq 0 ]; then
          echo "查询成功，结果已保存到 $OUTPUT_FILE"
      else    
          echo "查询失败"
      fi
      ```
      替换\<Hive服务器IP\>、\<端口\>、your_username、your_password和/path/to/output/file为实际的值。
      
  
  12. （可选）配置Shell节点的其他参数，如资源、参数等。
  
  13. 配置完成后，保存节点配置。
  
  14. 作业配置完成后，保存并提交作业版本。运行作业以验证Hive SQL节点和Shell节点的执行结果。检查Shell节点是否能够正确获取Hive SQL节点的执行结果，并进行必要的调试。
  
  15. 对作业进行执行调度，在"批作业监控"查看作业运行结果。
      - 监控作业的执行状态，确保Hive SQL节点和Shell节点都成功执行。
      
      
      
      - 检查Shell节点生成的输出文件，确保文件内容与Hive SQL节点的执行结果一致。
      
      - 如果有错误，根据日志信息进行调试和修正。
       
   
 
