使用DLI将CSV数据转换为Parquet数据
应用场景
Parquet是面向分析型业务的列式存储格式,这种格式可以加快查询速度,查询Parquet格式数据时,只检查所需要的列并对它们的值执行计算,也就是说,只读取一个数据文件或表的一小部分数据。Parquet还支持灵活的压缩选项,因此可以显著减少磁盘上的存储。使用DLI可轻松将CSV格式数据转换为Parquet格式数据。
方案架构
将CSV格式的数据上传到对象存储服务OBS,使用DLI将CSV数据转换为Parquet数据,并将转换后的Parquet数据存储到OBS中。
![点击放大](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%。
资源和成本规划
资源 |
资源说明 |
成本说明 |
---|---|---|
OBS |
需要创建一个OBS桶将数据上传到对象存储服务OBS,为后面使用DLI完成数据分析做准备。 |
OBS的使用涉及以下几项费用: 实际产生的费用与存储的文件大小、用户访问所产生的请求次数和流量大小有关,请根据自己的业务进行预估。 |
DLI |
在创建SQL作业前需购买队列,使用DLI的队列资源时,按照队列CU时进行计费。 |
如购买按需计费的队列,在使用队列资源时,按照队列CU时进行计费。 以小时为单位进行结算。不足一小时按一小时计费,小时数按整点计算。队列CU时按需计费的计算费用=单价*CU数*小时数。 |
步骤2:使用DLI将CSV数据转换为Parquet数据
- 在DLI控制台总览页面左侧,单击“SQL编辑器”,进入SQL作业编辑器页面。
- 在SQL作业编辑器左侧,选择“数据库”页签,单击
创建名字为demo的数据库。
- 在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' )
- 在DLI的SQL编辑窗口,执行以下语句可以查询表test_csv_hw中的数据。
图4 查询表test_csv_hw
- 在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/' )
不需要指明具体的文件,因为在将数据从CSV格式转换为Parquet格式之前,不存在任何Parquet文件。
- 在DLI的SQL编辑窗口中将CSV数据转换为Parquet数据并存储在OBS中。
insert into test_parquet_hw select * from test_csv_hw
- 检查结果,如图5所示,系统自动创建了一个文件用于保存结果。