面對MaxCompute無法直接調用外部API的限制,本文將通過一個完整的實踐案例,教您如何利用“離線IP庫+UDF”的方案,在MaxCompute中高效地實現IP地址歸屬地分析。
案例說明
MaxCompute是一個封閉的計算環境,無法直接調用外部的HTTP API(如淘寶IP庫API)來即時查詢IP歸屬地。當需要對MaxCompute的IP地址進行IP歸屬地分析時,以下三種方案可實現需求。
方案選項 | 實現方式 | 優點 | 缺點 | 結論 |
方案一:資料匯出查詢 | 將需要分析的IP從MaxCompute匯出到本地,再用指令碼迴圈調用API查詢。 | 思路簡單。 | 效率極低,受API頻率限制(如10 QPS),不適用于海量資料。 | 不推薦 |
方案二:本地庫查詢 | 將IP庫和需要分析的IP都下載到本地,在本地程式中進行匹配。 | 無API頻率限制。 | 資料脫離了資料倉儲,無法與MaxCompute中的其他業務資料(如訂單表)進行關聯分析。 | 不推薦 |
方案三:IP庫入倉查詢 | 將整個IP地址庫上傳到MaxCompute的一張表中,然後利用SQL的UDF函數進行查詢對比。 |
| 需要自我維護IP庫的定期更新。 | 最佳方案 |
結論:方案三是唯一能滿足巨量資料情境下高效能、高整合度分析需求的方案。本教程將詳細介紹如何?這一最佳方案。
方案設計
我們將採用 “離線IP庫 + 自訂函數(UDF)” 的方案。該方案分為三大模組:
資料準備: 將公開的IP地址庫檔案上傳到MaxCompute表中,作為我們的地址標準。
UDF開發: 建立一個UDF函數,用於將字串IP轉換為整數,這是高效進行範圍匹配的關鍵。
SQL分析: 編寫SQL,調用UDF函數將IP與IP庫表進行對比,擷取IP地址的最終歸屬地。
準備工作
建立使用新版資料開發(Data Studio)的工作空間。本例使用DataWorks簡單模式的工作空間。
為工作空間綁定Serverless資源群組。
綁定MaxCompute計算資源並綁定至工作空間,並完成測試連通性。
操作步驟
下載IP地址庫資料
地址庫資料樣本資料:ipdata.csv。
如果您需要使用自己的IP地址,請自行下載IP地址庫。
樣本資料結構說明:
資料格式為
UTF-8。前四個資料是IP地址的起始地址與結束位址。前兩個是十進位整數形式,後兩個是點分形式。IP位址區段為整數形式,以便計算IP是否屬於這個網段。
上傳IP地址庫資料至表
建立MaxCompute表。
進入DataWorks工作空間列表頁,在頂部切換至目標地區,找到目標工作空間,單擊操作列的,進入Data Studio。
在Data Studio(資料開發)頁面左側導覽列單擊
按鈕,進入資料開發頁面的專案目錄。單擊專案目錄右側的
,選擇。在建立節點對話方塊中輸入節點名稱,並單擊確認。
在MaxCompute SQL節點編輯頁面,輸入如下語句。
-- 如果已存在名為 ipresource 的表,則先刪除 DROP TABLE IF EXISTS ipresource; -- 建立用於儲存IP地址庫資訊的表 CREATE TABLE IF NOT EXISTS ipresource ( start_ip BIGINT, -- IP段的起始地址(十進位整數形式) end_ip BIGINT, -- IP段的結束位址(十進位整數形式) start_ip_arg STRING, -- IP段的起始地址(點分十進位字串形式,如 "1.0.1.x") end_ip_arg STRING, -- IP段的結束位址(點分十進位字串形式,如 "1.0.3.x") country STRING, -- 國家名稱 area STRING, -- 地區名稱(通常為空白或與國家重複) city STRING, -- 城市名稱(部分資料可能為省份) county STRING, -- 區/縣名稱 isp STRING -- 網路電訊廠商(如電信、聯通、移動) );在節點編輯上方選擇資料來源處,選擇您準備工作中所綁定的MaxCompute計算資源。
單擊運行後,查看運行結果。
上傳資料至表。
單擊左上方
表徵圖,在彈出頁面中單擊,進入上傳與下載頁面。單擊左側導覽列的
表徵圖,進入資料上傳頁面。單擊資料上傳按鈕,進入資料上傳配置頁面,可參考以下配置。
參數
描述
指定待上傳資料
選擇檔案
上傳已下載至本地的
ipdata.csv檔案。設定目標表
目標引擎
MaxCompute
MaxCompute專案名稱
選擇準備工作中的MaxCompute專案。
選擇目標表
選擇ipresource表作為目標表。
重要若選不到新建立的表,請在中,手動重新整理中繼資料odps.<project_name>.ipresource。
資源群組
選擇準備工作中的Serverless資源群組。
上傳檔案資料預覽
單擊按順序映射,完成檔案資料與ipresource表欄位對應。
單擊資料上傳,等待資料上傳完成。
驗證資料是否上傳成功。
回到Data Studio(資料開發)頁面的MaxCompute SQL節點編輯頁,編寫並選中運行以下SQL命令。如果能看到資料條數和樣本資料,則說明上傳成功。
--查詢表中資料條數。 SELECT COUNT(*) FROM ipresource; --預覽前10條資料 SELECT * FROM ipresource limit 10;
開發UDF函數
為了能用SQL比較IP地址,我們需要一個UDF函數,將點分十進位的IP字串(如 '1.0.2xx.4x')轉換成一個可比較大小的整數。
在Data Studio頁面的左側導覽列單擊資源管理按鈕
,進入資源管理頁面。建立MaxCompute Python資源。
在資源管理頁面,單擊
按鈕,選擇。在建立資源和函數對話方塊中,輸入資源名稱(樣本名:
mc.py),單擊確認。上傳本地檔案mc.py至檔案內容,並選擇資料來源為準備工作中已綁定的計算資源。
在上方工具列對資源儲存並發布。
建立MaxCompute UDF函數。
在資源管理頁面,單擊
按鈕,選擇。在建立資源和函數對話方塊中,輸入函數名稱(樣本名:
ip2int),單擊確認。此為函數調用時的函數名,填寫之後不可修改。在函數的編輯頁面,配置各項參數。關鍵參數如下:
更多參數說明,請參見MaxCompute資源與函數。
參數
描述
函數類型
保持預設選項OTHER。
資料來源
選擇準備工作中已綁定的計算資源。
類名
實現UDF的主類名,必填。 樣本值為
mc.IPtoInt。資源清單
選擇上一步驟的資源檔
mc.py。在上方工具列對函數儲存並發布。
SQL分析IP來源
回到Data Studio(資料開發)頁面的MaxCompute SQL節點編輯頁,編寫並選中運行以下SQL命令。
-- 需要替換成您所需查詢的真實IP地址 SELECT * FROM ipresource WHERE ip2int('1.0.2xx.4x') >= start_ip AND ip2int('1.0.2xx.4x') <= end_ip;在編輯上面選擇資料來源處,選擇您準備工作中所綁定的MaxCompute計算資源。
單擊運行後,查看運行結果。最終,您可得到該IP所屬於的地址。