MaxCompute數據開發快速入門

MaxCompute數據開發快速入門

該快速入門演示一個使用MaxCompute對銀行貸款購房人員進行分析的完整過程。包含如下步驟:

  • 創建並查看錶
  • 導入數據
  • 運行SQL並導出數據
  • 編寫MapReduce

在進行該部分內容前,需要完成:MaxCompute基礎開發環境搭建 。命令的運行可以選用odpscmd客戶端,也可以使用IDEA MaxCompute Studio(該工具的使用見:MaxCompute Studio數據開發工具的使用),這裏使用MaxCompute Studio進行命令的運行。該部分內容參考自:MaxCompute快速入門文檔

創建並查看錶

創建表

1. 在MaxCompute Studio中創建odps sql的運行腳本文件:quickly_start.osql。

2. 創建需要的表bank_data和表result_table。bank_data用於存儲業務數據,result_table用於存儲數據分析後產生的結果

表創建的命令格式爲:

CREATE TABLE [IF NOT EXISTS] table_name 
[(col_name data_type [COMMENT col_comment], ...)] 
[COMMENT table_comment] 
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 
[LIFECYCLE days] 
[AS select_statement]

使用如下命令創建bank_data數據表,並執行:

-- create bank_data table using SQL
CREATE TABLE IF NOT EXISTS bank_data
(
  age             BIGINT COMMENT '年齡',
  job             STRING COMMENT '工作類型',
  marital         STRING COMMENT '婚否',
  education       STRING COMMENT '教育程度',
  default         STRING COMMENT '是否有信用卡',
  housing         STRING COMMENT '房貸',
  loan            STRING COMMENT '貸款',
  contact         STRING COMMENT '聯繫途徑',
  month           STRING COMMENT '月份',
  day_of_week     STRING COMMENT '星期幾',
  duration        STRING COMMENT '持續時間',
  campaign        BIGINT COMMENT '本次活動聯繫的次數',
  pdays           DOUBLE COMMENT '與上一次聯繫的時間間隔',
  previous        DOUBLE COMMENT '之前與客戶聯繫的次數',
  poutcome        STRING COMMENT '之前市場活動的結果',
  emp_var_rate    DOUBLE COMMENT '就業變化速率',
  cons_price_idx  DOUBLE COMMENT '消費者物價指數',
  cons_conf_idx   DOUBLE COMMENT '消費者信心指數',
  euribor3m       DOUBLE COMMENT '歐元存款利率',
  nr_employed     DOUBLE COMMENT '職工人數',
  y               BIGINT COMMENT '是否有定期存款'
);

根據如下命令創建result_table數據表,並執行:

-- create result_table using SQL
CREATE TABLE IF NOT EXISTS result_table
(
  education   STRING COMMENT '教育程度',
  num         BIGINT COMMENT '人數'
);

查看錶 

創建完成後可以查看bank_data數據表的描述信息:

-- show table describtion
desc bank_data;

-- 返回結果如下
+------------------------------------------------------------------------------------+
| Owner: [email protected] | Project: yitian_bj_mc                                |
| TableComment:                                                                      |
+------------------------------------------------------------------------------------+
| CreateTime:               2019-11-03 11:52:08                                      |
| LastDDLTime:              2019-11-03 11:52:08                                      |
| LastModifiedTime:         2019-11-03 11:57:20                                      |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 716920                                             |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Label | Comment                                     |
+------------------------------------------------------------------------------------+
| age             | bigint     |       | 年齡                                          |
| job             | string     |       | 工作類型                                        |
| marital         | string     |       | 婚否                                          |
| education       | string     |       | 教育程度                                        |
| default         | string     |       | 是否有信用卡                                      |
| housing         | string     |       | 房貸                                          |
| loan            | string     |       | 貸款                                          |
| contact         | string     |       | 聯繫途徑                                        |
| month           | string     |       | 月份                                          |
| day_of_week     | string     |       | 星期幾                                         |
| duration        | string     |       | 持續時間                                        |
| campaign        | bigint     |       | 本次活動聯繫的次數                                   |
| pdays           | double     |       | 與上一次聯繫的時間間隔                                 |
| previous        | double     |       | 之前與客戶聯繫的次數                                  |
| poutcome        | string     |       | 之前市場活動的結果                                   |
| emp_var_rate    | double     |       | 就業變化速率                                      |
| cons_price_idx  | double     |       | 消費者物價指數                                     |
| cons_conf_idx   | double     |       | 消費者信心指數                                     |
| euribor3m       | double     |       | 歐元存款利率                                      |
| nr_employed     | double     |       | 職工人數                                        |
| y               | bigint     |       | 是否有定期存款                                     |
+------------------------------------------------------------------------------------+

其他表操作

1. 刪除表

-- drop table from sever
DROP TABLE IF EXISTS bank_data;

2. 創建表分區

上述bank_data表創建時不是分區表,創建完成後可以對該表添加分區。例如這裏針對married列(married=married)進行分區命令如下:

-- create partition for bank_table
alter table table_name add if not exists
partition(marital = "married");

-- desc

3. 刪除表分區 

-- drop partition for table
alter table bank_data drop if exists
partition(marital='married');

導入數據

MaxCompute提供多種數據導入導出方式,這裏主要在客戶端上使用Tunnel命令操作進行數據導入,以及使用MaxCompute Studio進行數據導入。

這裏使用的數據爲banking.txt,主要用於記錄各人員的年齡、工作、房貸等信息,選取其中前三條數據展示如下:

44,blue-collar,married,basic.4y,unknown,yes,no,cellular,aug,thu,210,1,999,0,nonexistent,1.4,93.444,-36.1,4.963,5228.1,0
53,technician,married,unknown,no,no,no,cellular,nov,fri,138,1,999,0,nonexistent,-0.1,93.2,-42,4.021,5195.8,0
28,management,single,university.degree,no,yes,no,cellular,jun,thu,339,3,6,2,success,-1.7,94.055,-39.8,0.729,4991.6,1

Tunnel導入數據

1. 下載banking.txt數據文件到:/Users/yitian/Documents/MaxCompute/documents/learning-data/banking.txt下。

2. 使用如下tunnel命令導入數據到數據表:

odps@ YITIAN_BJ_MC>tunnel upload /Users/yitian/Documents/MaxCompute/documents/learning-data/banking.txt bank_data;
Upload session: 202004161541180b47df0b15eaa54c
Start upload:/Users/yitian/Documents/MaxCompute/documents/learning-data/banking.txt
Using \n to split records
Upload in strict schema mode: true
Total bytes:4841548      Split input to 1 blocks
2020-04-16 15:41:18     scan block: '1'
2020-04-16 15:41:18     scan block complete, block id: 1
2020-04-16 15:41:18     upload block: '1'
2020-04-16 15:41:20     Block info: 1:0:4841548:/Users/yitian/Documents/MaxCompute/documents/learning-data/banking.txt, progress: 100%, bs: 4.6 MB, speed: 4.6 MB/s
2020-04-16 15:41:20     upload block complete, block id: 1
upload complete, average speed is 1.5 MB/s
OK

3. 查看導入結果,導入完成後存在了41188條數據記錄:

odps@ YITIAN_BJ_MC>select count(*) from bank_data;
...
+------------+
| _c0        |
+------------+
| 41188      |
+------------+

MaxCompute Studio導入數據

MaxCompute Studio提供了可視化的數據導入工具,使用過程如下:

1. 打開數據導入頁面:

2. 導入頁面如下:

選擇本地的banking.txt文件作爲Input File。需要注意的是:

  1. Record Limit默認爲100,如果不修改,那麼導入的數據就只有100條。
  2. Size也是對導入數據容量的限制,這裏根據banking.txt文件的大小進行相應的修改。

3. 導入完成後,除了試用select語句對導入的數據進行查看外,也可以使用MaxCompute Studio中的可視化數據展示:

 
在打開的頁面的下方,選擇Data Preview進行數據查看,同時可以選擇查看的數據條數:

運行SQL並導出數據

關於使用MaxCompute進行數據處理的一些說明:

  • MaxCompute SQL不支持事務、索引、UPDATE以及DELETE等操作,同時MaxCompute的SQL語法與Oracle、MySQL有一定差別。
  • MaxCompute上作業提交後會有幾十秒到數分鐘不等的排隊調度,所以MaxCompute適合一次批量處理海量數據的跑批作業,不適合直接對接需要每秒處理幾千至數萬筆事務的前臺業務系統。

這裏使用一個簡單是數據統計進行數據的處理,並導出處理的結果。

提取和分析數據

查詢不同學歷的單身人士貸款買房的數量,並將結果保存到result_table中。

1. 使用如下語句將表bank_data中不同學歷單身貸款買房人士的數量保存至表result_table中。

INSERT OVERWRITE TABLE result_table  
SELECT education,COUNT(marital) AS num
FROM bank_data
WHERE housing = 'yes'
    AND marital = 'single'
GROUP BY education;

2. 使用如下語句查看result_table表中的數據。

SELECT * FROM result_table;

 得到的結果如下:

education	num
+----------+----+
basic.4y	227
basic.6y	172
basic.9y	709
high.school	1641
illiterate	1
professional.course	785
university.degree	2399
unknown	257

導出數據

使用tunnel導出數據

1. 使用如下語句將表result_table中數據導出到本地/Users/yitian/Documents/MaxCompute/documents/learning-data/目標,保存成名爲result.txt的文件。

tunnel download result_table /Users/yitian/Documents/MaxCompute/documents/learning-data/result.txt;

其中,result_table爲需要導出的表,/Users/yitian/Documents/MaxCompute/documents/learning-data/result.txt爲導出後保存的路徑及名稱。

2. 導出完成後,查看該本地路徑,可以得到導出的結果文件:

使用MaxCompute Studio導出數據

同樣可以使用MaxCompute Studio導出result_table表中的數據。

1. 打開數據導出界面:

2. 選擇導出的目標,進行數據導出:

3. 導出結果爲:

編寫MapReduce

由於當前使用的MaxCompute服務爲按量計費開發者版。按量計費開發者版資源,僅支持MaxCompute SQL(支持使用UDF)、PyODPS作業任務,暫不支持MapReduce、Spark等其它任務。

因此暫時無法使用MapReduce的開發功能,具體的開發內容見:MaxCompute快速入門-編寫MapReduce(可選)

開發Java UDF

MaxCompute支持多種UDF:

UDF 分類 描述
UDF(User Defined Scalar Function) 用戶自定義標量值函數(User Defined Scalar Function)。其輸入與輸出是一對一的關係,即讀入一行數據,寫一條輸出值 。
UDTF(User Defined Table Valued Function) 自定義表值函數。用來解決一次函數調用輸出多行數據場景。它是唯一能夠返回多個字段的自定義函數。UDTF不等於UDT(User Defined Type)。
UDAF(User Defined Aggregation Function) 自定義聚合函數。其輸入與輸出是多對一的關係, 即將多條輸入記錄聚合成一條輸出值。它可以與SQL中的GROUP BY語句聯用。具體語法請參見聚合函數

下面通過MaxCompute Studio開發字符小寫轉換功能的UDF步驟如下:

1. 準備工具環境並創建Java Module。在使用MaxCompute Studio創建的max-compute-learning項目中,創建Java Moudle:

在打開的創建選項中,選擇MaxCompute Java選項:

Additional Libraries中可以不選擇其他的libraries,保持默認即可。然後輸入需要創建的Module Name,創建完成後得到的項目目錄如下:

Moudle的pom.xml文件中會自動加入odps-sdk-udf的相關依賴:

2. 創建以上java module之後,就可以創建UDF:

在出現的創建文件的窗口中,選擇文件類型爲UDF:

3. 創建完成後,編輯UDF代碼:

package yitian.odps.udf;

import com.aliyun.odps.udf.UDF;

public class LowerUDF extends UDF {
    
    // TODO define parameters and return type, e.g:  public String evaluate(String a, String b)
    public String evaluate(String s) {
        if (s == null) {
            return null;
        }
        return s.toLowerCase();
    }
}

4. 註冊MaxCompute UDF。右鍵單擊UDF的Java文件,選擇Deploy to server...,在Package a jar, sunmit resource and register function彈框中配置參數。配置完成,單擊OK即可。

需要配置的參數如下:

  • MaxCompute project:UDF所在的MaxCompute Project名稱。
  • Resource file:選擇Jar包路徑。
  • Resource name:輸入註冊的資源名。
  • Function name:註冊的函數名稱。(UDF在上傳之後,只用該名稱進行使用)

5. 執行完成上面的deploy to server過程後,可以在MaxCompute Studio中看到這裏上傳的資源:

6. 打包並上傳完成後,只是在resource中添加了包含了我們定義的UDF文件,在Functions中還沒有創建對應的UDF。因此需要根據上傳的資源文件來創建我們需要使用的UDF。首先在菜單欄選擇:

在顯示的窗口中進行設置:

 

點擊確定即根據上傳的resource創建名爲lower_udf的UDF。此時可以在Functions選項中進行查看創建完成的UDF:

 7. 使用UDF。完成上面的操作後,可以使用剛纔創建的名爲lower_udf的function來使用上傳的UDF。在MaxCompute SQL Script中運行如下命令:

select lower_udf('ABC');

運行成功後,得到的輸出結果如下:

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