博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在MaxCompute上分析IP来源的方法
阅读量:6833 次
发布时间:2019-06-26

本文共 1245 字,大约阅读时间需要 4 分钟。

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

淘宝IP库

淘宝IP地址库官网地址,其查询接口[[ip地址字串]]([ip地址字串]),如下所示:

图片描述

但是在MaxCompute中禁止使用http请求,那么如何实现在MaxCompute中进行IP的查询?

目前有三种方式:

用SQL将数据查询到本地,再发起http请求查询。-->效率低下,且淘宝IP库查询频率需小于10qps,否则拒绝请求。

下载IP地址库到本地,进行查询。-->同样效率低,且不利于数仓等分析使用。
将IP地址库定期维护上传至MaxCompute,进行连接查询。-->比较高效,但是IP地址库需自己定期维护。
下载IP地址库
① IP地址库下载,: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 << 8) + y, map(int, ip.split('.')))    except:        return 0

点击提交并解锁。

图片描述

③新建自定义函数:

图片描述

提交并解锁:

图片描述

④验证ipint函数是否生效并满足预期值。

图片描述

在SQL中使用

以具体IP地址为例,在正常情况会以具体表的字段来读进来。

图片描述

保证数据准确性可以定期从淘宝IP库获取数据来维护ipresource这个表。

转载地址:http://bcxkl.baihongyu.com/

你可能感兴趣的文章
Linux运维工程师面试题总结
查看>>
Could not find or load main class org.apache.catalina.startup.Bootstrap
查看>>
PowerShell获取服务器本地服务状态
查看>>
禁止弹出输入法
查看>>
rsync 文件同步 服务器和客户端配置
查看>>
关于jvm的读书笔记-性能监控工具
查看>>
实习生笔试面试题总结
查看>>
版本升级提示
查看>>
FlipViewPager 对item实现左右对折滑动翻页效果《IT蓝豹》
查看>>
直接方式,反射方式,dynamic方式性能比较
查看>>
Leetcode日记5
查看>>
时间:2014年4月11日22:15:47 session 概念
查看>>
我的友情链接
查看>>
教育“优先”,落实才是关键
查看>>
传统IT大佬们,路在何方?
查看>>
基础练习
查看>>
shell学习笔记 (9.3)
查看>>
用chrome在电脑上模拟微信内置浏览器
查看>>
PHP获取常用时间的总结
查看>>
设计模式6大原则:里氏置换原则
查看>>