
# 使用DLI将CSV数据转换为Parquet数据
#### 应用场景
Parquet是面向分析型业务的列式存储格式，这种格式可以加快查询速度，查询Parquet格式数据时，只检查所需要的列并对它们的值执行计算，也就是说，只读取一个数据文件或表的一小部分数据。Parquet还支持灵活的压缩选项，因此可以显著减少磁盘上的存储。使用DLI可轻松将CSV格式数据转换为Parquet格式数据。
#### 方案架构
将CSV格式的数据上传到对象存储服务OBS，使用DLI将CSV数据转换为Parquet数据，并将转换后的Parquet数据存储到OBS中。
图1方案简介   
![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001389274816.png "点击放大")
#### 流程指导
使用DLI将CSV数据转换为Parquet数据主要包括以下步骤：
[步骤1：创建并上传数据]。将数据上传到对象存储服务OBS。
[步骤2：使用DLI将CSV数据转换为Parquet数据]。将CSV数据导入DLI，并将CSV数据转换为Parquet数据。
#### 方案优势
- **提升查询性能**
  如果您在HDFS上拥有基于文本的数据文件或者表，而且正在使用Spark SQL对数据执行查询操作，那么推荐将文本数据文件转换为Parquet数据文件，转换需要时间，但查询性能的提升在某些情况下可能达到约30倍或更高。
  
- **节省存储空间**
  Parquet还支持灵活的压缩选项，因此可以显著减少磁盘上的存储。存储的节省可高达约75%。
  
 
#### 资源和成本规划
表1资源和成本规划 
| 资源  | 资源说明                                         | 成本说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|
| OBS | 需要创建一个OBS桶将数据上传到对象存储服务OBS，为后面使用DLI完成数据分析做准备。 | OBS的使用涉及以下几项费用： - 存储费用：静态网站文件存储在OBS中产生的[存储费用](https://support.huaweicloud.com/price-obs/obs_42_0003.html)。  - 请求费用：用户访问OBS中存储的静态网站文件时产生的[请求费用](https://support.huaweicloud.com/price-obs/obs_42_0004.html)。  - 流量费用：用户使用自定义域名通过公网访问OBS时产生的[流量费用](https://support.huaweicloud.com/price-obs/obs_42_0005.html)。   实际产生的费用与存储的文件大小、用户访问所产生的请求次数和流量大小有关，请根据自己的业务进行预估。 |
| DLI | 在创建SQL作业前需购买队列，使用DLI的队列资源时，按照队列CU时进行计费。      | 如购买按需计费的队列，在使用队列资源时，按照队列CU时进行计费。 以小时为单位进行结算。不足一小时按一小时计费，小时数按整点计算。队列CU时按需计费的计算费用=单价\*CU数\*小时数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   
 #### 步骤1：创建并上传数据
1. 创建CSV数据，例如，如[图2]所示test.csv：
   图2创建test.csv文件   
   ![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001162307959.jpg) 
2. 在OBS上建桶obs-csv-parquet，并将test.csv文件上传至OBS，如[图3]所示：
   图3上传CSV数据至OBS   
   ![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001115748090.jpg "点击放大") 
3. 在OBS上创建一个新的桶obs-parquet-data用于存储转换的Parquet数据。
 
 #### 步骤2：使用DLI将CSV数据转换为Parquet数据
1. 在DLI控制台总览页面左侧，单击"SQL编辑器"，进入SQL作业编辑器页面。
2. 在SQL作业编辑器左侧，选择"数据库"页签，单击![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001271955405.png)创建名字为demo的数据库。
3. 在DLI的SQL编辑窗口，执行引擎选择"spark"，队列选择"default"，数据库选择为"demo"。输入以下建表语句，创建OBS表test_csv_hw并导入test.csv数据。
   ```
   create table test_csv_hw(id1 int, id2 int, id3 int, id4 int, id5 int)
    using csv
    options(
    path 'obs://obs-csv-parquet/test.csv'
    )
   ```
   
4. 在DLI的SQL编辑窗口，执行以下语句可以查询表test_csv_hw中的数据。
   图4查询表test_csv_hw   
   ![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001272234865.png "点击放大") 
5. 在DLI的SQL编辑窗口中创建OBS表test_parquet_hw。
   ```
   create table `test_parquet_hw` (`id1` INT, `id2` INT, `id3` INT, `id4` INT, `id5` INT)
   using parquet
   options (
   path 'obs://obs-parquet-data/'
   )
   ```
   ![](https://support.huaweicloud.com/bestpractice-dli/public_sys-resources/note_3.0-zh-cn.png)
   不需要指明具体的文件，因为在将数据从CSV格式转换为Parquet格式之前，不存在任何Parquet文件。
   
6. 在DLI的SQL编辑窗口中将CSV数据转换为Parquet数据并存储在OBS中。
   ```
   insert into test_parquet_hw select * from test_csv_hw
   ```
   
7. 检查结果，如[图5]所示，系统自动创建了一个文件用于保存结果。
   图5保存Parquet数据   
   ![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0206804662.jpg "点击放大") 
 
