# 阿里云大数据ACP专业认证实验之05-MaxCompute内置函数（上）（二）

### 第 2 章：实验详情

#### 2.1 数值类数类

(1) 三角函数类

select 0.51020sin(60/1803.1415926) from dual;

(2) 数字整形类：

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;

(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) 转换类：

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) 日期运算：

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,
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和价格差额

SaaS 模式云数据仓库必修课

|
11天前
|

155 0
|
23天前
|

**OS Copilot 产品体验与功能反馈摘要** 运维人员发现OS Copilot易上手，文档清晰，助其高效排查故障（8/10分）。愿意推荐并参与开源开发。亮点在于知识问答，能快速筛选答案。相较于竞品，优点是新手友好、文档清晰，但功能扩展性待增强。期望增加系统错误排查与解决方案，并集成ECS等，以优化系统安装流程。
35 3
|
16天前
|
BI

26 1
|
23天前
|

MaxCompute操作报错合集之使用pyodps读取全表（百万级），然后对其中某列apply自己定义的分词函数，遇到报错，该如何排查
MaxCompute是阿里云提供的大规模离线数据处理服务，用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时，可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
30 5
|
24天前
|
JSON 分布式计算 大数据
MaxCompute产品使用合集之使用数据服务功能，但发现ODPS数据源不支持，该如何解决
MaxCompute作为一款全面的大数据处理平台，广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践，可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集，涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
38 6
|
23天前
|
SQL 分布式计算 数据处理
MaxCompute操作报错合集之使用Spark查询时函数找不到的原因是什么
MaxCompute是阿里云提供的大规模离线数据处理服务，用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时，可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
25 3
|
23天前
|
SQL 分布式计算 大数据
MaxCompute操作报错合集之运行DDL任务时出现异常，具体错误是ODPS-0110061，该如何处理
MaxCompute是阿里云提供的大规模离线数据处理服务，用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时，可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
41 3
|
23天前
|

MaxCompute操作报错合集之返回错误代码ODPS-0110999，是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务，用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时，可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
24 1
|
14天前
|

28 0
|
14天前
|

22 0