阿里云大数据利器Maxcompute学习之--分区表的使用

简介: 初学大数据Maxcompute时部分用户不是很熟悉Maxcompute分区表的概念和使用,那这篇文章来简单介绍下分区表的概念及使用场景。  实际上,分区在很多框架中都有这个概念,比如开源框架中的hive等。
初学大数据Maxcompute时部分用户不是很熟悉Maxcompute分区表的概念和使用,那这篇文章来简单介绍下分区表的概念及使用场景。
  实际上,分区在很多框架中都有这个概念,比如开源框架中的hive等。打个比喻,某城市粮仓里存放麦子,粮仓里按照县城分为很多区域,每个县城都有自己的一块地方,每个县城的麦子放在自己对应的区域上。如果上级领导来检查,想看某县城的麦子情况,那直接可以根据区域来迅速找到该县城的麦子。对应到Maxcompute分区表,粮仓相当于其中一张表,每个区域相当于以这个县城命名的分区。

一,分区表的概念
分区表指的是在创建表时指定分区空间,即指定表内的某几个字段作为分区列。在大多数情况下,用户可以将分区类比为文件系统下的目录。MaxCompute 将分区列的每个值作为一个分区(目录)。用户可以指定多级分区,即将表的多个字段作为表的分区,分区之间正如多级目录的关系。在使用数据时如果指定了需要访问的分区名称,则只会读取相应的分区,避免全表扫描,提高处理效率,降低费用。
使用示例:

建表: CREATE TABLE sd_data_test (
 userid STRING,
 shopid STRING,
 dtime DATETIME
)
PARTITIONED BY (
 part STRING,
 year STRING
)
LIFECYCLE 100000;

 
从其他表插入分区表:

insert into/overwrite table sd_data_test partition (part='450',year='2017') 
select xx, yy from sale_detail; 

 
查询:

select * from sd_data_test where part='543' AND year='2017'

 
这里查询的时候可以把分区字段当成普通字段来进行where条件的过滤。那插入后的数据是什么样子呢,可以在大数据开发套件中预览一下表结构




可以看到分区列相当于表中的字段,可以和表中的其他字段一样来使用。一般是放在where条件后抽取数据使用。
在表中实际的结构是什么样呢,其实分区相当于表中的子目录。那么如何查看呢,这里我使用odps的一个
eclipse插件下载表结构。安装eclipse插件可以参考https://help.aliyun.com/document_detail/27981.html?spm=5176.doc27800.6.756.04j9A9
调试代码时会下载表结构和小部分数据。sd_data_test的表结构如图:


  想必看到这个图就很清楚分区列和表字段的关系了。在查询的时候不会扫描全部表,而是去查某个分区目录下的数据,可以有效的提高查询效率。

二,静态分区,动态分区
静态分区和动态分区是对应的。所谓静态分区就是指在插入分区表的时候要指定分区值,比如上面例子

insert into/overwrite table sd_data_test partition (part='450',year='2017') 

 

这里指定的part和year的值,插入之前要指定具体的分区值。动态分区在插入前时候不指定,插入时指定源表的一个字段(多级分区指定多个),那么在插入的时候相同的字段值会自动创建成一个分区。

下面就介绍下动态分区具体的用法,假设一个场景用户有一年12个月的中国各个省份的数据资料。那想对这个表的数据进行分区,静态分区比较繁琐,可以使用动态分区。
假设 A表是源表非分区表,B表是分区表

CREATE TABLE A (
mon STRING,
pro STRING,
aa DATETIME,
bb STRING, cc STRING, dd STRING )

CREATE TABLE B(
xx1 STRING,
xx2 STRING,
xx3 DATETIME, xx4 STRING) PARTITIONED BY (month STRING,province STRING ) 动态插入,在select中指定按照哪两个字段(因为对应的分区列有两个)进行动态分区 。 insert into table B partition(month,province)select aa,bb,cc,dd,mon,pro from A mon,pro两个字段是动态分区的时候按照这两个字段进行分区,当然也可以按照一个分区列进行分区,但必须指定前面的高级分区列
例如 insert into table B partition(month=‘12’,province)select aa,bb,cc,dd, from A

三,odps分区的一些注意事项:

  • 目前,在使用动态分区功能的SQL中,在分布式环境下,单个进程最多只能输出512个动态分区,否则引发运行时异常;
  • 在现阶段,任意动态分区SQL不允许生成超过2000个动态分区,否则引发运行时异常;
  • 动态生成的分区值不允许为NULL,也不支持含有特殊字符和中文,否则会引发异常,如:“FAILED: ODPS-0123031:Partition exception - invalid dynamic partition value: province=xxx”;
  • 如果目标表有多级分区,在运行insert语句时允许指定部分分区为静态,但是静态分区必须是高级分区;

还有一点就是如果动态分区,来源表数据量非常大并且分区字段数据分布不均匀容易产生数据倾斜问题,建议先做好规划,比如先将数据量非常大的那个分区值过滤随后静态分区单独插入。

总结:合理设置分区,可以大幅度提高查询速度降低使用费用,因为Maxcompute收费一部分来源于sql计算,设置分区表在计算时指定计算的分区,参与计算的数据不会扫描全表而是指定的部分分区表数据。
另外从计算性能上来说,如果分区数据过多了也会适得其反影响性能,甚至会超出Maxcompute的限制。所以合理使用分区表会给计算业务带来很好的优化效果。

 


有对大数据技术感兴趣的,可以加笔者的微信 wx4085116.目前笔者已经从阿里离职,博客不代表阿里立场。笔者开了一个大数据培训班。有兴趣的加我。


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
14天前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何将CSV文件从阿里云OSS同步到ODPS表,并且使用列作为表分区
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
DataWorks产品使用合集之如何将CSV文件从阿里云OSS同步到ODPS表,并且使用列作为表分区
|
1天前
|
机器学习/深度学习 分布式计算 大数据
MaxCompute产品使用问题之如何优化大数据量的查询和处理
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
1天前
|
分布式计算 NoSQL 大数据
MaxCompute产品使用问题之数据在redis里可以通过接口调用到大数据计算吗
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
16天前
|
分布式计算 大数据 Java
MaxCompute产品使用合集之在datawoks的datastudio和odpscmd里执行时间没有问题,但是用jdbc连接大数据计算MaxCompute获取getdate()时间就不对,该怎么办
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
19天前
|
弹性计算 Ubuntu Linux
为什么要学习去使用云服务器,外网 IP能干什么,MAC使用Termius连接阿里云服务器。保姆级教学
为什么要学习去使用云服务器,外网 IP能干什么,MAC使用Termius连接阿里云服务器。保姆级教学
|
29天前
|
存储 分布式计算 DataWorks
【阿里云云原生专栏】云原生下的数据湖建设:阿里云MaxCompute与DataWorks解决方案
【5月更文挑战第26天】在数字化时代,数据成为企业创新的关键。阿里云MaxCompute和DataWorks提供了一种构建高效、可扩展数据湖的解决方案。数据湖允许存储和分析大量多格式数据,具备高灵活性和扩展性。MaxCompute是PB级数据仓库服务,擅长结构化数据处理;DataWorks则是一站式大数据协同平台,支持数据集成、ETL和治理。通过DataWorks收集数据,MaxCompute存储和处理,企业可以实现高效的数据分析和挖掘,从而提升业务洞察和竞争力。
385 0
|
SQL 人工智能 分布式计算
MaxCompute平台非标准日期和气象数据处理方法--以电力AI赛为例
MaxCompute平台支持的日期格式通常是对齐的日期格式诸如20170725或2017/07/25这种,而本次电力AI赛提供的日期格式却是未对齐的非标准的日期格式2016/1/1这种,使得无法直接使用ODPS SQL中的日期函数来进行处理。
5285 0
|
2天前
|
存储 分布式计算 专有云
MaxCompute产品使用问题之阿里公有云的数据如何迁移到阿里专有云
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
22 10
|
1天前
|
分布式计算 大数据 关系型数据库
MaxCompute产品使用问题之如何查看数据离线同步每天从MySQL抽取的数据量
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
1天前
|
分布式计算 大数据 Java
MaxCompute产品使用问题之是否可以恢复最近两天生命周期清理的数据
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。

热门文章

最新文章