十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
本篇內(nèi)容主要講解“怎么在MaxCompute上分析IP來(lái)源”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么在MaxCompute上分析IP來(lái)源”吧!
淘寶IP地址庫(kù)官網(wǎng)地址 http://ip.taobao.com/ ,其查詢接口[ http://ip.taobao.com/service/getIpInfo.php?ip=[ip 地址字串]]( http://ip.taobao.com/service/getIpInfo.php?ip=[ip 地址字串]),如下所示:
但是在MaxCompute中禁止使用http請(qǐng)求,那么如何實(shí)現(xiàn)在MaxCompute中進(jìn)行IP的查詢?
目前有三種方式:
用SQL將數(shù)據(jù)查詢到本地,再發(fā)起http請(qǐng)求查詢。-->效率低下,且淘寶IP庫(kù)查詢頻率需小于10qps,否則拒絕請(qǐng)求。
下載IP地址庫(kù)到本地,進(jìn)行查詢。-->同樣效率低,且不利于數(shù)倉(cāng)等分析使用。
將IP地址庫(kù)定期維護(hù)上傳至MaxCompute,進(jìn)行連接查詢。-->比較高效,但是IP地址庫(kù)需自己定期維護(hù)。
① IP地址庫(kù)下載, http://ip.taobao.org:9999/ipdata_download.html 下載需要的格式數(shù)據(jù)。本文以[基本數(shù)據(jù)格式]為例。
②下載UTF-8數(shù)據(jù),打開(kāi)看看數(shù)據(jù)格式。
前四個(gè)數(shù)據(jù)是IP地址的起始地址與結(jié)束地址,前兩個(gè)是十進(jìn)制整數(shù)形式,后兩個(gè)是點(diǎn)分形式。這里我們使用整數(shù)形式,以便計(jì)算IP是否屬于這個(gè)網(wǎng)段。
①創(chuàng)建表DDL:
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命令 )
odps@ workshop_demo>tunnel upload ipdata.txt.utf8 ipresource;
可以通過(guò)SQL查看到表中共計(jì)上傳2369306條數(shù)據(jù)。
③查看ipresource表樣本數(shù)據(jù)。
通過(guò)編寫Python UDF將點(diǎn)號(hào)分割的IP地址轉(zhuǎn)化為int類型的IP。詳細(xì)如下:
①添加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
點(diǎn)擊提交并解鎖。
③新建自定義函數(shù):
提交并解鎖:
④驗(yàn)證ipint函數(shù)是否生效并滿足預(yù)期值。
以具體IP地址為例,在正常情況會(huì)以具體表的字段來(lái)讀進(jìn)來(lái)。
保證數(shù)據(jù)準(zhǔn)確性可以定期從淘寶IP庫(kù)獲取數(shù)據(jù)來(lái)維護(hù)ipresource這個(gè)表。
到此,相信大家對(duì)“怎么在MaxCompute上分析IP來(lái)源”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!