
# 使用DLI提交SQL作业查询OBS数据
#### 场景描述
DLI可以查询存储在OBS中的数据，本节操作介绍使用DLI提交SQL作业查询OBS数据的操作步骤。
本例新建"sampledata.csv"文件上传OBS桶，并新建弹性资源池队列，使用DLI创建数据库和表，使用DLI提供的SQL编辑器查询表的1000条数据。
#### 操作流程
使用DLI提交SQL作业查询OBS数据的基本流程如[表1]所示。
开始进行如下操作前，请务必参考[准备工作]完成必要操作。
 表1使用DLI提交SQL作业查询OBS数据的操作步骤 
| 操作步骤                                                                          | 说明                                        |
|:---|:---|
| [步骤1：上传数据至OBS]    | 使用DLI查询数据前，需要将数据文件上传至OBS中。                |
| [步骤2：创建弹性资源池并添加队列] | 创建提交作业所需的计算资源。                            |
| [步骤3：创建数据库]       | DLI元数据是SQL作业开发的基础。在执行作业前您需要根据业务场景定义数据库和表。 |
| [步骤4：创建表]         | 数据库创建完成后，需要在数据库db1中基于OBS上的样本数据创建表。        |
| [步骤5：查询数据]        | 使用标准SQL语句进行数据的查询和分析。                      |
   
 #### 准备工作
- **已注册华为账号并开通华为云，且在使用DLI前检查账号状态，账号不能处于欠费或冻结状态。**
- **配置DLI委托访问授权。**
  DLI使用过程中涉及到OBS、VPC、SMN等服务交互，首次使用DLI需要用户配置委托授权，允许访问这些依赖服务。
  1. 使用华为云账号登录DLI管理控制台，在左侧导航栏单击"全局配置 \> 服务授权"。
  
  2. 在委托设置页面，勾选基础使用、跨源场景、运维场景的委托权限后，单击"更新委托权限"。
  
  3. 查看并了解更新委托的提示信息，单击"确定"。完成DLI委托权限的更新。
     图1配置DLI委托访问授权   
     ![](https://support.huaweicloud.com/qs-dli/zh-cn_image_0000001964093394.png "点击放大") 
  
  4. 完成配置后，在IAM控制台的委托列表中，可查看到dli_management_agency的委托信息。
    
- **配置DLI作业桶** **。**
  请务必在使用DLI提交作业前配置DLI作业桶，该桶用于存储DLI作业运行过程中产生的临时数据，例如：作业日志、作业结果。
  参考[配置DLI作业桶](https://support.huaweicloud.com/usermanual-dli/dli_01_0536.html)在DLI管理控制台的"全局配置 \> 工程配置"页面配置DLI作业桶。
  
 
 #### 步骤1：上传数据至OBS
使用DLI查询数据前，需要将数据文件上传至OBS中。
1. 登录OBS管理控制台，进入OBS管理控制台页面。
2. 创建桶，本例桶名以"obs1"为例。
   1. 单击页面右上角"创建桶"。
   
   2. 进入"创建桶"页面，选择"区域"，输入"桶名称"。其他参数保持默认值或根据需要选择。
      ![](https://support.huaweicloud.com/qs-dli/public_sys-resources/note_3.0-zh-cn.png)
      创建OBS桶时，需要选择与DLI管理控制台相同的区域，不可跨区域执行操作。
      
   
   3. 单击"立即创建"。
    
3. 单击所建桶"obs1"，进入"对象"页面。
4. 勾选左侧列表中的"对象"，选择"上传对象"，将需要上传的文件"sampledata.csv"上传到指定目录，单击"上传"。 "sampledata.csv"样例文件可以通过新建"sampledata.txt"，复制如下英文逗号分隔的文本内容，再另存为"sampledata.csv"。
   ```
   product_id,product_name
   113,office_13
   22,book_2
   29,book_9
   ```
   文件上传成功后，待分析的文件路径为"obs://obs1/sampledata.csv"。
   关于OBS管理控制台更多操作请参考《[对象存储服务用户指南](https://support.huaweicloud.com/usermanual-obs/obs_41_0003.html)》。
   
 
 #### 步骤2：创建弹性资源池并添加队列
本例创建弹性资源池"dli_resource_pool"、队列"dli_queue_01"。
1. 登录DLI管理控制台。
2. 在左侧导航栏单击"资源管理 \> 弹性资源池"，可进入弹性资源池管理页面。
3. 在弹性资源池管理界面，单击界面右上角的"购买弹性资源池"。
4. 在"购买弹性资源池"界面，填写具体的弹性资源池参数。
   本例在华东-上海二区域购买按需计费的弹性资源池。相关参数说明如[表2]所示。
    表2参数说明 
   | 参数名称 | 参数说明                                                             | 配置样例              |
   |:---|:---|:---|
   | 计费模式 | 选择弹性资源池计费模式。                                                     | 按需计费              |
   | 区域   | 选择弹性资源池所在区域。                                                     | 华东-上海二            |
   | 项目   | 每个区域默认对应一个项目，由系统预置。                                              | 系统默认项目            |
   | 名称   | 弹性资源池名称。                                                         | dli_resource_pool |
   | 规格   | 选择弹性资源池规格。                                                       | 标准版               |
   | CU范围 | 弹性资源池最大最小CU范围。                                                   | 64-64             |
   | 网段   | 规划弹性资源池所属的网段。如需使用DLI增强型跨源，弹性资源池网段与数据源网段不能重合。**弹性资源池网段设置后不支持更改**。 | 172.16.0.0/19     |
   | 企业项目 | 选择对应的企业项目。                                                       | default           |
      
   
5. 参数填写完成后，单击"立即购买"，在界面上确认当前配置是否正确。
6. 单击"提交"完成弹性资源池的创建。
7. 在弹性资源池的列表页，选择要操作的弹性资源池，单击操作列的"添加队列"。
8. 配置队列的基础配置，具体参数信息如下。
   表3弹性资源池添加队列基础配置 
   | 参数名称 | 参数说明                                                                                                                                                                                                                                                                                                                                                                              | 配置样例                                                                                   |
   |:---|:---|:---|
   | 名称   | 弹性资源池添加的队列名称。                                                                                                                                                                                                                                                                                                                                                                     | dli_queue_01                                                                           |
   | 类型   | 选择创建的队列类型。 - 执行SQL作业请选择SQL队列。  - 执行Flink或Spark作业请选择通用队列。   | SQL作业场景请选择"SQL队列"。 其他场景请选择"通用队列"。 |
   | 执行引擎 | SQL队列可以选择队列引擎为Spark。                                                                                                                                                                                                                                                                                                                                                              | Spark                                                                                  |
   | 企业项目 | 选择对应的企业项目。                                                                                                                                                                                                                                                                                                                                                                        | default                                                                                |
      
   
9. 单击"下一步"，配置队列的扩缩容策略。 单击"新增"，可以添加不同优先级、时间段、"最小CU"和"最大CU"扩缩容策略。
   本例配置的扩缩容策略如[图2]所示。
   图2添加队列时配置扩缩容策略   
   ![](https://support.huaweicloud.com/qs-dli/zh-cn_image_0000002000460541.png "点击放大")
   表4扩缩容策略参数说明 
   | 参数名称 | 参数说明                                                                                              | 配置样例  |
   |:---|:---|:---|
   | 优先级  | 当前弹性资源池中的优先级数字越大表示优先级越高。本例设置一条扩缩容策略，默认优先级为1。                                                      | 1     |
   | 时间段  | 首条扩缩容策略是默认策略，不能删除和修改时间段配置。 即设置00-24点的扩缩容策略。 | 00-24 |
   | 最小CU | 设置扩缩容策略支持的最小CU数。                                                                                  | 16    |
   | 最大CU | 当前扩缩容策略支持的最大CU数。                                                                                  | 64    |
      
   
10. 单击"确定"完成添加队列配置。
 
 #### 步骤3：创建数据库
在进行数据查询之前还需要创建一个数据库，例如db1。
![](https://support.huaweicloud.com/qs-dli/public_sys-resources/note_3.0-zh-cn.png)
"default"为内置数据库，不能创建名为"default"的数据库。
1. 在DLI管理控制台，单击左侧导航栏中的"SQL编辑器"，可进入SQL作业"数据库"页面。
2. 在"SQL编辑器"页面右侧的编辑窗口中，输入如下SQL语句，单击"执行"。阅读并同意隐私协议，单击"确定"。
   ```
   create database db1;
   ```
   数据库创建成功后，左侧单击" ![](https://support.huaweicloud.com/qs-dli/zh-cn_image_0000001992752425.png) "刷新数据库页面，新建的数据库db1会在"数据库"列表中出现。
   ![](https://support.huaweicloud.com/qs-dli/public_sys-resources/note_3.0-zh-cn.png)
   在DLI管理控制台第一次单击"执行"操作时，需要阅读隐私协议，确认同意后才能执行作业，且后续"执行"操作将不会再提示阅读隐私协议。
   
 
 #### 步骤4：创建表
数据库创建完成后，需要在数据库db1中基于OBS上的样本数据"obs://obs1/sampledata.csv"创建一个表，例如table1。
1. 在"SQL编辑器"页面右侧的编辑窗口上方，选择队列"default"和数据库"db1"。
2. 在编辑窗口中，输入如下SQL语句，单击"执行"。
   ```
   create table table1 (product_id int, product_name string) using csv options (path 'obs://obs1');
   ```
   创建表时只需指定数据文件所在的OBS存储路径，目录后不需要指定文件名。
   表table1创建成功后，单击左侧"数据库"页签，再单击db1，新创建的表table1会在"表"区域下方显示。
   
 
 #### 步骤5：查询数据
完成以上步骤后，就可以开始进行数据查询了。
1. 单击"SQL编辑器"页面左侧的"数据库"页签，选择新创建的表table1，双击表，在右侧编辑窗口中，自动输入SQL查询语句，例如查询table1表的1000条数据：
   ```
   select * from db1.table1 limit 1000;
   ```
   
2. 单击"执行"，系统开始查询。 SQL语句执行成功/失败后，可在SQL作业编辑窗口下方"查看结果"页签查看查询结果。
   
 
#### 后续指引
完成Spark SQL作业快速入门操作后，如果您想了解更多关于Spark SQL作业相关操作，建议您参考以下指引阅读。
| 分类   | 文档                                                                                 | 说明                                                    |
|:---|:---|:---|
| 界面操作 | [SQL编辑器](https://support.huaweicloud.com/usermanual-dli/dli_01_0320.html)          | 提供执行Spark SQL语句操作的界面指导，包含SQL编辑器界面基本功能介绍、快捷键以及使用技巧等说明。 |
| 界面操作 | [Spark SQL作业管理](https://support.huaweicloud.com/usermanual-dli/dli_01_0017.html)   | 提供Spark SQL作业管理界面功能介绍。                                |
| 界面操作 | [Spark SQL模板管理](https://support.huaweicloud.com/usermanual-dli/dli_01_0021.html)   | DLI支持定制模板或将正在使用的SQL语句保存为模板，便捷快速的执行SQL操作。              |
| 开发指导 | [Spark SQL语法参考](https://support.huaweicloud.com/sqlref-spark-dli/dli_08_0219.html) | 提供Spark SQL数据库、表、分区、导入及导出数据、自定义函数、内置函数等语法说明和样例指导。     |
| 开发指导 | [使用Spark作业访问DLI元数据](https://support.huaweicloud.com/devg-dli/dli_09_0176.html)     | 提供Spark SQL作业开发的操作指引和样例代码参考。                          |
   
