すべてのプロダクト
Search
ドキュメントセンター

DataWorks:MaxCompute UDF を使用して IP の地理位置情報を検索する

最終更新日:Sep 25, 2025

MaxCompute は外部 API 操作を直接呼び出すことはできません。このチュートリアルでは、オフライン IP データベースとユーザー定義関数 (UDF) を使用して、MaxCompute で IP アドレスの地理位置情報を効率的に分析する方法を示す完全なケーススタディを提供します。

背景

MaxCompute はクローズドなコンピューティング環境であり、HTTP 経由で外部 API 操作 (Taobao IP データベース API など) を直接呼び出して、IP の地理位置情報をリアルタイムでクエリすることはできません。MaxCompute で IP アドレスの地理位置情報を分析するには、次の 3 つのソリューションを使用できます。

ソリューション

実装

長所

短所

結論

クエリ用のデータのエクスポート

分析対象の IP アドレスを MaxCompute からローカルデバイスにエクスポートし、スクリプトを使用して API 操作を周期的に呼び出してクエリを実行します。

シンプル

低効率。API レート制限 (10 QPS など) の影響を受けるため、大規模データには適していません。

非推奨

ローカルデータベースのクエリ

IP データベースと分析対象の IP アドレスの両方をローカルデバイスにダウンロードし、ローカルプログラムを使用してマッチングを実行します。

API レート制限なし

データはデータウェアハウスから分離されており、MaxCompute の他のビジネスデータ (注文テーブルなど) と関連付けて分析することはできません。

非推奨

クエリ用の IP データベースのインポート

IP アドレスデータベース全体を MaxCompute テーブルにアップロードし、SQL で UDF を使用してクエリを実行します。

  • 効率的: MaxCompute の並列計算機能を最大限に活用します。

  • 統合: 任意の MaxCompute テーブルと直接関連付けることができます。

  • スケーラブル: あらゆるデータ規模に適しています。

IP データベースの定期的な手動更新が必要です。

推奨

結論: 3 番目のソリューションは、ビッグデータのユースケースにおけるパフォーマンス専有型で高度に統合された分析の要求を満たすことができる唯一のソリューションです。このチュートリアルでは、このソリューションの実装方法について詳しく説明します。

ソリューションの概要

このソリューションは、主に 3 つのモジュールで構成されています。

  1. データ準備: パブリック IP アドレスデータベースファイルをリファレンスとして MaxCompute テーブルにアップロードします。

  2. UDF 開発: 文字列の IP アドレスを整数に変換する UDF を作成します。これは、効率的な範囲マッチングに不可欠です。

  3. SQL 分析: UDF を呼び出して MaxCompute テーブルで IP アドレスを検索し、その地理位置情報を取得する SQL 文を記述します。

準備

  1. Data Studio パブリックプレビュー をオプトインしていない ワークスペース を作成します。このチュートリアルでは、[基本モード] の DataWorks ワークスペースを使用します。

  2. ワークスペースに サーバーレスリソースグループ をバインドします。

  3. ワークスペースに MaxCompute 計算リソースをバインド し、そのネットワーク接続をテストします。

  4. ターゲットワークスペースで、ビジネスフローを作成 します。

手順

IP アドレスデータベースの準備

  • サンプルデータベース: ipdata.csv

  • サンプルデータ構造:

    • データ形式は UTF-8 です。

    • 最初の 4 つのデータフィールドは、IP 範囲の開始アドレスと終了アドレスです。最初の 2 つは 10 進整数形式で、次の 2 つはドット区切り 10 進数形式です。

IP アドレスデータベースを MaxCompute にアップロードする

  1. テーブルの作成

    1. DataStudio ページに移動します。

      DataWorks コンソール にログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、[データ開発と O&M] > [データ開発] を選択します。表示されたページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発へ] をクリックします。

    2. [DataStudio] ページで、ターゲットビジネスフローを右クリックし、[ノードの作成] > [MaxCompute] > [ODPS SQL] を選択します。

    3. ダイアログボックスで、[エンジンインスタンス] に準備した計算リソースを選択し、名前を入力して、[確認] をクリックします。

    4. ノードエディターページで、次のコードを入力します。

      -- ipresource という名前のテーブルが既に存在する場合は、最初に削除します。
      DROP TABLE IF EXISTS ipresource;
      -- IP アドレスを格納するテーブルを作成します。
      CREATE TABLE IF NOT EXISTS ipresource 
      (
          start_ip     BIGINT,   -- IP 範囲の開始アドレス (10 進整数形式)。
          end_ip       BIGINT,   -- IP 範囲の終了アドレス (10 進整数形式)。
          start_ip_arg STRING,   -- IP 範囲の開始アドレス (ドット区切り 10 進数文字列形式、"1.0.1.x" など)。
          end_ip_arg   STRING,   -- IP 範囲の終了アドレス (ドット区切り 10 進数文字列形式、"1.0.3.x" など)。
          country      STRING,   -- 国名。
          area         STRING,   -- エリア名 (通常は空または国と同じ)。
          city         STRING,   -- 都市名 (一部のデータでは省の場合があります)。
          county       STRING,   -- 地区/郡名。
          isp          STRING    -- インターネットサービスプロバイダー (China Telecom、China Unicom、China Mobile など)。
      );
    5. ** アイコンをクリックしてコードを実行します。[パラメーター] ダイアログボックスで、バインドしたサーバーレスリソースグループを選択し、[実行] をクリックします。[MaxCompute 計算コストの見積もり] が完了するのを待ってから、[実行] をクリックします。

  1. テーブルへのデータのアップロード

    1. 左上隅の image アイコンをクリックします。表示されたページで、[すべての製品] > [Data Integration] > [アップロードとダウンロード] をクリックします。

    2. 左のナビゲーションウィンドウで image アイコンをクリックします。

    3. [データのアップロード] をクリックします。次の表の説明に従ってパラメーターを設定します。

      パラメーター

      説明

      アップロードするデータの指定

      ファイルの選択

      ipdata.csv ファイルをアップロードします。

      宛先テーブルの設定

      計算エンジン

      MaxCompute

      MaxCompute プロジェクト名

      ターゲットの MaxCompute プロジェクトを選択します。

      宛先テーブル

      ipresource テーブルを選択します。

      重要

      新しく作成したテーブルがリストにない場合は、[データマップ] > [マイデータ] > [テーブルメタデータの更新] に移動し、odps.<project_name>.ipresource のメタデータを手動で更新します。

      リソースグループ

      準備したサーバーレスリソースグループを選択します。

      アップロードされたファイルのデータのプレビュー

      [順序によるマッピング] をクリックして、.csv ファイル内のデータを ipresource テーブルのフィールドにマッピングします。

    4. [データのアップロード] をクリックします。

  2. データがアップロードされたことの確認

    [DataStudio] ページの ODPS SQL ノードエディターに戻ります。次の SQL クエリを実行します。データ行数とサンプルデータが表示されれば、アップロードは成功です。

    -- テーブル内のデータ行数をクエリします。
    SELECT COUNT(*) FROM ipresource;
    -- 最初の 10 行のデータをプレビューします。
    SELECT * FROM ipresource limit 10;

UDF の開発

SQL で IP アドレスの地理位置情報を検索するには、ドット区切り 10 進数 IP 文字列 ('1.0.2xx.4x' など) を比較可能な 10 進整数に変換する UDF が必要です。

  1. MaxCompute Python リソースの作成

    1. [DataStudio] ページで、ターゲットビジネスフローを右クリックし、[リソースの作成] > [MaxCompute] > [Python] を選択します。

    2. ダイアログボックスで、mc.py などの名前を入力します。[MaxCompute にアップロード] を選択し、[作成] をクリックします。

    3. ノードエディターページで、次のコードを入力します。

      from functools import reduce
      from odps.udf import annotate
      
      @annotate("string->bigint")
      class IPtoInt(object):
          def evaluate(self, ip):
              try:
                  return reduce(lambda x, y: (x << 8) + y, map(int, ip.split('.')))
              except:
                  return 0
    4. image.png アイコンをクリックします。

  2. MaxCompute UDF の作成

    1. [DataStudio] ページで、ターゲットビジネスフローを右クリックし、[関数の作成] > [MaxCompute] > [関数] を選択します。

    2. ダイアログボックスで、ip2int などの名前を入力し、[作成] をクリックします。これは UDF 名となり、作成後は変更できません。

    3. エディターページで、パラメーターを設定します。主要なパラメーターは以下のとおりです。

      パラメーターの詳細については、「MaxCompute 関数を登録する」をご参照ください。

      パラメーター

      説明

      関数タイプ

      デフォルト設定の [その他の関数] のままにします。

      クラス名

      UDF を実装するメインクラス。値の例: mc.IPtoInt

      説明

      リソースタイプが Python の場合、クラス名の形式は Python リソース名.クラス名 です (リソース名の .py は不要です)。

      リソース

      前のステップのリソースファイル mc.py を選択します。

    4. image アイコンをクリックして関数を保存します。

    5. image.png アイコンをクリックします。ダイアログボックスで、変更内容の説明を入力し、[確認] をクリックします。

SQL を使用した IP の地理位置情報の検索

  1. ODPS SQL ノードエディターに戻ります。次の SQL クエリを実行します。

    -- これをクエリしたい実際の IP アドレスに置き換えます。
    SELECT * FROM ipresource
    WHERE ip2int('1.0.2xx.4x') >= start_ip
    AND ip2int('1.0.2xx.4x') <= end_ip;
  2. ** アイコンをクリックしてコードを実行します。[パラメーター] ダイアログボックスで、バインドしたサーバーレスリソースグループを選択し、[実行] をクリックします。[MaxCompute 計算コストの見積もり] が完了するのを待ってから、[実行] をクリックします。

  3. 実行結果を表示します。IP アドレスの場所を見つけることができます。

リファレンス