odps简介
PB/EB级数据的离线存储(存储资源)及逻辑处理(计算资源),集群可用性全托管。
MaxCompute(odps)是适用于数据分析场景的企业级SaaS(Software as a Service)模式云数据仓库,以Serverless架构提供快速、全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您可以经济并高效地分析处理海量数据。
随着数据收集手段不断丰富,行业数据大量积累,数据规模已增长到了传统软件行业无法承载的海量数据(TB、PB、EB)级别。MaxCompute提供离线和流式数据的接入,支持大规模数据计算及查询加速能力,为您提供面向多种计算场景的数据仓库解决方案及分析建模服务。MaxCompute还为您提供完善的数据导入方案以及多种经典的分布式计算模型,您可以不必关心分布式计算和维护细节,便可轻松完成大数据分析。
MaxCompute适用于100 GB以上规模的存储及计算需求,最大可达EB级别,并且MaxCompute已经在阿里巴巴集团内部得到大规模应用。MaxCompute适用于大型互联网企业的数据仓库和BI分析、网站的日志分析、电子商务网站的交易分析、用户特征和兴趣挖掘等。
- odps 架构如下,更多详情,参见官网
- https://help.aliyun.com/document_detail/27800.html
创建周期任务(分区表)
周期任务,每天或每小时运行任务,将数据存储到天级或小时分区内。
CREATE TABLE IF NOT EXISTS student_bill_1d
(
student_id STRING COMMIT 'student_id '
,product_code STRING COMMIT '消费产品code'
,bill_date STRING COMMIT '结算日期(yyyy-mm-dd)'
,period STRING COMMIT '周期月份'
,cost STRING COMMIT '结算金额'
)
COMMIT '学生消费产品账单天级'
PARTITIONED BY
(
ds STRING COMMIT '按天分区(yyyymmdd)'
)
LIFECYCLE 3650
;
ALTER TABLE student_bill_1d DROP iF EXISTS PARTITION (ds = '${bizdate}')
;
INSERT OVERWRITE TABLE student_bill_1d PARTITION (ds = '${bizdate}')
SELECT
student_id
,product_code
,SPLIT_PART(bill_date, ' ', 1, 1) as bill_date -- 原 bill_date 字段精度到秒 2222-02-02 02:02:02
,period
,SUM(cost) as cost
FROM student.student_bill_base
WHERE ds=MAX_PT("student.student_bill_base")
GROUP BY
student_id
,product_code
,bill_date
,period
;
函数用法
1、查询的结果作为输入查询
odps将已查询的结果作为参数查询,只需将 查询语句 字符化,即可。
SELECT TO_CHAR('2222-02-22', 'yyyy-mm-dd'); -- 2222-02-22
SELECT TO_CHAR(TO_DATE('2222-02-22','yyyy-mm-dd'), 'yyyymm'); -- 222202
SELECT TO_CHAR ( TO_DATE ((
SELECT DISTINCT period
FROM db_test.student
WHERE ds = MAX_PT ( "db_test.student" )
ORDER BY period DESC
limit 1
), 'yyyymm'), 'yyyymm');
-- 222202
2、日期函数
1)获取当前时间
select GETDATE(); -- 2202-12-12 12:12:12
2)日期转字符串
select TO_CHAR(GETDATE(), "yyyymmdd"); -- 22021212
3)计算 指定日期段内的天数
select DATEDIFF("2023-01-01", "2022-01-01"); -- 365
4)获取日期的下一天
set odps.sql.type.system.odps2=true;
select date_add(date '2022-12-12', 1); -- 2022-12-13
5)获取日期的前一天
set odps.sql.type.system.odps2=true;
select date_add(date '2022-12-12', -1); -- 2022-12-11
3、字符串函数
1)字符串切片
select SPLIT_PART('2222-12-12 12:12:12', ' ', 1, 1); -- '2222-12-12'
2)字符串拼接
select CONCAT('2222-12-12', ' '.'00:00:00'); -- 2222-12-12 00:00:00
3)字符串替换
select REPLACE('2222-12-12', '-', ''); -- 20221212
4)keyvalue取值
-- 拿到 指定 key 的 val值
select KEYVALUE("k1:v1;k2:v2;k3:v3", ";", ":", "k1"); -- v1
5)字符串转日期
select TO_DATE('2022-12-12', 'yyyy-mm-dd'); -- 2022-12-12
6)字符串大小写
-- 转小写
select TOLOWER('QWER'); -- qwer
-- 转大写
select TOUPPER('qwer'); -- QWER
更多函数:https://help.aliyun.com/document_detail/48973.html