MaxCompute基本概念和数据类型
MaxCompute基本概念
MaxCompute的核⼼概念主要包括:项⽬、表、分区、⽣命周期、资源、函数、任务、任务实例(实例)、ACID语义等。MaxComopute 常⽤术语表参见:。
项⽬(Project)
项⽬(Project)是MaxCompute的基本组织单元,它类似于传统数据库的Database或Schema的概念,是进⾏多⽤户隔离和访问控制的主要边界。项⽬中包含多个对象,例如表(Table)、资源(Resource)、函数(Function)和实例(Instance)等。
⼀个⽤户可以同时拥有多个项⽬的权限。通过安全授权,可以在⼀个项⽬中访问另⼀个项⽬中的对象,详情请参见。
可以通过use project命令进⼊⼀个项⽬,例如使⽤如下命令进⼊⼀个名为my_project的项⽬,可以直接操作该项⽬下的对象,例如表、资源、函数和实例等。
--进⼊⼀个名为my_project的项⽬空间。
use my_project;
表(Table)
表是MaxCompute的数据存储单元。它在逻辑上是由⾏和列组成的⼆维结构,每⾏代表⼀条记录,每列表⽰相同数据类型的⼀个字段,⼀条记录可以包含⼀个或多个列,表的结构由各个列的名称和类型构成。MaxCompute中不同类型计算任务的操作对象(输⼊、输出)都是表。可以创建表、删除表以及导⼊数据到表或从表中导出数据。
MaxCompute的表格有两种类型:内部表和外部表(MaxCompute2.0版本开始⽀持外部表)。
对于内部表,所有的数据都被存储在MaxCompute中,表中列的数据类型可以是MaxCompute⽀持的任意⼀种数据类型。
对于外部表,MaxCompute并不真正持有数据,表格的数据可以存放在或中 。MaxCompute仅会记录表格的Meta信息,您可以通过MaxCompute的外部表机制处理OSS或OTS上的⾮结构化数据,例如视频、⾳频、基因、⽓象、地理信息等。
分区(Partitions)
分区表是指拥有分区空间的表,即在创建表时指定表内的⼀个或者某⼏个字段作为分区列。分区表实际就是对应分布式⽂件系统上的独⽴的⽂件夹,⼀个分区对应⼀个⽂件夹,⽂件夹下是对应分区所有的数据⽂件。
分区可以理解为分类,通过分类把不同类型的数据放到不同的⽬录下。分类的标准就是分区字段,可以是⼀个,也可以是多个。MaxCompute将分区列的每个值作为⼀个分区(⽬录),可以指定多级分区,即将表的多个字段作为表的分区,分区之间类似多级⽬录的关系。
分区表的意义在于优化查询。查询表时通过WHERE⼦句查询指定所需查询的分区,避免全表扫描,提⾼处理效率,降低计算费⽤。使⽤数据时,如果指定需要访问的分区名称,则只会读取相应的分区。
分区使⽤⽰例:
--创建⼀个⼆级分区表,以⽇期为⼀级分区,地域为⼆级分区
CREATE TABLE src (
key string,
value bigint
)
PARTITIONED BY (pt string, region string);
--正确使⽤⽅式。MaxCompute在⽣成查询计划时只会将'20170601'分区下region为'hangzhou'⼆级分区的数据纳⼊输⼊中。
select * from src where pt='20170601'and region='hangzhou';
MaxCompute2.0数据类型版本⽀持的分区字段为TINYINT、SMALLINT、INT、BIGINT、VARCHAR、STRING。
⽣命周期(Lifecycle)
MaxCompute表的⽣命周期(Lifecycle),指表(分区)数据从最后⼀次更新的时间算起,在经过指定的时间后没有变动,则此表(分区)将被MaxCompute⾃动回收。这个指定的时间就是⽣命周期。
⽣命周期单位为天,取值为正整数。
对于⾮分区表,如果表数据在⽣命周期内没有被修改,经过指定天数后此表将会被MaxCompute⾃动
回收(类似DROP TABLE操作)。⽣命周期从最后⼀次表数据被修改的时间(LastDataModifiedTime)起开始计算。
对于分区表,每个分区可以分别被回收。在⽣命周期内未被修改数据的分区,经过指定的天数后此分区将会被回收,否则会被保留。每个分区的⽣命周期是从最后⼀次分区数据被修改的时间(LastDataModifiedTime)起开始计算。不同于⾮分区表,分区表的最后⼀个分区被回收后,该表不会被删除。
⽣命周期主要提供定期回收表或分区的功能,每天根据服务的繁忙程度,不定时回收。不能确保表或分区的⽣命周期到期后,⽴刻被回收。
只能在表级别设置⽣命周期,不能在分区级设置⽣命周期。为分区表指定的⽣命周期,适⽤于该表所有的分区。创建表时即可指定⽣命周期。
如果没有为表指定⽣命周期,则表(分区)不会根据⽣命周期规则被MaxCompute⾃动回收。
资源(Resource)
资源(Resource)是MaxCompute的特有概念,MaxCompute的UDF和MapReduce功能需要依赖资源来完成,如下所⽰:
SQL UDF:编写UDF后,需要将编译好的Jar包以资源的形式上传到MaxCompute。运⾏此UDF时,MaxCompute会⾃动下载这个Jar包,获取代码来运⾏UDF。上传Jar包的过程就是在MaxCompute上创建资源的过程,这个Jar包是MaxCompute资源的⼀种。
MapReduce:编写MapReduce程序后,将编译好的Jar包作为⼀种资源上传到MaxCompute。运⾏MapReduce作业
时,MapReduce框架会⾃动下载这个Jar资源获取代码。同样可以将⽂本⽂件以及MaxCompute中的表作为不同类型的资源上传到MaxCompute,在UDF及MapReduce的运⾏过程中读取、使⽤这些资源。
MaxCompute⽀持上传的单个资源⼤⼩上限为500MB,资源包括以下⼏种类型:
File类型。
Table类型:MaxCompute中的表。MapReduce引⽤的table类型资源中,table字段类型⽬前只⽀持BIGINT、DOUBLE、STRING、DATETIME、BOOLEAN,其他类型暂未⽀持。
Jar类型:编译好的Java Jar包。
Archive类型:通过资源名称中的后缀识别压缩类型,⽀持的压缩⽂件类型包括.zip/.tgz/./.tar/jar。
函数(Function)
MaxCompute您提供了SQL计算功能,可以在MaxCompute SQL中使⽤系统的完成⼀定的计算和计数功能。但当内建函数⽆法满⾜要求时,可以使⽤MaxCompute提供的Java编程接⼝开发⾃定义函数(User Defined Function,以下简称UDF)。
可以进⼀步分为标量值函数(UDF),⾃定义聚合函数(UDAF)和⾃定义表值函数(UDTF)三种类型。
使⽤步骤:在开发完成UDF代码后,需要将代码编译成Jar包,并将此Jar包以Jar资源的形式上传到MaxCompute,最后在MaxCompute 中注册此UDF。具体可见:。
任务(Task)
任务(Task)是MaxCompute的基本计算单元,SQL及MapReduce功能都是通过任务完成的。
对于提交的⼤多数任务,特别是计算型任务,例如SQL DML语句,MapReduce,MaxCompute会对其进⾏解析,得到任务的执⾏计划。执⾏计划由具有依赖关系的多个执⾏阶段(Stage)构成。
decimal是整数数据类型⽬前,执⾏计划逻辑上可以被看做⼀个有向图,图中的点是执⾏阶段,各个执⾏阶段的依赖关系是图的边。MaxCompute会依照图(执⾏计划)中的依赖关系执⾏各个阶段。在同⼀个执⾏阶段内,会有多个进程,也称之为Worker,共同完成该执⾏阶段的计算⼯作。同⼀个执⾏阶段的不同Worker只是处理的数据不同,执⾏逻辑完全相同。计算型任务在执⾏时,会被实例化,您可以对这个实例(Instance)进⾏操作,例如、等。
部分MaxCompute任务并不是计算型的任务,例如SQL中的DDL语句,这些任务本质上仅需要读取、修改MaxCompute中的元数据信息。因此,这些任务⽆法被解析出执⾏计划。
任务实例
在MaxCompute中,部分Task在执⾏时会被实例化,以MaxCompute实例(下⽂简称为实例或Instance)的形式存在。实例会经历运⾏(Running)和结束(Terminated)两个阶段。
运⾏阶段的实例状态为Running(运⾏中),⽽结束阶段则会有Success(成功)、Failed(失败)和Canceled(被取消)三种状态。可以根据运⾏任务时MaxCompute给出的实例ID进⾏查询、改变任务的状态等操作,⽰例如下。
--查看某实例的状态。
status instance_id;
--停⽌某实例,将其状态设置为Canceled。
kill instance_id;
--查看某实例的运⾏⽇志。
wait instance_id;
MaxCompute数据类型
数据类型版本
MaxCompute 2.0推出之后,MaxCompute中包含的数据类型版本存在三个:
1. MaxCompute 1.0数据类型
2. MaxCompute 2.0数据类型
3. MaxCompute兼容Hive数据类型
MaxCompute设置数据类型版本属性的参数共有3个:
pe.system.odps2:MaxCompute 2.0数据类型版本的开关,属性值为True和False。
odps.sql.decimal.odps2:MaxCompute 2.0的Decimal数据类型的开关,属性值为True和False。
odps.sql.hivepatible:MaxCompute Hive兼容模式(即部分数据类型和SQL⾏为兼容Hive)数据类型版本的开关,属性值为True和False。
在新增项⽬时MaxCompute可以对3个版本的数据类型进⾏选择,各个版本默认设置如下:
1. MaxCompute 1.0数据类型版本
setproject pe.system.odps2=false;--关闭MaxCompute 2.0数据类型。
setproject odps.sql.decimal.odps2=false;--关闭Decimal 2.0数据类型。
setproject odps.sql.hivepatible=false;--关闭Hive兼容模式。
适⽤于早期使⽤的MaxCompute项⽬,且该项⽬依赖的产品组件不⽀持2.0数据类型版本。
2. MaxCompute 2.0数据类型版本
setproject pe.system.odps2=true;--打开MaxCompute 2.0数据类型。
setproject odps.sql.decimal.odps2=true;--打开Decimal 2.0数据类型。
setproject odps.sql.hivepatible=false;--关闭Hive兼容模式。
适⽤于在2020年04⽉之前⽆存量数据的MaxCompute项⽬,且该项⽬依赖的产品组件⽀持2.0数据类型版本。
查看和修改数据类型
--查看项⽬数据类型版本。
setproject;
--开启/关闭MaxCompute2.0数据类型版本。setproject pe.system.odps2=true/false;--开启/关闭decimal2.0数据类型。
setproject odps.sql.decimal.odps2=true/false;
--开启/关闭hive兼容模式数据类型版本。setproject odps.sql.hivepatible=true/false;
MaxCompute 1.0数据类型
类型常量⽰例描述
BIGINT100000000000L、-1L 64位有符号整型。
取值范围:-2 63 +1~2 63 -1。
DOUBLE 3.1415926 1E+764位⼆进制浮点型。
DECIMAL 3.5BD、
99999999999.9999999BD
10进制精确数字类型。
整型部分取值范围:-10 36 +1~10 36 -1, ⼩数部分精确到10 -18 。固定54位数字,其中
整数部分36位,⼩数位为18位。
STRING “abc”、’bcd’、
”alibaba”、‘inc’
字符串类型,⽬前长度限制为8MB。
DATETIME DATETIME ‘2017-11-11
00:00:00’
⽇期时间类型。
取值范围:0000年1⽉1⽇~9999年12⽉31⽇,精确到毫秒。
BOOLEAN True、False BOOLEAN类型。
取值范围:True、False。
对于上述数据类型说明如下:
上述的各种数据类型均可为NULL。
整型常量的语义默认为BIGINT类型。如果常量过长,超过了BIGINT的值域(例如1,000,000,000,000,
000,000,000,000)则会被作为DOUBLE类型处理。例如SELECT 1 + a;中的整型常量1会被作为BIGINT类型处理。
参数涉及2.0数据类型的内置函数,在1.0数据类型版本下⽆法正常使⽤。
分区表的分区列的数据类型只⽀持STRING类型。
MaxCompute 2.0数据类型
类型常量⽰例描述
TINYINT1Y、-127Y 8位有符号整型。
取值范围:-128~127。
SMALLINT32767S、-100S 16位有符号整型。
取值范围:-32768~32767。
INT1000、-1564578732位有符号整型。
取值范围:-2 31 ~2 31 -1。
BIGINT100000000000L、-1L 64位有符号整型。
取值范围:-2 63 +1~2 63 -1。
BINARY⽆⼆进制数据类型,⽬前长度限制为8MB。FLOAT⽆32位⼆进制浮点型。
DOUBLE 3.1415926 1E+764位⼆进制浮点型。
⽀持的复杂数据类型:
以上数据类型的具体说明,以及MaxCompute各类数据类型的区别,详见:。
Hive兼容数据类型
Hive兼容数据类型版本⽀持的基础数据类型与2.0数据类型定义基本⼀致,只有Decimal数据类型在两个版本下有些差异。具体见:。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论