阿里云大数据专业认证(ACP级)学习笔记(精简):
近百个视频精华考点总结,眼都快肿了。
ODPS
流计算用的是ODPS,ODPS的所有对象都隶属于项目空间。
项目空间project
表table:表中的列支持Bigint长整、Double双精、String字符串、Boolean布尔型、Datetime日期类型
进行不同类型的计算任务的时候操作对象不管是输入还是输出,都是表。所有的数据都存储在表里,支持表分区,支持依赖于表的视图。用户可以创建表,删除表
分区Partition:它设计分区的初衷是为了提高效率,我们在创建表的时候,可以指定表的分区,也可以在创建完成之后,去修改表的分区,比如我们可以指定表里面的某几个字段,作为分区列
任务Task:任务是ODS一个基本的计算单元,无论我们是用ODPS SQL,或者是用MapReduce这种功能去做一些操作的时候,实际上它都是在通过任务来完成的
资源Resource:资源是ODPS一个特有的概念,比如说,如果我们想使用ODPS的自定义函数,就是UDF,或者是MapReduce, 这个时候我们就需要依赖资源来完成
按用户权限划分:所有者(Owner)、管理员(Admin)、普通用户(User)
Task,Job,Instance
任务(Task):单个SQL Query或者MapReduce程序统称为一个任务。
工作流(Workflow):是个有向无环图(DAG),描述各个Task之间的依赖关系和约束。
作业(Job):由一个或者多个Task以及表示其执行次序关系的工作流(Workflow)组成。
作业实例(Instace):当作业被提交至系统中执行时,该作业就会拥有一个作业实例,一个Job多次运行就会有多个实例。实例保存了执行时的快照(Snapshot)、返回状态等。
作业是一个静态概念,作业对象对应了一个XML文件
作业实例Instace是一个动态概念,每个实例Instace只能运行一次。
ODPS适用于:
1、基于SQL构建大规模的数据仓库系统和BI系统
2、基于DAG/Graph构建大型分步式应用系统
DAG(有向无环图):就是以工作流的方式来组织任务,来组织成一个Job,然后我们可以去执行这个Job;
Graph(图运算):图运算的特点就是说快速迭代,就是我们首先定义节点,就是每一个节点都是一个运算,我们把这个运算预先定义好,然后节点之间的连线我们叫做边,这个边呢就描述了这个节点之间的关系,那么一个数据过来之后,我们可以快速的使用Graph来进行这种迭代运算
3、基于统计和机器学习的大数据统计和数据挖掘类的工作
ODPS有一个包叫做PAI,它是专门集成了一些,常见的机器运算法的一个包,可以使用这个工具,去做一些这种统计类的或者这种人工智能类或者机器学习类的这种大型的应用
MaxCompute计量计费:
计费单元:项目(project)
计费周期:天
1、存储计费:阶梯计费。数据压缩后计费(约5倍),每小时采集后计算平均值/天,存储量<512M时,1分/天
2、计算计费:
(1)按I/O后付费(作业执行后收费,共享公共的计算资源)
在第二天汇总前一天的作业信息,6点出帐单,不成功的计算不计费。
一次SQL计算费用=计算输入数据量*SQL复杂度*SQL价格
输入数据量:列剪裁、分区过滤
SQL复杂度:关键字个数,cost sql(用于获得复杂度的结果)
SQL价格:0.3元/GB
(2)按CU预付费(提前预定付费,独占且只享有购买的资源)
CU:Compute Unit,MaxCompute预留购买的资源
1CU:4GB内存、1核CPU、150元/月
资源使用时,1个进程占用1个CU,调用UDF需要额外占用1个CU,可以用命令调整每个进程占用的内存。
(3)计费方式转换
新用户:按I/0后付费,估算:存储/计算=1/6
项目用户:开发环境(按CU预付费)、生产环境(按I/O后付费)
转换时立即生效(如有任务要等下次运行后才生效)、CU预)转I/O后)包月费不退还。
3、下载计费:公网、VPC、经典网络
一次下载费用=下载数据量*下载价格
价格:0.8元/GB
下载数据量:HTTP Body,Protobuff编码
通过公网下载、华东1VPC,收费
通过经典网络下载、华东2VPC、华北2VPC,不收费
欠费状态超过24小时会停机。停机超过14天,项目释放。
作业详细信息:desc instance <instance id>;
出帐时间:以天为单位,计费周期结束后3小时内,最长不超过6小时。
项目空间数据保护默认是关闭的。
ODPS客户端:
odpd-config.ini
>odpscmd
>use yuxiang_01;
>list tables;
>list resources;
>desc t_people;
>read t_people;
>count t_people;
>odpscmd -e "read t_people;read t_people_p;":批量执行
>odpscmd -e "read t_people;read t_people_p;" -k 2;:从第几条开始执行
>oppscmd -f d:\check.cmd; :执行命令文件;
Tunnel下载命令:
有分区的表一定要指定上传的分区
有分区的表一定要指定下载的分区
-dbr,(如果上传记录有错误就丢掉,默认值false,意思是出错就退出)
-fd,列的分隔符
-h,列名要不要
自定义函数:
UDF:用户自定义标量函数。输入输出是一对一,输入一条输出一条。
UDTF:用户自定义表值函数。输入一条,输出多条。
UDAF:用户自定义聚组函数。输入入多条,输出一条。
安全管理与授权
项目空间创建者自动成为Owner。
如果用户还有角色,要先收回角色,才能移除用户权限。
移除用户时,要保证该用户没有被赋予角色权限。
虽被移除了项目,但权限仍保留在项目中,若用户回归项目,自动激活原有权限。(停薪留职)
缺少角色(Admin)
Admin可以:
1、访问项目空间所有对象
2、进行用户与角色的管理
3、对用户和角色进行授权
相比Owner,Admin不能:
1、将Admin角色赋给别的用户
2、不能设定项目空间的安全配置
3、不能修改项目空间的鉴权模型
角色的限制:
1、Admin角色的权限不能被修改
2、没被使用的角色才可以被删除
授权的三个要求:主体Subject、客体Object、操作Action
授权两种方法:
1、ACL基于对象的授权
grant 权限 on 表/对象 to 用户
授予:GRANT <privileges> ON <object> to <subject>;
收回:REVOKE <privileges> ON <object> to <subject>;
2、Policy基本策略的授权
数据保护机制(项目空间保护)
设置ProjectProtection规则:数据只能流入,不能流出,默认为false
set ProjectProtection=true
设置true后,各种数据导出操作将失效。
项目空间保护下的合规数据流出:
1、设置项目保护ProjectProtection的例外策略exception,json格式
2、将两个相关的项目空间设置为互信TrustedProject
3、package授权(优先级高于项目保护)
ODPS SQL:
1、是个数据仓库工具,Query解析后,计算和存储交由底层的飞天实现。
2、支持常用的SQL语法,包括窗口函数。
3、可以看做对标准SQL的支持,但是不能简单等同于数据库。
4、不支持事务、主外键约束、索引等。
5、适用于海量数据(TB/PB级别)的数据运算。
6、每个作业的准备,提交等阶段要花费较长时间,实时性不高。
7、长度有限制,目前是不能超过8M。
不支持update,delete,更新只支持insert overwrite和insert into。
rlike:正则表达式的like
有string,bigint,double才能参与算术运算,datetime,boolean不允许参与运算。
string在参与运算前会进行隐式类型转换到double
bigint、double共同参与计算时,会将bigint隐式转换为double
bigint/bigint,结果是double型
快速建表时,AS和LIKE的区别:
数据:
AS可以带入数据,可以依赖于多张表
LIKE只能复制单张表的表结构,不能带入数据
属性:
AS不能带入LIFECYCLE、分区键信息、注释等。
LIKE不能带入LIFECYCLE,可以带入分区键信息、注释等。
order by全局排序,必须与limit合用
distribute by做hash分片
sort by,局部排序,必须和distribute by合用
order by不能distribute by、sort by共用
group by不能distribute by、sort by共用
表连接join支持多路间接,但不支持笛卡尔积。只允许and连接的等值 条件,最多只支持16路join操作。
Mapjoin Hint:
使用情景:一个大表和一个或多个小表做join
基本原理:将用户指定的小表全部加载到执行join操作的程序的内存中,从而加快join的执行速度。
注意事项:
left outer join的左表必须是大表
right outer join的右表必须是大表
inner join左表或右表均可作为大表
full outer join不能使用mapjoin
支持小表为子查询
引用小表或子查询时,需要使用别名
可以使用不等值连接或者or连接多个条件(普通join只能做等值连接)
目前最多支持指定6张小表
所有小表占用的内存总和不得超过2G
多路输出multiinsert的限制:
单个SQL里最多可以写128路输出
对于分区表,同一个目标分区不可以出现多次
对于未分区表,该表不能作为目标表出现多次
对于同一分区表的不同分区,不能同时有insert overwrite和insert into操作
union all最多只支持128路,子查询的列个数、名称和类型必须要一致。顶级要用select包含起来。例如:
select * from (
select * from a where r='1'
union all
select * from a where r='2'
)
case when是非贪婪的,一旦碰到满足条件,立即返回。
动态分区
在insert overwrite到一张分区表时,可以在语句中指定分区的值,也可指定一个分区列名,但不给出值。
动态分区的限制:
1、在分布式环境下,单个进程最多只能输出512个动态分区。
2、任意动态分区SQL不可以生成超过2000个动态分区。
3、动态生成的分区值不可以为NULL
4、如果目标表有多级分区,在运行insert语句时允许指定部分
分区为静态,但是静态分区必须是高级分区。
窗口函数
window_func() over()
把数据按照一定条件分成多组称为开窗,每个组称为一个窗口。
一个ODPS SQL语句中,最多可以使用5个窗口函数。
partition开窗时,同一窗口内最多包含1亿行数据。
用row开窗时,x,y必须大于0的于整数,范围为0-10000。必须指定order by才可以用rows方式指定窗口范围。支持窗口函数有:avg\count\max\min\stddev\sum,并非所有都支持。