在MaxCompute上分析IP來源的方法

摘要: 在MaxCompute上分析IP來源和供應商php

淘寶IP庫

淘寶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的查詢?
目前有三種方式:函數

  1. 用SQL將數據查詢到本地,再發起http請求查詢。-->效率低下,且淘寶IP庫查詢頻率需小於10qps,不然拒絕請求。
  2. 下載IP地址庫到本地,進行查詢。-->一樣效率低,且不利於數倉等分析使用。
  3. 將IP地址庫按期維護上傳至MaxCompute,進行鏈接查詢。-->比較高效,可是IP地址庫需本身按期維護。

下載IP地址庫

① IP地址庫下載,http://ip.taobao.org:9999/ipdata_download.html 下載須要的格式數據。本文以[基本數據格式]爲例。lua

②下載UTF-8數據,打開看看數據格式。spa

前四個數據是IP地址的起始地址與結束地址,前兩個是十進制整數形式,後兩個是點分形式。這裏咱們使用整數形式,以便計算IP是否屬於這個網段。3d

上傳IP地址庫數據

①建立表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表樣本數據。接口

編寫UDF函數

經過編寫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函數是否生效並知足預期值。

在SQL中使用

以具體IP地址爲例,在正常狀況會以具體表的字段來讀進來。

保證數據準確性能夠按期從淘寶IP庫獲取數據來維護ipresource這個表。

原文連接 

相關文章
相關標籤/搜索