全部產品
Search
文件中心

DataWorks:使用MaxCompute分析IP來源最佳實務

更新時間:Dec 14, 2024

本文為您介紹如何使用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地址庫

上傳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函數

  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):
              try:
                  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. 您可以在作業記錄查看運行結果。