教程:如何通过DLA实现数据文件格式转换

简介: 前言 Data Lake Analytic(后文简称 DLA)可以帮助用户通过标准的SQL语句直接对存储在OSS、TableStore上的数据进行查询分析。 对于同一份数据来说,以不同的格式保存,不仅在存储空间上有差别,在使用DLA查询时执行时间也是有差别的。

前言

Data Lake Analytics(后文简称 DLA)可以帮助用户通过标准的SQL语句直接对存储在OSS、TableStore上的数据进行查询分析。

对于同一份数据来说,以不同的格式保存,不仅在存储空间上有差别,在使用DLA查询时执行时间也是有差别的。通常来说,同样大小的数据,以ORC和PARQUET存储时,性能要优于以普通文本(CSV)的格式存储。而大部分用户在OSS上的数据是以CSV的格式存储的,如果希望得到更好的查询效率,往往需要借助第三方工具先对文件进行格式转换,再将转换后的数据文件导入OSS,再使用DLA进行查询,比较麻烦。

本文将介绍如何在DLA中实现不同文件格式之间的转换。

转换方法

简单来说,就是在DLA中分别依据原始数据文件的格式和目标数据文件的格式,创建两张表;然后通过INSERT INTO  target_table SELECT FROM source_table 语句,将数据以目标表指定的格式写入OSS中。

详细示例

下面将以TPC-H中的orders.tbl文件为例,详细说明如何将普通文本文件转成ORC格式的文件。

  1. 在DLA中创建表orders_txt,并将LOCATION指向文件orders.tbl在OSS中的路径。

    CREATE EXTERNAL TABLE orders_txt (
        O_ORDERKEY INT, 
        O_CUSTKEY INT, 
        O_ORDERSTATUS STRING, 
        O_TOTALPRICE DOUBLE, 
        O_ORDERDATE DATE, 
        O_ORDERPRIORITY STRING, 
        O_CLERK STRING, 
        O_SHIPPRIORITY INT, 
        O_COMMENT STRING
    ) 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' 
    STORED AS TEXTFILE LOCATION 'oss://mybucket/datasets/jinluo/test/convert/orders.tbl';
  2. 在DLA中创建表orders_orc, 并将LOCATION指向OSS中的目标位置,注意该路径必须为已经存在的目录,即以/结尾。
CREATE EXTERNAL TABLE orders_orc (
    O_ORDERKEY INT, 
    O_CUSTKEY INT, 
    O_ORDERSTATUS STRING, 
    O_TOTALPRICE DOUBLE, 
    O_ORDERDATE DATE, 
    O_ORDERPRIORITY STRING, 
    O_CLERK STRING, 
    O_SHIPPRIORITY INT, 
    O_COMMENT STRING
) 
STORED AS ORC LOCATION 'oss://mybucket/datasets/jinluo/test/convert/orders_orc/';
  1. 执行INSERT...SELECT语句,将orders_txt表中满足要求的数据插入orders_orc中。
INSERT INTO orders_orc SELECT * FROM orders_txt;
  1. INSERT语句执行成功后,在OSS上目标表orders_orc指向的目录下,会看到生成的数据文件。
2018-11-22 10:27:15  0.00B Standard oss://mybucket/datasets/jinluo/test/convert/orders_orc/
2018-11-22 10:59:26 1005.62MB Standard oss://mybucket/datasets/jinluo/test/convert/orders_orc/20181122_025537_6_558tf_0eec9b17-dbc3-4ba0-a9df-4024aa6c7d97
2018-11-22 10:59:26 1005.74MB Standard oss://mybucket/datasets/jinluo/test/convert/orders_orc/20181122_025537_6_558tf_74016d12-a570-409d-b444-a216b69a3411

注意事项

  1. 每次执行INSERT语句不会覆盖表目录下已有的数据文件,只会在目录下添加新文件;
  2. 由于DLA没有对用户BUCKET的删除权限,当INSERT语句__执行失败__时,需要用户__手动删除__已经在LOCATION下生成的数据文件。
  3. 在目标目录下新生成的文件个数,与实际执行的集群环境有关,并不是固定的。
  4. 目前不支持写入在创建时使用OpenCSVSerde, MultiDelimitSerDe, RegexSerDe和com.esri.hadoop.hive.serde.JsonSerde (Esri ArcGIS地理Json)的目标表。

更多文章

使用Data Lake Analytics从OSS清洗数据到AnalyticDB
基于 DataLakeAnalytics 的数据湖实践
如何在阿里云上使用Data Lake Analytics分析Table Store数据
Data Lake Analytics的Geospatial分析函数

相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
目录
相关文章
|
Rust 程序员 数据安全/隐私保护
GitHub 上标星 13.4K 的远程软件!太强大了
GitHub 上标星 13.4K 的远程软件!太强大了
4565 0
GitHub 上标星 13.4K 的远程软件!太强大了
|
11月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
前端开发 API 开发者
一键抠图有多强?19Kstar 的 Rembg 开源神器,5 大实用场景颠覆想象!
Rembg是一款基于Python的开源抠图工具,利用深度学习模型(U-Net/U-2-Net)实现高质量背景移除。它支持命令行、Python API、服务端API及插件等多种形式,适用于电商商品图、社交头像优化、设计项目图像等场景。凭借高精准度、即插即用特性和全面生态,Rembg在GitHub上已获19.1K星,成为开发者社区中的热门工具。其本地部署特性确保数据隐私,适合专业与商业环境使用。项目地址:https://github.com/danielgatis/rembg。
4666 24
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
393 3
|
XML 移动开发 开发者
京东商品详情数据接口(H5、APP 端)
京东商品详情数据接口是为H5和APP开发者提供的工具,支持获取商品名称、价格、库存、销量、评价、图片等详细信息,优化应用功能。接口返回JSON或XML格式数据,方便解析处理。适用于电商导购、社交媒体分享、活动推广、价格监控等场景,提升用户体验和购物决策效率。示例代码展示了使用Python发送GET请求的方法。
|
移动开发 前端开发 JavaScript
SpringBoot3 整合Thymeleaf 模板引擎
Thymeleaf 是一个基于 Java 的现代模板引擎,支持 HTML 原型,文件后缀为 .html,可直接在浏览器中查看静态效果。它与 Spring Boot 完美整合,默认配置即可使用,无需额外视图解析器设置。Thymeleaf 支持多种表达式(如变量、链接、国际化等)和 th 属性(如 th:text、th:if 等),适用于 Web 和非 Web 应用开发。通过 th:fragment、th:insert、th:replace 和 th:include 等属性,可以抽取和复用公共页面片段,并支持参数传递。
2236 12
|
算法 Java 调度
对偶问题理论及在优化中的应用实例
对偶问题理论及在优化中的应用实例
|
存储 安全 Linux
说到Linux安全,SSH限制IP登录绕不开这3种方法!
说到Linux安全,SSH限制IP登录绕不开这3种方法!
1553 0
|
存储 Linux
Linux 本地yum源配置 (详简篇)
Linux 本地yum源配置 (详简篇)
6975 1