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

DataWorks:MaxCompute UDF を使用した IP ジオロケーション分析

最終更新日:Aug 26, 2026

MaxCompute は外部 API を直接呼び出すことができません。本チュートリアルでは、オフライン IP アドレスデータベースとユーザー定義関数 (UDF) を組み合わせて、MaxCompute 内で IP アドレスのジオロケーションを分析する方法を説明します。

ケースの説明

MaxCompute は閉鎖されたコンピューティング環境です。サードパーティの IP ジオロケーションクエリ API などの外部 HTTP API を呼び出して、IP アドレスのジオロケーションをリアルタイムで検索することはできません。次の表は、MaxCompute で IP ジオロケーションを分析する 3 つのアプローチを比較したものです。

アプローチ

実装

メリット

デメリット

評価

アプローチ 1:データのエクスポートとクエリ

分析する IP アドレスを MaxCompute からローカルデバイスにエクスポートし、スクリプトを使用してループで API を呼び出します。

シンプルなコンセプト。

効率が悪く、API のレート制限を受けます。大規模データには不向きです。

推奨しません

アプローチ 2:ローカルデータベースのクエリ

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

API レート制限がありません。

データがデータウェアハウスから離れるため、注文テーブルなど MaxCompute 内の他のビジネスデータと結合できません。

推奨しません

アプローチ 3:IP データベースをウェアハウスにロードしてクエリ

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

高パフォーマンス:MaxCompute の並列計算機能をフル活用、優れた統合性:任意の MaxCompute テーブルと直接結合可能、スケーラブル:任意のデータ量に対応可能。

IP アドレスデータベースを定期的に手動で更新する必要があります。

最適なアプローチ

アプローチ 3 は、ビッグデータ分析に必要なパフォーマンスと統合性を実現する唯一のアプローチです。本チュートリアルでは、アプローチ 3 を実装します。

ソリューション設計

本ソリューションは、オフライン IP アドレスデータベースとユーザー定義関数 (UDF) を使用します。次の 3 つのモジュールで構成されています。

  1. データ準備:公開 IP アドレスデータベースファイルをダウンロードし、MaxCompute テーブルにアップロードします。このテーブルがアドレス参照として機能します。

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

  3. SQL 分析:UDF を呼び出す SQL を記述し、IP アドレスを IP アドレスデータベースのテーブルと比較して、IP アドレスの最終的なジオロケーションを取得します。

    次の図は、3 つのモジュールがどのように連携するかを示しています。

image

前提条件

重要

このチュートリアルは、データ開発 (DataStudio) (新版) パブリックプレビューへの参加 が有効になっていない DataWorks ワークスペースを対象としています。この例では、基本モードのワークスペースを使用します。

操作手順

IP アドレスデータベースのダウンロード

サンプル IP アドレスデータベース ipdata.csv をローカルデバイスにダウンロードします。独自の IP アドレスを分析する場合は、IP アドレスデータベースを自分でダウンロードしてください。

サンプルデータの構造は次のとおりです。

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

  • 最初の 4 つの値は、IP アドレス範囲の開始アドレスと終了アドレスです。最初の 2 つは 10 進整数で、最後の 2 つはドット 10 進数表記です。IP アドレスがネットワークセグメントに属するかどうかを計算できるように、IP アドレス範囲は整数形式で提供されています。

重要

独自の IP アドレスデータベースを使用する場合、ファイルが UTF-8 でエンコードされ、各範囲の開始アドレスと終了アドレスが整数形式で提供されるようにしてください。列または列の順序がサンプルデータと異なる場合は、次のセクションでテーブルスキーマとフィールドマッピングを適宜調整してください。

IP アドレスデータベースのテーブルへのアップロード

  1. MaxCompute テーブルの作成

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

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

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

    3. ノードの作成 ダイアログボックスで、DPI エンジンインスタンス を「前提条件」セクションでバインドしたコンピューティングリソースに設定し、ノードの 名前 を入力してから、確認 をクリックします。

    4. ODPS SQL ノードエディターで、次のステートメントを入力します。

      -- 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 進数文字列、例:"203.0.113.0")
          end_ip_arg   STRING,   -- IP 範囲の終了アドレス (ドット 10 進数文字列、例:"203.0.113.255")
          country      STRING,   -- 国名
          area         STRING,   -- エリア名 (通常は空または国と同じ)
          city         STRING,   -- 都市名 (一部のレコードでは大きな行政区分の場合があります)
          county       STRING,   -- 地区または郡の名前
          isp          STRING    -- インターネットサービスプロバイダー (ISP)
      );
    5. Run icon アイコンをクリックしてコードを実行します。 パラメーター ダイアログボックスで、バインドしたサーバーレスリソースグループを選択し、実行をクリックします。 コスト見積もり ステップが完了したら、実行をクリックしてノードタスクを実行します。

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

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

    2. 左側のナビゲーションペインで、Upload Data icon アイコンをクリックして、Upload Data ページに移動します。

    3. Upload Data をクリックして、データアップロード設定ページに移動します。次の設定を参考にしてください。

      [パラメーター]

      説明

      [Specify Data to Be Uploaded] > [ファイルの選択]

      ローカルにダウンロードした ipdata.csv ファイルをアップロードします。

      [ターゲットテーブルの設定] > [Compute Engine]

      MaxCompute を選択します。

      [ターゲットテーブルの設定] > [MaxCompute プロジェクト名]

      前提条件セクションの MaxCompute プロジェクトを選択します。

      [ターゲットテーブルの設定] > [Select Destination Table]

      ipresource テーブルを宛先テーブルとして選択します。 新規作成したテーブルが選択できない場合は、データマップ > マイデータ > テーブルメタデータの更新 を選択し、odps.<project_name>.ipresource のメタデータを手動で更新します。

      [ターゲットテーブルの設定] > [リソースグループ]

      前提条件セクションのサーバーレスリソースグループを選択します。

      [ターゲットテーブルの設定] > [Preview Data of Uploaded File]

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

    4. Upload Data をクリックし、データアップロードが完了するまで待ちます。

  3. アップロードされたデータの確認

    データ開発 ページの ODPS SQL ノードエディターに戻ります。次の SQL コマンドを記述し、選択して実行します。

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

    start_ip と end_ip には 10 進数の整数が含まれ、start_ip_arg と end_ip_arg にはドット 10 進数表記のアドレスが含まれます。値に不整合があるか、テーブルが空の場合は、ファイルを再アップロードし、列をテーブルフィールドに再度マッピングします。

UDF の開発

SQL で IP アドレスを比較するには、203.0.113.10 のようなドット区切り10進表記の IP アドレス文字列を、大小比較が可能な10進数の整数に変換する UDF が必要です。

  1. MaxCompute Python リソースの作成

    1. データ開発 ページで、対象の ビジネスフロー を右クリックし、リソースの作成 > MaxCompute > Python を選択します。

    2. リソースの作成 ダイアログボックスで、リソースの 名前 (例: mc.py) を入力し、[ODPS リソースとしてアップロード] を選択した後、Create をクリックします。

    3. Python リソースに、次のコードを入力します。

      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

      Submit icon アイコンをクリックしてリソースを送信します。

  2. MaxCompute UDF の作成

    1. データ開発 ページで、対象の[ビジネスフロー]を右クリックし、関数の新規作成 > MaxCompute > 関数を選択します。

    2. 関数の新規作成 ダイアログボックスで、関数の 名前 (例: ip2int) を入力します。 データ開発で複数の MaxCompute エンジンがバインドされている場合は、この関数を作成する MaxCompute DPI エンジンインスタンス を選択します。 次に、Create をクリックします。 この名前は関数を呼び出す際に使用するもので、一度指定すると変更できません。

    3. 関数エディターページで、パラメータを設定します。次の表に、主要なパラメータを示します。パラメータの詳細については、「MaxCompute 関数の登録」をご参照ください。

      パラメータ

      説明

      [関数タイプ]

      デフォルト値のその他の関数のままにします。

      [関数名]

      UDF の名前。SQL で関数を参照するときに使用する名前です。この名前はグローバルに一意である必要があります。

      [クラス名]

      UDF を実装するメインクラスの名前。このパラメーターは必須です。例: mc.IPtoInt。

      説明

      Python リソースでは、Python リソース名とクラス名をピリオドで結合し、リソース名の .py 拡張子を省略します。

      [リソースリスト]

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

  3. ツールバーの Save icon アイコンをクリックして、関数を保存します。

  4. ツールバーの Submit icon アイコンをクリックします。新規バージョンを送信するためのダイアログボックスで、変更内容 を入力し、確認 をクリックします。

SQL を使用した IP ジオロケーション分析

UDF は、クエリする IP アドレスを整数に変換し、SQL 文は、その整数が含まれる ipresource テーブル内の IP アドレス範囲を返します。

  1. ODPS SQL ノードエディターに戻ります。次の SQL コマンドを記述し、選択して実行します。

    -- 203.0.113.10 をクエリする IP アドレスに置き換えます。
    -- アドレスはドット 10 進数表記である必要があります。UDF は解析できない値に対して 0 を返し、クエリは行を返しません。
    SELECT * FROM ipresource
    WHERE ip2int('203.0.113.10') >= start_ip
    AND ip2int('203.0.113.10') <= end_ip;
  2. Run icon アイコンをクリックし、パラメーター ダイアログボックスでバインドしたサーバーレスリソースグループを選択して 実行 をクリックします。コスト見積もり ステップが完了したら、再度 実行 をクリックします。

  3. 結果を確認します。クエリした IP アドレスのジオロケーションが取得されます。

関連ドキュメント