淘宝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的查询? 目前有三种方式:
- 用SQL将数据查询到本地,再发起http请求查询。-->效率低下,且淘宝IP库查询频率需小于10qps,否则拒绝请求。
- 下载IP地址库到本地,进行查询。-->同样效率低,且不利于数仓等分析使用。
- 将IP地址库定期维护上传至MaxCompute,进行连接查询。-->比较高效,但是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表样本数据。
通过编写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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?