ODPS 功能介绍之SQL

简介:

ODPS 提供了SQL功能, 为BI工程师提供了大数据分析能力。ODPS的SQL语法与HQL非常相似,入手也非常容易。接下来就给大家介绍一下SQL的使用及一些优化技巧。

SQL 语句分为三种:DDL、DML及SELECT 操作。

DDL 用于表的定义及维护。相信大家都用过类似CREATE TABLE 来创建表。 在ODPS中,除了使用CREATE TABLE来创建表之外,还有另外两种方式:

CREATE TABLE EDW_ORDER_BACKUP LIKE EDW_ORDER;

创建一张新表EDW_ORDER_BACKUP,并将EDW_ORDER的表结构完全复制过来,如果源表中存在分区,也会把分区结构复制过来;

CREATE TABLE EDW_ORDER_BACKUP2013 AS SELECT * FROM EDW_ORDER;

创建一张新表EDW_ORDER_BACKUP2013,将SELECT的结果作为新表结构。注意:这种方式如果源表中带有PARTITION, PARTITION 字段会被当作普通字段添加进来;

DML 用于表数据的操作,在ODPS中最常见的数据操作场景就是查询数据,将结果插入到另一张表中,即INSERT ….SELECT 操作。 INSERT 有OVERWRITE和INSERT INTO 两种插入方式。

INSERT OVERWRITE 会覆盖目标表中的数据,而INSERT INTO会在原有数据基础上进行追加。 不建议大家使用INSERT INTO。大家想一下,如果数据分析作业失败后需要重跑,而生成数据使用的是INSERT INTO,生成表中数据就会double或更多,造成的结果可想而知。 在阿里内部这样的悲剧实实在在的发生过L。

SELECT 操作是将数据作屏显,主要用于数据探查的场景。 在ODPS中SELECT操作最多一次能返回1万条记录,并且如果这1万条记录超过了1M,也是不能返回了(INSERT 后边的SELECT 不会这个限制)。如果大家想把超过1万条的数据或整张表导出来,建议使用Tunnel来导出。

ODPS是按照使用的计算和存储资源来收费的,所以大家在使用SQL做数据分析的时候,一定会关心使用计算资源带来的成本问题。 SQL在使用的时候是有优化技巧的,下面就给大家介绍几点:

  1. 尽量使用分区表。分区有助于提高数据处理的效率,快速读取数据。带分区与不带分区的表,在云上存储是有区别的,如EDW_ORDER不带分区,所有数据直接存储在表目录下:

…/EDW_ORDER/FILE1

…/EDW_ORDER/FILE2

而EDW_ORDER_P带分区,数据是存储在不同的分区目录下:

…/EDW_ORDER_P/PT=20150301/FILE1

…/EDW_ORDER_P/PT=20150301/FILE2

…/EDW_ORDER_P/PT=20150302/FILE1

…/EDW_ORDER_P/PT=20150302/FILE2

 

当我们执行 SELECT … FROM EDW_ORDER_P WHERE PT=’20150302’;时作业只会扫PT=20150302目录下的数据文件,而不是全表数据。

  1. 使用MAPJOIN。我们经常会做一个大表和一个或多个小表做JOIN操作,这种操作时最容易引起数据倾斜,从而导致作业SQL低。使用MAPJOIN性能就能提升很多。MAPJOIN的基本原理是:在小数据量情况下,SQL会将用户指定的小表全部加载到执行JOIN操作的程序的内存中,从而加快JOIN的执行速度。但使用MAPJOIN时有些点还需要注意:

left outer join的左表必须是大表;

right outer join的右表必须是大表;

inner join左表或右表均可以作为大表;

full outer join不能使用mapjoin;

mapjoin支持小表为子查询;

使用mapjoin时需要引用小表或是子查询时,需要引用别名;

在mapjoin中,可以使用不等值连接或者使用or连接多个条件;

目前ODPS在mapjoin中最多支持指定6张小表,否则报语法错误;

如果使用mapjoin,则所有小表占用的内存总和不得超过512MB;

多个表join时,最左边的两个表不能同时是mapjoin的表。

下面是一个使用MAPJOIN的例子:

SELECT /*+ MAPJOIN(B) */

A.AUCTION_ID,

B.AUCTION_NAME,

A.TOTAL_AMT

FROM EDW_ORDER A JOIN AUCTION B

ON A.AUCTION_ID=B.AUCTION_ID;

  1. WHERE条件中分区字段的使用。在查询条件中,为了节约I/O,我们经常使用分区字段作为查询条件,但有几种情况,还是要注意有没有用对:

WHERE pt=<expression>, expression 中包括自定义的UDF或者random 函数, 计算作业还是要扫全表数据;

a LEFT OUTER JOIN b ON a.key=b.key where a.pt=’x’ and b.pt=’x’,在这个语句中 b.pt=’x’虽然我们指定是一个分区条件,但计算作业却扫描了全表,正确的写法应该是 a LEFT JOIN (SELECT * FROM b where pt=’x’) ON a.key=b.key WHERE a.pt=’x’;

  1. 节约存储。 在ODPS中存储也是要收费的,为了帮助大家节省存储空间,ODPS提供了数据生命周期的功能,即数据到达一段时间后,会自动被删除。 设置的方法非常简单,只需要一条语句即可:

ALTER TABLE   <table_name> SET LIFECYCLE days;

其中:days 为生命周期时间,只接受正整数,单位是天。当CurrentDate-LastModifiedTime 达到这个天数之后,数据会被回收。

生命周期可以加到临时表或者有分区的表上,这样帮助大家节省存储费用。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
26天前
|
SQL 存储 NoSQL
SQL vs. NoSQL:如何根据大数据需求选择合适数据库
【4月更文挑战第8天】本文对比分析了SQL与NoSQL数据库在大数据项目中的应用。SQL数据库适合结构化数据、强一致性和复杂事务处理,如金融系统,而NoSQL则适用于半结构化和非结构化数据、高并发及大数据场景,如社交网络。选择时应考虑业务需求、技术栈、团队经验和成本效益,以找到最佳解决方案。随着技术发展,NewSQL和Multi-model数据库也提供了更多选择。
26 0
|
2月前
|
SQL 运维 关系型数据库
一款 SQL 自动检查神器,再也不用担心 SQL 出错了,自动补全、回滚等功能大全
一款 SQL 自动检查神器,再也不用担心 SQL 出错了,自动补全、回滚等功能大全
23 0
|
8天前
|
SQL 分布式计算 DataWorks
MaxCompute产品使用合集之大数据计算MaxCompute即使用相同的SQL语句在DataWorks和Tunnel上执行,结果却不同,如何解决
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
7天前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在DataWorks中使用ODPS SQL时遇到"该文件对应引擎实例已失效,请重新选择可用的引擎实例"的错误提示”,是什么导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
31 0
|
7天前
|
分布式计算 DataWorks 调度
DataWorks产品使用合集之DataWorks中,填写ODPS SQL任务中的参数和分区信息如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
22 0
|
8天前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之在DataWorks的数据开发模式中,在presql和postsql中支持执行多条SQL语句如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
35 1
|
8天前
|
SQL 分布式计算 DataWorks
MaxCompute产品使用合集之阿里云MaxCompute对SQL语句的长度的长度限制是多少
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
8天前
|
SQL 分布式计算 大数据
MaxCompute操作报错合集之在sql 里嵌套查询时,查询条件带有instr时报错,如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
15天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
103478 1
|
2月前
|
SQL 弹性计算 分布式计算
Dataphin常见问题之执行 ODPS Sql 时抛出异常如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。