阿里雲大數據ACP專業認證實驗之06-MaxCompute內置函數(下)

一、實驗背景介紹

大數據計算服務(MaxCompute,原名 ODPS)是一種快速、完全託管的 GB/TB/PB 級數據倉庫解決方案。MaxCompute 向用戶提供了完善的數據導入方案以及多種經典的分佈式計算模型,能夠更快速的解決用戶海量數據計算問題,有效降低企業成本,並保障數據安全。本實驗結合實際數據和案例,深入淺出的演示瞭如何使用MaxCompute的內置函數。

完成此實驗後,可以掌握的內置函數有:

  1. 窗口函數;
2. 聚合函數;

3. 其他函數;

二、實驗環境架構

實驗環境架構:阿里雲大數據計算服務MaxCompute

第 1 章:實驗準備

1.1 申請MaxCompute資源

請點擊頁面左側的 ,在左側欄中,查看本次實驗資源信息。 maxcompute申請MaxCompute資源 MAXCOMPUTE 在彈出的左側欄中,點擊 創建資源 按鈕,開始創建實驗資源。 資源創建過程需要1-3分鐘。完成實驗資源的創建後,用戶可以通過 實驗資源 查看實驗中所需的資源信息,例如:阿里雲賬號等。

1.2 開通服務

(本實驗用到odps客戶端,創建資源之前確保本地安裝了java8或者以上版本) Java下載地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 1)點擊【實驗資源】,查看本次實驗資源信息(MaxCompute資源)。 2)在彈出的左側欄中,點擊 【創建資源】按鈕,開始創建實驗資源。 如下圖:

注意:實驗環境一旦開始創建則進入計時階段,建議學員先基本瞭解實驗具體的步驟、目的,真正開始做實驗時再進行創建。 3)創建資源,如下圖:(創建資源需要幾分鐘時間,請耐心等候……) 4)資源創建成功後,可通過【實驗資源】查看實驗中所需的實驗資源信息。如下圖:

注意:在本地保存下阿里雲賬號信息,包括資源中的項目名稱、企業別名、子用戶名稱、子用戶密碼、AK ID、AK Secret等信息。 沙箱實驗環境說明:

企業別名:即主賬號ID;

子用戶名稱和子用戶密碼:登錄實驗環境的賬號;

AK ID和AK Secret:系統爲當前用戶分配的登錄驗證密鑰信息,配置odps客戶端時需要;

控制檯url:登錄實驗開發環境的地址; 5)點擊頁面左側的【控制檯url】,複製鏈接,在新的窗口打開,跳轉到登錄頁。 在這裏插入圖片描述 6)在登錄頁,輸入【實驗資源】中提供的賬號,格式爲:子用戶名稱@企業別名,再點擊【下一步】。 7)輸入【實驗資源】中提供的的“子用戶密碼”,點擊【登錄】 8)登陸後,進入【管理控制檯】界面, 點擊左側菜單欄 【大數據(數加)】,再點擊【DataWorks】,進入數據開發概覽頁。在這裏插入圖片描述

1.3 創建項目

沙箱環境已經默認創建完項目,點擊【進入數據開發】即可。 在這裏插入圖片描述 在這裏插入圖片描述 本小節以下步驟供使用個人賬號實驗參考。

開通MaxCompute後,點擊【管理控制檯】 在這裏插入圖片描述 選中MaxCompute服務,選擇【按量付費】,然後點擊【下一步】 在這裏插入圖片描述 填寫項目相關信息:輸入“項目名稱”(全局唯一)、“顯示名”以及“項目描述” 信息,然後點擊【創建項目】。 在這裏插入圖片描述 項目創建成功後,點擊【進入數據開發】:】 在這裏插入圖片描述 打開【數據開發】頁面: 在這裏插入圖片描述

1.4 安裝配置odpscmd客戶端

步驟1:客戶端下載 (本實驗已經提供好客戶端,自行下載附件)

步驟2:解壓odpscmd_public.zip 到本地目錄,密碼:aca21104 如:解壓至E:\ODPS_DEMO

步驟3:查看本次實驗課用到的介質,可以看到如下的文件夾: 在這裏插入圖片描述 步驟4:在conf文件夾中有odps_config.ini文件。鼠標右鍵編輯此文件,配置相關信息: 在這裏插入圖片描述

說明:

project_name=<對應實驗資源中的項目名稱>

access_id=<對應實驗資源中的AK ID>

access_key=<對應實驗資源中的AK Secret>

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 命令,如: 在這裏插入圖片描述 注意:項目可以隨時根據情況切換,上圖表示環境設置成功.

1.5 測試表dual準備

在【臨時查詢】頁面,點擊【新建】,然後點擊【QDPS SQL】 在這裏插入圖片描述 輸入“節點名稱”,選擇“目標文件夾”,然後點擊【提交】。 在這裏插入圖片描述 進入腳本編輯頁面,進行腳本開發,創建實驗測試表dual,點擊【運行】。

SQL語句:

CREATE TABLE dual (

id BIGINT

)

LIFECYCLE 10000;

然後查看運行日誌日誌顯示測試表創建成功。 在這裏插入圖片描述 在這裏插入圖片描述 往測試表裏插入一條數據,輸入SQL語句,點擊【運行】。

insert into table dual select count(1) from dual;

在這裏插入圖片描述 查看測試表數據內容,輸入SQL語句,點擊【運行】。:

select * from dual limit 10;

在這裏插入圖片描述

1.6 測試表t_dml準備

進入腳本編輯頁面,進行腳本開發,創建實驗測試表t_dml,點擊【運行】

create table t_dml (

detail_id bigint,

sale_date datetime,

province string,

city string,

product_id bigint,

cnt bigint,

amt double

);

然後查看運行日誌顯示測試表創建成功。 在這裏插入圖片描述 打開odpscmd客戶端交互界面 在這裏插入圖片描述 執行命令,加載數據 t_dml.csv,(注意修改數據文件存放路徑):

tunnel upload f:\data\t_dml.csv t_dml; 在這裏插入圖片描述 查看數據表數據:輸入sql語句,點擊【運行】,查看結果。

select * from t_dml limit 10; 在這裏插入圖片描述

1.7 測試表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; 在這裏插入圖片描述 查看數據表數據,輸入sql,點擊【運行】。

select * from t_product limit 10;

在這裏插入圖片描述

1.8 測試表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;

在這裏插入圖片描述 查看數據表數據,輸入sql, 點擊【運行】

select * from t_sign limit 10;

在這裏插入圖片描述

第 2 章:實驗詳情

2.1 窗口函數

(1) 統計量類:

根據5月份銷售數據,統計出日銷量波動最小的產品(即標準差最小) 。在【臨時查詢】工作區,點擊【新建QDPS SQL】,輸入相關信息,然後點擊【提交】 在這裏插入圖片描述 輸入腳本,點擊【運行】,查看結果

select product_id,stddev(amt)over(partition by product_id) std_dev

 from (select datetrunc(sale_date,'dd') as dt, product_id, sum(amt) as amt

from t_dml

group by datetrunc(sale_date,'dd'), product_id) t1

order by std_dev limit 1;

(2) 排名類:

根據5月份銷售數據,統計出同一產品成交最短時間間隔(以產品1爲例,列出兩次成交時間差最小的記錄)。

select datediff(t1.sale_date, t2.sale_date, 'ss') dt_diff,

t1.detail_id, t2.detail_id

 from (select row_number()over(partition by product_id order by sale_date)

as id, * from t_dml where product_id=1

and datetrunc(sale_date,'mm')='2015-05-01 00:00:00') t1

join (select row_number()over(partition by product_id order by sale_date) as id, *

from t_dml where product_id=1

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

    on t1.id = t2.id+1  order by dt_diff  limit 1;

輸入腳本,點擊【運行】,查看結果
在這裏插入圖片描述 (3) 帶 rows 的開窗:

在做時序分析(Time Series Analysis)時,對於長期趨勢(Trend)的分析最常見的是使用移動平均法(Moving Average method),是通過逐期移動時間序列,並計算一系列擴大時間間隔後的序時平均數,最終形成一個新時間序列的方法。優點是由其它因素而引起的變動影響被削弱了,對原序列起到了修勻的作用,從而更清晰地呈現出現象的變動趨勢。通常MA是由專業的挖掘算法來實現,我們可以嘗試使用帶rows的開窗函數來實現:

以4天作爲一個平滑窗口的寬度(前2後1),即取n-2天到n+1天作爲一個平滑窗口,計算連續四天內的均值作爲第n天的代表值。對產品1和產品2的銷售金額和銷售量進行平穩化。做趨勢圖,分別做橫向(不同產品的趨勢圖)和縱向(同一產品平滑前後的趨勢圖)比較。

select dt, product_id, avg(amt) over(partition by product_id order by dt rows between 2

preceding and 1 following),

avg(cnt) over(partition by product_id order by dt rows between 2

preceding and 1 following)

from (select to_char(sale_date,'yyyymmdd') as dt, product_id,

sum(cnt) as cnt, sum(amt) as amt

from t_dml where product_id in (1,2)

group by to_char(sale_date,'yyyymmdd'),product_id) t;

輸入腳本,點擊【運行】,查看結果 在這裏插入圖片描述

2.2 聚合函數

(1) 統計量類:

給出銷售信息表t_dml中的不同產品的銷售金額的基本統計信息。

select product_id, count(*), min(amt), max(amt), sum(amt), avg(amt),

  median(amt), stddev(amt), stddev_samp(amt)

from t_dml

group by product_id;

輸入腳本,點擊【運行】,查看結果 在這裏插入圖片描述 (2) 字符串類:

將產品標稱單價在50-100元的,生成一個清單,不同產品名稱之間用|分隔開。

select wm_concat('|',product_name)

 from t_product  where price >=50   and price<=100;

輸入腳本,點擊【運行】,查看結果 在這裏插入圖片描述

2.3 其他函數

(1) COALESCE 處理NULL值:

將 t_sign 中的名字(name)和生日(birth_day)拼成一個串

select concat(coalesce(name,'unknown'),coalesce(birth_day,'unknown'))

from t_sign;

輸入腳本,點擊【運行】,查看結果 在這裏插入圖片描述 (2) decode 分支函數

將銷售記錄t_dml中浙江、上海和北京的銷量單獨統計出來:

select decode(province,'浙江省', '浙', '上海市', '滬', '北京市', '京','其他'),

sum(cnt)

from t_dml

group by decode(province,'浙江省','浙', '上海市', '滬', '北京市', '京','其他');

輸入腳本,點擊【運行】,查看結果 在這裏插入圖片描述 (3) ordinal 有序位置函數:

順序統計量(Ordered Statistics,也稱次序統計量)是非參統計的重要組成部分,適用於整體分佈不能由有限個參數表示的情況。利用ordinal函數,可以方便的計算順序統計相關的一些基礎統計量:

最小順序統計量 X(1),最大順序統計量 X(n),極差 R=X(n) -X (1) ,四分衛極差:

IQL= X(0.75n) -X (0.25n)

select ordinal(8,1,2,3,4,6,5,8,7,9,0)- ordinal(3,1,2,3,4,6,5,8,7,9,0) as IQL

from dual;

輸入腳本,點擊【運行】,查看結果

在這裏插入圖片描述 (4) sample 採樣函數:

通過採樣分析的手段,從銷售記錄表t_dml中得到1/100的數據,分析採樣樣本,試着推斷總體的銷售金額的平均值、標準差、極值、極差等,然後從總體中計算出這些統計量進行驗證。調整採樣比例,重複上述推斷過程,找到一個準確程度和樣本體量的平衡點,進一步思考:這個平衡點有多大參考價值?

// 1/100比例的樣本的推斷值

select avg(amt) as Average,stddev_samp(amt) as Standard_Dev,

              min(amt) as Min_Val, max(amt) as Max_Val,

              max(amt) - min(amt) as Range_Val,count(*) as Sample_size

from (select amt from t_dml where sample(100,1,detail_id)=true) t;

在這裏插入圖片描述 // 1/10比例的樣本的推斷值

select avg(amt) as Average,stddev_samp(amt) as Standard_Dev,

              min(amt) as Min_Val, max(amt) as Max_Val,

              max(amt) - min(amt) as Range_Val,count(*) as Sample_size

from (select amt from t_dml where sample(10)=true) t; 在這裏插入圖片描述 //總體實際值

select avg(amt) as Average,stddev_samp(amt) as Standard_Dev,

              min(amt) as Min_Val, max(amt) as Max_Val,

              max(amt) - min(amt) as Range_Val,count(*) as Sample_size

from t_dml;

輸入腳本,點擊【運行】,查看結果 在這裏插入圖片描述

第 3 章:實驗總結

3.1 實驗總結

MaxCompute的這幾類函數基本覆蓋了我們日常工作的絕大多數數據處理需求。通過靈活熟練的使用這些函數,

可以提升開發效率,若仍有無法滿足的需求,還可以考慮自定義函數。

第 4 章:課後任務

4.1 課後任務

1、根據t_dml表,統計輸出各個省成交額最大的城市及其成交額

2、根據t_dml表,統計輸出各個城市有交易的天數及其平均成交額

3、根據t_product表,輸出各類別下價格最大的產品及其價格

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章