阿里云大数据ACP认证知识点梳理5——基础SQL语句(DML部分)

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: MAXCOMPUTE所用典型SQL语句(DML部分)

insert overwrite table sale_detail_insert partition (sale_date='2013', region='china')
insert into table sale_detail_insert partition (sale_date='2013', region='china')
注:Insert into与Insert overwrite的区别是:Insert into会向表或表的分区中追加数据,而Insert overwrite会在向表或分区中插入数据前清空表中的原有数据。在insert overwrite|into后需要加入table关键字,不是直接使用tablename。当Insert的目标表是分区表时,指定分区值,语法中不允许使用函数等表达式。目前INSERT OVERWRITE还不支持指定插入列的功能,暂时只能用INSERT INTO。不支持insert into到hash clustering表。

insert overwrite table sale_detail_insert partition (sale_date='2013', region='china')
select shop_name, customer_id, total_price, sale_date, region from sale_detail;
-- 报错返回,sale_date,region为分区列,不允许出现在静态分区的insert语句中。
注:向某个分区插入数据时,分区列不允许出现在select列表中。

create table sale_detail_multi like sale_detail;
from sale_detail
insert overwrite table sale_detail_multi partition (sale_date='2010', region='china' )
select shop_name, customer_id, total_price where .....
insert overwrite table sale_detail_multi partition (sale_date='2011', region='china' )
select shop_name, customer_id, total_price where .....;
注:MaxCompute SQL支持在一个语句中插入不同的结果表或者分区实现多路输出。一般情况下,单个SQL中最多可以写256路输出,超过256路,则报语法错误。对于分区表,同一个目标分区不允许出现多次。对于未分区表,该表不能出现多次。对于同一张分区表的不同分区,不能同时有Insert overwrite和Insert into操作,否则报错返回。

insert overwrite table sale_detail_dypart partition (sale_date, region)
select shop_name,customer_id,total_price,sale_date,region from sale_detail;

注:可以在分区中指定一个分区列名,但不给出值。相应地,在select子句中的对应列来提供分区的值。此时sale_detail表中,sale_date的值决定目标表的sale_date分区值,region的值决定目标表的region分区值。动态分区中,select_statement字段和目标表动态分区的对应是按字段顺序决定的。如该示例中,select语句若写成select shop_name,customer_id,total_price,region,sale_date from sale_detail;,则sale_detail表中,region值决定决定目标表的 sale_date分区值,sale_date的值决定目标表的region分区值。动态分区列必须在select列表中(如sale_date和region).

insert overwrite table sales partition (region='china', sale_date)
select shop_name,customer_id,total_price,region from sale_detail;

注:失败返回,不能仅指定低级子分区,而动态插入高级分区。

select 语句

select * from sale_detail;

select shop_name from sale_detail;

select * from sale_detail where shop_name like 'hang%';

注:当使用Select语句屏显时,目前最多只能显示10000行结果。当Select作为子句时,无此限制,Select子句会将全部结果返回给上层查询。select分区表时禁止全表扫描。

select * from (select region from sale_detail) t where region = 'shanghai';
注:嵌套子查询中,select region from sale_detail的结果暂时存放在t中作为一个中转,查询结果反馈到上层就是,select * from t where region='shanghai';

screenshot

注:where子句支持的过滤条件,不等于为<>不是=!

select sale_detail.* from sale_detail where sale_detail.sale_date >= '2008' and sale_detail.sale_date <= '2014';

注:用and语句设定查询的分区范围。

select sale_detail.* from sale_detail where sale_detail.sale_date between '2008' and  '2014';

注:用between、and语句设定查询的分区范围。

group by语句:

select region from sale_detail group by region;
-- 直接使用输入表列名作为group by的列,可以运行
select sum(total_price) from sale_detail group by region;
-- 以region值分组,返回每一组的销售额总量,可以运行
select region, sum(total_price) from sale_detail group by region;
-- 以region值分组,返回每一组的region值(组内唯一)及销售额总量,可以运行
select region as r from sale_detail group by r;
-- 使用select列的别名运行,报错返回
select 2 + total_price as r from sale_detail group by 2 + total_price;
-- 必须使用列的完整表达式
select region, total_price from sale_detail group by region;
-- 报错返回,select的所有列中,没有使用聚合函数的列,必须出现在group by中
select region, total_price from sale_detail group by region, total_price;
-- 可以运行

注:分组查询,一般group by和聚合函数配合使用。在Select中包含聚合函数时有以下规则:用group by的key可以是输入表的列名也可以是由输入表的列构成的表达式,不允许是Select语句的输出列的别名。group by操作通常是先于Select操作的,因此group by只能接受输入表的列或表达式为key。

ORDER BY语句:

注:对所有数据按照某几列进行全局排序。如果您希望按照降序对记录进行排序,可以使用DESC关键字。由于是全局排序,order by必须与limit共同使用。在使用order by排序时,Null会被认为比任何值都小,这个行为与MySQL一致,但是与Oracle不一致。与group by不同,order by后面必须加Select列的别名,当Select某列时,如果没有指定列的别名,将列名作为列的别名。

select * from sale_detail order by region;
-- 报错返回,order by没有与limit共同使用
select * from sale_detail order by region limit 100;
select region as r from sale_detail order by region limit 100;
-- 报错返回,order by后面必须加列的别名。
select region as r from sale_detail order by r limit 100;

distribute by语句

select region from sale_detail distribute by region;
-- 列名即是别名,可以运行
select region as r from sale_detail distribute by region;
-- 报错返回,后面必须加列的别名。
select region as r from sale_detail distribute by r;

sort by语句:

注:局部排序,语句前必须加distribute by。实际上sort by是对distribute by的结果进行局部排序。必须使用Select的输出列别名。

select region from sale_detail distribute by region sort by region;
select region as r from sale_detail sort by region;
-- 没有distribute by,报错退出

select * from (select shop_name from sale_detail) a;

注:子查询必须要有别名。

select * from sale_detail where region = 'hangzhou'
        union all
select * from sale_detail where region = 'shanghai';

注:UNION ALL将两个或多个Select操作返回的数据集联合成一个数据集,如果结果有重复行时,会返回所有符合条件的行,不进行重复行的去重处理。union all/union操作对应的各个查询的列个数和类型必须一致(如果类型不一致,需保证经过隐式转换后类型是一致的)。一般情况下,MaxCompute最多允许256个表的union all/union,超过此限制报语法错误。

JOIN语句

左连接:
select a.shop_name as ashop, b.shop_name as bshop from shop a

    **left outer join** sale_detail b **on** a.shop_name=b.shop_name;
-- 由于表shop及sale_detail中都有shop_name列,因此需要在select子句中使用别名进行区分。

右连接:
select a.shop_name as ashop, b.shop_name as bshop from shop a

    **right outer join** sale_detail b **on** a.shop_name=b.shop_name;

全连接:
select a.shop_name as ashop, b.shop_name as bshop from shop a

   ** full outer join** sale_detail b **on** a.shop_name=b.shop_name;

注:连接条件,只允许and连接的等值条件。只有在MAPJOIN中,可以使用不等值连接或者使用or连接多个条件。

MAPJOIN语句:

select /* + mapjoin(a) */
        a.shop_name,
        b.customer_id,
        b.total_price
    from shop a join sale_detail b
    on a.shop_name = b.shop_name;

注:left outer join的左表必须是大表。right outer join的右表必须是大表。inner join左表或右表均可以作为大表。full outer join不能使用MapJoin。MapJoin支持小表为子查询。使用MapJoin时,需要引用小表或是子查询时,需要引用别名。在MapJoin中,可以使用不等值连接或者使用or连接多个条件。目前,MaxCompute在MapJoin中最多支持指定8张小表,否则报语法错误。如果使用MapJoin,则所有小表占用的内存总和不得超过512MB。多个表Join时,最左边的两个表不能同时是MapJoin的表。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
3月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
4月前
|
SQL 大数据 数据挖掘
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
209 35
|
4月前
|
SQL 容灾 关系型数据库
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。
251 0
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
|
8月前
|
SQL 算法 大数据
为什么大数据平台会回归SQL
在大数据领域,尽管非结构化数据占据了大数据平台80%以上的存储空间,结构化数据分析依然是核心任务。SQL因其广泛的应用基础和易于上手的特点成为大数据处理的主要语言,各大厂商纷纷支持SQL以提高市场竞争力。然而,SQL在处理复杂计算时表现出的性能和开发效率低下问题日益凸显,如难以充分利用现代硬件能力、复杂SQL优化困难等。为了解决这些问题,出现了像SPL这样的开源计算引擎,它通过提供更高效的开发体验和计算性能,以及对多种数据源的支持,为大数据处理带来了新的解决方案。
|
8月前
|
SQL 存储 算法
比 SQL 快出数量级的大数据计算技术
SQL 是大数据计算中最常用的工具,但在实际应用中,SQL 经常跑得很慢,浪费大量硬件资源。例如,某银行的反洗钱计算在 11 节点的 Vertica 集群上跑了 1.5 小时,而用 SPL 重写后,单机只需 26 秒。类似地,电商漏斗运算和时空碰撞任务在使用 SPL 后,性能也大幅提升。这是因为 SQL 无法写出低复杂度的算法,而 SPL 提供了更强大的数据类型和基础运算,能够实现高效计算。
|
10月前
|
SQL 机器学习/深度学习 自然语言处理
Text-to-SQL技术演进 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法剖析
本文主要介绍了阿里云OpenSearch在Text-to-SQL任务中的最新进展和技术细节。
|
9月前
|
SQL 消息中间件 分布式计算
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
263 0
|
9月前
|
SQL 大数据
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
187 0
|
9月前
|
SQL 大数据 API
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
170 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问