【实验】阿里云大数据助理工程师认证(ACA)- ACA认证配套实验-03-MaxCompute内置函数

一、实验概述

大数据计算服务(MaxCompute,原名 ODPS)是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案。MaxCompute 向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。
本实验结合实际数据和案例,深入浅出的演示了如何使用MaxCompute的内置函数。

二、实验目标

本实验通过客户端方式进行实验,掌握MaxCompute的内置函数的使用技巧,以及相关注意事项。

完成此实验后,可以掌握的内置函数有:

  1. 数值类函数;

  2. 字符串类函数;

  3. 日期类函数;

  4. 窗口函数;

  5. 聚合函数;

  6. 其他函数;      

三、学习建议

  1. 掌握MaxCompute的内置函数的使用技巧以及相关命令的基础操作;

  2. 提前安装 ODPS客户端(下载客户端软件)。

第 1 章:实验简介

1.1 实验简介

一、实验概述

大数据计算服务(MaxCompute,原名 ODPS)是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案。MaxCompute 向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。

本实验结合实际数据和案例,深入浅出的演示了如何使用MaxCompute的内置函数。

二、实验目标:

本实验通过客户端方式进行实验,掌握MaxCompute的内置函数的使用技巧,以及相关注意事项。

完成此实验后,可以掌握的内置函数有:

  1. 数值类函数;

  2. 字符串类函数;

  3. 日期类函数;

  4. 窗口函数;

  5. 聚合函数;

  6. 其他函数;      

三、学习建议:

  1. 掌握MaxCompute的内置函数的使用技巧以及相关命令的基础操作;

  2. 提前安装 ODPS客户端(下载客户端软件)。

第 2 章:实验准备

2.1 申请MaxCompute资源

在弹出的左侧栏中,点击 创建资源 按钮,开始创建实验资源。
资源创建过程需要1-3分钟。完成实验资源的创建后,用户可以通过 实验资源 查看实验中所需的资源信息,例如:阿里云账号等。

2.2 进入实验环境

1 、申请MaxCompute资源
登录云中沙箱,在实验目录中查询所需实验,进入实验,点击“实验资源”,查看所需具体资源

点击“创建资源”,即可进入实验环境。(由于实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建)
创建资源需要几分钟时间,请耐心等候……
企业别名:即主账号ID;

子用户名称和子用户密码:登录实验环境以及配置MaxCompute 数据源时需要;

AK ID和AK Secret:系统为本用户分配的登录验证密钥信息,在配置客户端及数据源时应用;

控制台url:登录实验环境的地址;
2 、进入实验环境
步骤一:登录管理控制台

资源开通后,点击左侧菜单栏中“控制台url”链接,进入用户登录页面。
输入资源提供的“子用户名称”和“子用户密码”登录。
登陆成功后,进入管理控制台页面:
步骤二:打开“DataWorks”

展开左侧菜单,点击“产品与服务”,在“大数据(数加)”产品列表中,点击“DataWorks”。
步骤三:创建项目

创建项目需要管理员权限,沙箱实验环境默认创建完项目:
步骤四:进入数据开发

选中项目,点击“进入数据开发”,则进入“数据开发”环境。
数据开发界面如下:
在这里插入图片描述

2.3 配置odpscmd客户端

步骤1:客户端介质下载 (本实验在附件中提供)

步骤2:解压odpscmd_public.zip 到本目录,如:解压至本地目录 F:\ODPS_DEMO

步骤3:查看本次实验课用到的介质,可以看到如下的文件夹:

bin/ conf/ lib/ plugins/

步骤4:在conf文件夹中有odps_config.ini文件。编辑此文件,填写相关信息:
project_name=<项目名称>

access_id=< AK ID>

access_key=

end_point=http://service.odps.aliyun.com/api (默认)

tunnel_endpoint=http://dt.odps.aliyun.com (默认)

log_view_host=http://logview.odps.aliyun.com (默认)

https_check=true (默认)

步骤5:修改好配置文件后运行bin目录下的odpscmd(在Linux系统下是./bin/odpscmd,Windows下运行./bin/odpscmd.bat),现在可以运行 MaxCompute 命令,如:
在这里插入图片描述
注意:项目可以随时根据情况切换,上图表示环境设置成功.

2.4 测试表dual准备

1、展开左侧菜单,点击“临时查询”,然后点击新建“ODPS SQL”。
在这里插入图片描述
2、在弹出对话框中,输入“节点名称”,选择“目标文件夹”,点击“提交”。
在这里插入图片描述
进入脚本编辑页面,进行脚本开发,创建实验测试表dual,点击运行

CREATE TABLE dual (id BIGINT) LIFECYCLE 10000;

在这里插入图片描述
测试表创建成功
在这里插入图片描述
往测试表里插入一条数据,输入sql, 选中后点击“运行”。

insertinto table dual select count(1) fromdual;
在这里插入图片描述
查看测试表数据内容,输入sql, 选中后点击“运行”。

select * from dual limit 10;

在这里插入图片描述

2.5 测试表t_dml准备

进入脚本编辑页面,进行脚本开发,创建实验测试表t_dml,点击运行。

CREATE TABLE t_dml(detail_id BIGINT,sale_date datetime,province STRING,city STRING,product_id BIGINT,cnt BIGINT,amt DOUBL);
在这里插入图片描述
进入odpscmd交互界面
加载数据 t_dml.csv:

tunnel upload f:\data\t_dml.csv t_dml;
在这里插入图片描述
查看数据表数据

select* from t_dml limit 10;
在这里插入图片描述

2.6 测试表t_product准备

进入脚本编辑页面,进行脚本开发,创建实验测试表t_product,点击运行。

CREATE TABLE t_product (product_id BIGINT,product_name STRING,category_id BIGINT,category_name STRING,price DOUBLE);
在这里插入图片描述
进入odpscmd交互界面
加载数据 t_product.csv:

tunnel upload f:\data\t_product.csv t_product;
在这里插入图片描述
查看数据表数据

select* from t_product limit 10;
在这里插入图片描述

2.7 测试表t_sign准备

进入脚本编辑页面,进行脚本开发,创建实验测试表t_sign,点击运行

CREATE TABLE t_sign (id BIGINT,name STRING,height DOUBLE,is_female BOOLEAN,birth_day datetime);
在这里插入图片描述
进入odpscmd交互界面
加载数据 t_sign.csv:

tunnel upload f:\data\t_sign.csv t_sign;
在这里插入图片描述
在这里插入图片描述
查看数据表数据

select* from t_sign limit 10;
在这里插入图片描述

第 2 章:实验详情

2.1 数值类函数

(1) 三角函数类

已知三角形两边长度为10,20,夹角为60度,求三角形面积

select 0.51020sin(60/1803.1415926) from dual;

输入sql脚本,点击【运行】,查看结果
在这里插入图片描述
(2) 数字整形类:

对数字进行加工处理,请分别显示数字 3.1415926 的向上取整值、向下取整值、四舍五入保留3位小数的值、截掉小数位的值以及用二进制来表示该值。

Select ceil(3.1415926),

floor(3.1415926),

round(3.1415926,3),

trunc(3.1415926),

conv(‘3.1415926’,10,2)

from dual;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
(3) 随机函数类:

select rand() from dual;

select rand(detail_id),rand() from t_dml limit 10;

输入sql脚本,点击【运行】,查看结果
在这里插入图片描述

(4) 综合使用

  使用蒙特卡洛法求π值的近似值:产生一系列的成对的随机数,根据每队随机数到点(0.5,0.5)的距离可判断该点是否在单位圆内,计算落在圆内的点占所有点的比例,即可得到π值的近似值:

     // 产生约10万对随机点进行近似值计算:

select (inCircle/totalCnt)/pow(0.5,2) as PI 

from (select count(*) as totalCnt,

sum(case when sqrt(pow((x-0.5),2)+pow((y-0.5),2)) <0.5 then 1 else 0 end) inCircle

from (select /*+mapjoin(t2)*/ rand() as x,rand() as y

from (select * from t_dml limit 10000) t1

left outer join (select * from t_dml limit 10) t2

 on t1.detail_id <> t2.detail_id) tt

) t;

// 产生约100万对随机点进行近似值计算:

select (inCircle/totalCnt)/pow(0.5,2) as PI

from (select count(*) as totalCnt,

sum(case when sqrt(pow((x-0.5),2)+pow((y-0.5),2)) <0.5 then 1 else 0 end) inCircle

from (select /*+mapjoin(t2)*/ rand() as x,rand() as y

from (select * from t_dml limit 10000) t1

left outer join (select * from t_dml limit 100) t2

on t1.detail_id <> t2.detail_id) tt

) t;


输入脚本,点击【运行】,查看结果:
在这里插入图片描述
输入脚本,点击【运行】,查看结果:
在这里插入图片描述

2.2 字符串类函数

(1) 长度类:

输入脚本,点击【运行】,查看结果

select province,length(province),lengthb(province) from t_dml limit 10;

在这里插入图片描述
(2) 查找类:

目前销售记录中,哪些省、市名字比较接近?

select province, city, char_matchcount(province, city) as sim

 from (select distinct province, city

          from t_dml) t

order by sim desc

limit 10;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
目前销售记录中,省份的第一个字在城市名中是否出现?有没有出现多次的?

select province, city,

instr(city,substr(province,1,3),1,1) as FirstPos,

case when instr(city,substr(province,1,3),1,2) = 0 then ‘No’

else ‘Yes’

end as SecondPos

 from (select distinct province, city

          from t_dml) t

order by SecondPos desc, FirstPos desc

limit 10;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
(3) 转换类:

要把数据从一个编码为 utf8 的库导入到一个字符集为 gb2132 的库中,其中有些繁体字,如“阿裏雲”等字样,请问会出现乱码的情况吗?

select is_encoding(‘阿裏雲’, ‘utf-8’, ‘gb2312’) from dual;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
(4) 整形类:

select concat(province, ‘|’,city) from t_dml limit 10;

 select category_name, tolower(split_part(category_name,' ',2))

from t_product;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
输入脚本,点击【运行】,查看结果
在这里插入图片描述

2.3 日期类函数

(1) 日期获取:

//根据日期,截取部分信息

select dt,

datepart(dt, ‘yyyy’) as year,

             datepart(dt, 'mm') as month,

             datepart(dt, 'dd') as day,

             datepart(dt, 'hh') as hour,

             datepart(dt, 'mi') as minute,

datepart(dt, ‘ss’) as second

from (select getdate() dt from dual) t;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
// 日期截取

select datetrunc(‘2015-01-31 02:30:45’, ‘dd’) from dual;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
// 获得具体日期

select getdate(),lastday(getdate()),weekday(getdate()),weekofyear(getdate())

 from dual;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
(2) 日期转换:

//字符串转成日期, 日期转换成字符串

select to_date(‘20150131’,‘yyyymmdd’),

to_char(‘2015-01-31 00:00:00’, ‘日期:yyyymmdd’)

from dual;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
// Unix时间和ODPS时间互转

select from_unixtime(1), unix_timestamp(‘2015-10-01 00:00:00’) from dual;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
// 判断字符串是否满足预定义的日期格式

select sale_date, isdate(sale_date, ‘yyyymmdd’) from t_dml limit 10;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
(3) 日期运算:

统计5月1日从产品5第一次成交后一小时三十分钟内(含),产品5销量(含第一次成交)占同期总销量的比例:

select /+mapjoin(t2)/

sum(case when product_id=5 then cnt else 0 end)/sum(cnt)

 from t_dml t1

    join (select min(sale_date) as begin_dt,

                          dateadd(dateadd(min(sale_date),1,'hh'),30, 'mi') as end_dt

                 from t_dml

         where product_id=5

                   and datetrunc(sale_date,'dd')='2015-05-01 00:00:00')t2

       on t1.sale_date >= t2.begin_dt

  and t1.sale_date <= t2.end_dt;

输入脚本,点击【运行】,查看结果
在这里插入图片描述
日期相减:

select max(sale_date), min(sale_date),

datediff(max(sale_date),min(sale_date),‘dd’)

from t_dml;

输入脚本,点击【运行】,查看结果
在这里插入图片描述

第 3 章:实验总结

3.1 实验总结

MaxCompute的这几类函数基本覆盖了我们日常工作的绝大多数数据处理需求,通过灵活熟练的使用这些函数,

可以提升开发效率,若仍有无法满足的需求,还可以考虑自定义函数。

第 4 章:课后任务

4.1 课后任务

1、计算t_dml表中最大的日期距离2017-08-01的天数

2、计算t_dml表中province字段,以“省”结尾的值的个数

3、计算t_product表各产品价格与产品对应分类下所有产品平均价格的差额,输出产品id和价格差额

猜你喜欢

转载自blog.csdn.net/wyn_365/article/details/107282437
今日推荐