添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
使用MaxCompute分析IP来源最佳实践

使用MaxCompute分析IP来源最佳实践

更新时间:

本文为您介绍如何使用MaxCompute分析IP来源,包括下载、上传IP地址库数据、编写UDF函数和编写SQL四个步骤。

前提条件

背景信息

淘宝IP地址库的查询接口为IP地址字符串,使用示例如下。 查询接口

在MaxCompute中禁止使用HTTP请求,因此目前可以通过如下三种方式实现在MaxCompute中查询IP:

  • 用SQL将数据下载至本地,再发起HTTP请求查询。

    说明

    效率低下,且淘宝IP库查询频率需要小于10 QPS,否则拒绝请求。

  • 下载IP地址库至本地,再进行查询。

    说明

    效率低下,且不利于数据仓库等产品分析使用。

  • 将IP地址库定期维护上传至MaxCompute,进行连接查询。

    说明

    比较高效,但是IP地址库需要自己定期维护。

下载IP地址库数据

  1. 获取地址库数据。本文提供示例IP地址库数据 UTF-8格式的不完整的地址库demo

  2. 下载示例地址库数据至本地,示例如下。

    image

    示例数据说明如下:

    • 数据格式为UTF-8。

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

    说明

    如果您需要使用自己的IP地址,请自行下载IP地址库 ,具体的下载地址和使用方式请参见 MaxCompute中实现IP地址归属地转换

上传IP地址库数据

  1. 在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
    );
  2. 执行如下Tunnel命令,上传本地示例IP地址库数据至表 ipresource

    odps@ workshop_demo>tunnel upload D:/ipdata.txt.utf8 ipresource;

    上述命令中, D:/ipdata.txt.utf8 为IP地址库数据本地存放路径。更多命令说明请参见 Tunnel命令

    您可以执行如下语句验证数据是否上传成功。

    --查询表中数据条数。
    select count(*) from ipresource;
  3. 执行如下SQL语句,查看表 ipresource 前10条的样本数据。

    select * from ipresource limit 10;

    返回结果如下。

    image

编写UDF函数

通过编写Python UDF,将点号分割的IP地址转化为整数类型的IP地址,本示例使用DataWorks的PyODPS完成。详情请参见 开发PyODPS 2任务

  1. 登录 DataWorks控制台 ,切换至目标地域后,单击左侧导航栏的 数据开发与治理 > 数据服务 ,在下拉框中选择对应工作空间后单击 进入数据服务

  2. 新建Python资源。

    1. 右键单击目标业务流程,选择 新建资源 > MaxCompute > Python

    2. 新建资源 对话框中,填写资源名称,并勾选 上传为ODPS资源 ,单击 新建

    3. 在Python资源中输入如下代码。

      from odps.udf import annotate
      @annotate("string->bigint")
      class ipint(object):
          def evaluate(self, ip):
                  return reduce(lambda x, y: (x << 8) + y, map(int, ip.split('.')))
              except:
                  return 0
    4. 单击 image.png 图标,提交资源。

  3. 新建函数。

    1. 右键单击目标业务流程,选择 新建函数 > MaxCompute > 函数

    2. 新建函数 对话框中,输入名称,单击 新建

      说明

      如果数据开发中绑定了多个MaxCompute引擎,则选择本次需要创建函数的MaxCompute 引擎实例

    3. 在函数的编辑页面,配置各项参数。

      **

      参数

      描述

      函数类型

      选择函数类型,包括 数学运算函数 聚合函数 字符串处理函数 日期函数 窗口函数 其他函数

      MaxCompute引擎实例

      默认不可以修改。

      函数名

      UDF函数名,即SQL中引用该函数所使用的名称。需要全局唯一,且注册函数后不支持修改。

      责任人

      默认显示。

      类名

      实现UDF的主类名,必填。

      说明

      当资源类型为Python时,类名格式为 Python资源名称.类名 (资源名称中的 .py 无需填写)。

      资源列表

      完整的文件名称,支持模糊匹配查找本工作空间中已添加的资源,必填。

      多个文件之间,使用英文逗号(,)分隔。

      描述

      针对当前UDF作用的简单描述。

      命令格式

      该UDF的具体使用方法示例,例如 test

      参数说明

      支持输入的参数类型以及返回参数类型的具体说明。

      返回值

      返回值,例如1,非必填项。

      示例

      函数中的示例,非必填项。

  4. 单击工具栏中的 保存 图标,保存函数。

  5. 提交函数。

    1. 单击工具栏中的 提交 图标。

    2. 提交新版本 对话框中,输入 备注

    3. 单击 确认

在SQL中使用UDF函数分析IP来源

  1. 右键单击业务流程,选择 新建 > MaxCompute > ODPS SQL

  2. 新建节点 对话框中输入节点名称,并单击 确认

  3. 在ODPS SQL节点编辑页面,输入如下语句。

    select * from ipresource
    WHERE ipint('192.0.2.0') >= start_ip
    AND ipint('192.0.2.0') <= end_ip
  4. 单击 ** 图标运行代码。

  5. 您可以在 运行日志 查看运行结果。