本文為您介紹如何使用MaxCompute分析IP來源,包括下載、上傳IP地址庫資料、編寫UDF函數和編寫SQL四個步驟。
前提條件
在DataWorks上完成建立商務程序,本例使用DataWorks簡單模式。詳情請參見建立商務程序。
背景資訊
淘寶IP地址庫的查詢介面為IP地址字串,使用樣本如下。
在MaxCompute中禁止使用HTTP請求,因此目前可以通過如下三種方式實現在MaxCompute中查詢IP:
用SQL將資料下載至本地,再發起HTTP請求查詢。
說明效率低下,且淘寶IP庫查詢頻率需要小於10 QPS,否則拒絕請求。
下載IP地址庫至本地,再進行查詢。
說明效率低下,且不利於資料倉儲等產品分析使用。
將IP地址庫定期維護上傳至MaxCompute,進行串連查詢。
說明比較高效,但是IP地址庫需要自己定期維護。
下載IP地址庫資料
擷取地址庫資料。本文提供樣本IP地址庫資料UTF-8格式的不完整的地址庫demo。
下載樣本地址庫資料至本地,樣本如下。
樣本資料說明如下:
資料格式為UTF-8。
前四個資料是IP地址的起始地址與結束位址。前兩個是十進位整數形式,後兩個是點分形式。IP位址區段為整數形式,以便計算IP是否屬於這個網段。
說明如果您需要使用自己的IP地址,請自行下載IP地址庫
上傳IP地址庫資料
在MaxCompute用戶端執行如下語句,建立表ipresource存放IP地址庫資料。
DROP TABLE IF EXISTS ipresource ; CREATE TABLE IF NOT EXISTS ipresource ( start_ip BIGINT ,end_ip BIGINT ,start_ip_arg string ,end_ip_arg string ,country STRING ,area STRING ,city STRING ,county STRING ,isp STRING );
執行如下Tunnel命令,上傳本地樣本IP地址庫資料至表ipresource。
odps@ workshop_demo>tunnel upload D:/ipdata.txt.utf8 ipresource;
上述命令中,D:/ipdata.txt.utf8為IP地址庫資料本地存放路徑。更多命令說明請參見Tunnel命令。
您可以執行如下語句驗證資料是否上傳成功。
--查詢表中資料條數。 select count(*) from ipresource;
執行如下SQL語句,查看錶ipresource前10條的樣本資料。
select * from ipresource limit 10;
返回結果如下。
編寫UDF函數
登入DataWorks控制台,單擊左側導覽列的 ,在下拉框中選擇對應工作空間後單擊進入資料開發。
建立Python資源。
按右鍵目標商務程序,選擇 。
在建立資源對話方塊中,填寫資源名稱,並勾選上傳為ODPS資源,單擊建立。
在Python資源中輸入如下代碼。
from odps.udf import annotate @annotate("string->bigint") class ipint(object): def evaluate(self, ip): try: return reduce(lambda x, y: (x << 8) + y, map(int, ip.split('.'))) except: return 0
單擊表徵圖,提交資源。
建立函數。
按右鍵目標商務程序,選擇 。
在建立函數對話方塊中,輸入名稱,單擊建立。
說明如果資料開發中綁定了多個MaxCompute引擎,則選擇本次需要建立函數的MaxCompute引擎執行個體。
在函數的編輯頁面,配置各項參數。
參數
描述
函數類型
選擇函數類型,包括數學運算函數、彙總函式、字串處理函數、日期函數、視窗函數和其他函數。
MaxCompute引擎執行個體
預設不可以修改。
函數名
UDF函數名,即SQL中引用該函數所使用的名稱。需要全域唯一,且註冊函數後不支援修改。
責任人
預設顯示。
類名
實現UDF的主類名,必填。
說明當資源類型為Python時,類名格式為Python資源名稱.類名(資源名稱中的.py無需填寫)。
資源清單
完整的檔案名稱,支援模糊比對尋找本工作空間中已添加的資源,必填。
多個檔案之間,使用英文逗號(,)分隔。
描述
針對當前UDF作用的簡單描述。
命令格式
該UDF的具體使用方法樣本,例如
test
。參數說明
支援輸入的參數類型以及返回參數類型的具體說明。
傳回值
傳回值,例如1,非必填項。
樣本
函數中的樣本,非必填項。
單擊工具列中的表徵圖,儲存函數。
提交函數。
單擊工具列中的表徵圖。
在提交新版本對話方塊中,輸入備忘。
單擊確認。
在SQL中使用UDF函數分析IP來源
按右鍵商務程序,選擇 。
在建立節點對話方塊中輸入節點名稱,並單擊確認。
在ODPS SQL節點編輯頁面,輸入如下語句。
select * from ipresource WHERE ipint('192.0.2.0') >= start_ip AND ipint('192.0.2.0') <= end_ip
單擊表徵圖運行代碼。
您可以在作業記錄查看運行結果。