系统架构
您可以通过如下系统架构图了解MaxCompute数据的处理流程。
MaxCompute中表的类型如下。
基本概念
- 项目
项目(Project)是MaxCompute的基本组织单元,类似于传统数据库的Database或Schema。项目是进行多用户隔离和访问控制的主要边界。一个用户可以同时拥有多个项目的权限。您通过安全授权可以跨项目访问对象,例如表(Table)、资源(Resource)、函数(Function)和实例(Instance)。
- 表
表(Table)是MaxCompute的数据存储单元。它在逻辑上是由行和列组成的二维结构,每行代表一条记录,每列表示相同数据类型的一个字段。一条记录可以包含一个或多个列,各个列的名称和数据类型构成表的Schema。
MaxCompute的表有两种类型:
- 内部表:所有数据都存储在MaxCompute中,内部表的列可以是MaxCompute支持的任意一种数据类型。本文所介绍的相关规范只针对此类表。
- 外部表:数据不存储在MaxCompute中,表数据可以存放在OSS或OTS。MaxCompute仅会记录表格的Meta信息。您可以通过MaxCompute的外部表机制处理OSS或OTS上的非结构化数据,例如视频、音频、基因、气象或地理信息等。本文所介绍的相关规范不包含此类表。
- 分区
您需要在创建表时指定分区空间,即指定表内的某几个字段作为分区列。
分区的作用类似于分类,即通过分类把不同类型的数据放到不同的目录下。分类的标准是分区字段,即不同的字段代表不同的分类标准。分区字段的个数没有限制,您可以设置一个或多个分区字段。
分区表用于优化查询,查询表时通过WHERE语句指定待查询的分区,避免全表扫描,提高处理效率,降低费用。
- 建表语法如下,详情请参见表操作。
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name [, col_name, ...]) [SORTED BY (col_name [ASC | DESC] [, col_name [ASC | DESC] ...])] INTO number_of_buckets BUCKETS] -- 用于创建Hash Clustering表时设置表的Shuffle和Sort属性。 [STORED BY StorageHandler] -- 仅限外部表 [WITH SERDEPROPERTIES (Options)] -- 仅限外部表 [LOCATION OSSLocation] -- 仅限外部表 [LIFECYCLE days] [AS select_statement]; CREATE TABLE [IF NOT EXISTS] table_name LIKE existing_table_name;
- 数据类型
- 基础数据类型
类型 是否新增 常量定义 描述 TINYINT 是 1Y、-127Y 8位有符号整形。范围:-128~127。 SMALLINT 是 32767S、-100S 16位有符号整形。 范围:-32768~32767。 INT 是 1000、-15645787 32位有符号整形。范围:-231~231 -1。 BIGINT 否 100000000000L、-1L 64位有符号整形。范围:-263+1~263-1。 FLOAT 是 无 32位二进制浮点型。 DOUBLE 否 3.1415926 1E+7 8字节双精度浮点数或64位二进制浮点型。 DECIMAL 否 3.5BD、99999999999.9999999BD 10进制精确数字类型。整形部分范围:-1036+1~1036-1。小数部分精确到10-18 。 VARCHAR(n) 是 无 变长字符类型,n为长度。取值范围:1~65535。 STRING 否 "abc"、'bcd'、"alibaba"、"inc"
字符串类型。长度限制为8 MB。 BINARY 是 无 二进制数据类型。长度限制为8 MB。 DATETIME 否 DATETIME '2017-11-11 00:00:00'
日期时间类型,使用东八区时间作为系统标准时间。范围:0000年1月1日~9999年12月31日,精确到毫秒。 TIMESTAMP 是 TIMESTAMP '2017-11-11 00:00:00.123456789'
与时区无关的时间戳类型。范围:0000年1月1日~9999年12月31日23.59:59.999999999,精确到纳秒。 BOOLEAN 否 TRUE、FALSE 布尔类型。值为TRUE或FALSE。 - 复杂数据类型
类型 定义方法 构造方法 ARRAY array、array
array(1, 2, 3)、array(array(1, 2)、array(3, 4))
MAP map、map<smallint, array>
map("k1", "v1", "k2", "v2")、map(1S, array('a', 'b'), 2S, array('x', 'y’))
STRUCT struct、struct<field1:bigint, field2:array, field3:map>
named_struct('x', 1, 'y', 2)、 named_struct('field1', 100L, 'field2', array(1, 2),
'field3', map(1, 100, 2, 200))您可以执行如下命令打开复杂数据类型:
- Session级别,需要将set命令和SQL命令一起提交。
set odps.sql.type.system.odps2=true;
- Project级别,需要Project Owner执行。
setproject odps.sql.type.system.odps2=true;
说明- 数据精确的场景,不建议使用DOUBLE类型。
- Round函数对DOUBLE类型字段的处理结果不一定是准确的四舍五入结果。
- 当您在函数Round、Trunc、Floor、Ceil和Bround中使用DOUBLE类型数据时,需要注意精度问题。
- Session级别,需要将set命令和SQL命令一起提交。
- 基础数据类型
表的限制
边界名 | 最大值 | 限制类别 | 说明 |
---|---|---|---|
表名长度 | 128字节(byte) | 长度限制 | 表名和列名中不能出现特殊字符,只能出现英文字母a~z、A~Z、数字和下划线,且必须以字母开头。 |
注释长度 | 1024字节(byte) | 长度限制 | 注释内容为长度不超过1024字节(byte)的有效字符串。 |
表的列定义 | 1200个 | 数量限制 | 单表的列个数最多为1200个。 |
单表分区数 | 60000个 | 数量限制 | 单表最多允许有60000个分区。 |
表的分区层级 | 6级 | 数量限制 | 表的分区层级不能超过6。 |
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/159223.html