码迷,mamicode.com
首页 > 其他好文 > 详细

在MaxCompute上分析IP来源的方法

时间:2018-11-16 20:56:31      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:代码   star   RoCE   技术   city   取数   分形   tab   utf8   

摘要: 在MaxCompute上分析IP来源和供应商

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

技术分享图片

但是在MaxCompute中禁止使用http请求,那么如何实现在MaxCompute中进行IP的查询?
目前有三种方式:

用SQL将数据查询到本地,再发起http请求查询。-->效率低下,且淘宝IP库查询频率需小于10qps,否则拒绝请求。
下载IP地址库到本地,进行查询。-->同样效率低,且不利于数仓等分析使用。
将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 annotatebr/>@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这个表。

在MaxCompute上分析IP来源的方法

标签:代码   star   RoCE   技术   city   取数   分形   tab   utf8   

原文地址:http://blog.51cto.com/14031893/2317968

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!