摘要: 在MaxCompute上分析IP來源和供應商php
淘寶IP地址庫官網地址http://ip.taobao.com/,其查詢接口[http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]](http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]),以下所示:html
可是在MaxCompute中禁止使用http請求,那麼如何實如今MaxCompute中進行IP的查詢?
目前有三種方式:函數
① IP地址庫下載,http://ip.taobao.org:9999/ipdata_download.html 下載須要的格式數據。本文以[基本數據格式]爲例。lua
②下載UTF-8數據,打開看看數據格式。spa
前四個數據是IP地址的起始地址與結束地址,前兩個是十進制整數形式,後兩個是點分形式。這裏咱們使用整數形式,以便計算IP是否屬於這個網段。3d
①建立表DDL:code
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上傳文件(文件>10MB須要使用Tunnel upload命令)htm
odps@ workshop_demo>tunnel upload ipdata.txt.utf8 ipresource;
能夠經過SQL查看到表中共計上傳2369306條數據。blog
③查看ipresource表樣本數據。接口
經過編寫Python UDF將點號分割的IP地址轉化爲int類型的IP。詳細以下:
①添加Python 資源。
②編寫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
點擊提交併解鎖。
③新建自定義函數:
提交併解鎖:
④驗證ipint函數是否生效並知足預期值。
以具體IP地址爲例,在正常狀況會以具體表的字段來讀進來。
保證數據準確性能夠按期從淘寶IP庫獲取數據來維護ipresource這個表。