本文为您介绍如何使用MaxCompute分析IP来源,包括下载、上传IP地址库数据、编写UDF函数和编写SQL四个步骤。
前提条件
已创建未参加数据开发(Data Studio)公测的工作空间,并为工作空间绑定Serverless资源组。
说明本例使用DataWorks简单模式的工作空间。
已创建MaxCompute数据源并绑定至工作空间,并完成测试连通性。
已在工作空间创建业务流程。
背景信息
淘宝IP地址库的查询接口为IP地址字符串,使用示例如下。
在MaxCompute中禁止使用HTTP请求,因此目前可以通过如下三种方式实现在MaxCompute中查询IP:
用SQL将数据下载至本地,再发起HTTP请求查询。
说明效率低下,且淘宝IP库查询频率需要小于
10
QPS,否则拒绝请求。下载IP地址库至本地,再进行查询。
说明效率低下,且不利于数据仓库等产品分析使用。
将IP地址库定期维护上传至MaxCompute,进行连接查询。
说明比较高效,但是IP地址库需要自己定期维护。
下载IP地址库数据
获取地址库数据。本文提供示例IP地址库数据UTF-8格式的不完整的地址库demo。
下载示例地址库数据至本地,示例如下(文件名为
ipdata.txt.utf8
)。示例数据说明如下:
数据格式为
UTF-8
。前四个数据是IP地址的起始地址与结束地址。前两个是十进制整数形式,后两个是点分形式。IP地址段为整数形式,以便计算IP是否属于这个网段。
说明如果您需要使用自己的IP地址,请自行下载IP地址库,具体的下载地址和使用方式请参见MaxCompute中实现IP地址归属地转换。
上传IP地址库数据
在MaxCompute客户端执行如下语句,创建表ipresource存放IP地址库数据。
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命令,将下载IP地址库数据中的示例数据
ipdata.txt.utf8
上传至表ipresource。 使用本地客户端(odpscmd)执行以下上传命令。tunnel upload D:/ipdata.txt.utf8 ipresource;
上述命令中,D:/ipdata.txt.utf8为IP地址库数据本地存放路径。更多命令说明请参见Tunnel命令。
您可以在MaxCompute客户端执行如下语句验证数据是否上传成功。
--查询表中数据条数。 SELECT COUNT(*) FROM ipresource;
执行如下SQL语句,查看表ipresource前10条的样本数据。
SELECT * FROM ipresource limit 10;
返回结果如下。
编写UDF函数
通过编写Python UDF,将点号分割的IP地址转化为整数类型的IP地址,本示例使用DataWorks的PyODPS完成。详情请参见开发PyODPS 2任务。
进入数据开发页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入数据开发。
新建Python资源。
右键单击目标业务流程,选择 。
在新建资源对话框中,填写资源名称(示例名:
mc.py
),并勾选上传为ODPS资源,单击新建。在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
),单击新建。说明如果数据开发中绑定了多个MaxCompute引擎,则选择本次需要创建函数的MaxCompute引擎实例。
在函数的编辑页面,配置各项参数。
参数
描述
函数类型
选择函数类型为其他函数。
MaxCompute引擎实例
默认不可以修改。
函数名
UDF函数名,即SQL中引用该函数所使用的名称。需要全局唯一,且注册函数后不支持修改。
责任人
默认显示。
类名
实现UDF的主类名,必填。 示例值为
mc.ipint
。说明当资源类型为Python时,类名格式为Python资源名称.类名(资源名称中的.py无需填写)。
资源列表
资源文件名称
mc.py
。支持模糊匹配查找本工作空间中已添加的资源,必填。
多个文件之间,使用英文逗号(,)分隔。
描述
针对当前UDF作用的简单描述。
命令格式
该UDF的具体使用方法示例,例如
test
。参数说明
支持输入的参数类型以及返回参数类型的具体说明。
返回值
返回值,例如1,非必填项。
示例
函数中的示例,非必填项。
单击工具栏中的
图标,保存函数。
提交函数。
单击工具栏中的
图标。
在提交新版本对话框中,输入备注。
单击确认。
在SQL中使用UDF函数分析IP来源
右键单击业务流程,选择 。
在新建节点对话框中输入节点名称,并单击确认。
在ODPS SQL节点编辑页面,输入如下语句。
SELECT * FROM ipresource WHERE ipint('192.0.2.0') >= start_ip AND ipint('192.0.2.0') <= end_ip
单击
图标运行代码。
在参数弹窗中选择您所绑定的Serverless资源组,单击运行。等待费用预估完成,单击运行节点任务。
您可以在运行日志查看运行结果。