您当前的位置: 首页 > 

阿里云云栖号

暂无认证

  • 1浏览

    0关注

    5305博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

在MaxCompute上分析IP来源的方法

阿里云云栖号 发布时间:2018-11-16 15:42:45 ,浏览量:1

淘宝IP库

淘宝IP地址库官网地址http://ip.taobao.com/,其查询接口[http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]](http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]),如下所示:

但是在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 下载需要的格式数据。本文以[基本数据格式]为例。

②下载UTF-8数据,打开看看数据格式。

前四个数据是IP地址的起始地址与结束地址,前两个是十进制整数形式,后两个是点分形式。这里我们使用整数形式,以便计算IP是否属于这个网段。

上传IP地址库数据

①创建表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;

可以通过SQL查看到表中共计上传2369306条数据。

③查看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             
关注
打赏
1664438436
查看更多评论
0.0947s