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

DataWorks:MaxCompute UDF を使用した IP ジオロケーションの検索

最終更新日:Feb 04, 2026

MaxCompute は外部 API を直接呼び出すことができません。本チュートリアルでは、オフラインの IP データベースとユーザー定義関数(UDF)を使用して、MaxCompute 内で IP アドレスのジオロケーションを効率的に分析するための完全なケーススタディを紹介します。

背景情報

MaxCompute は閉じた計算環境であり、HTTP 経由で淘宝 IP データベース API のような外部 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 を呼び出す SQL 文を記述し、MaxCompute テーブル内で IP アドレスを検索してジオロケーション情報を取得します。

事前準備

  1. Data Studio(新バージョン)を有効化しないワークスペースを作成します。本チュートリアルでは、基本モードの DataWorks ワークスペースを使用します。

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

  3. MaxCompute コンピューティングリソースをワークスペースにバインドし、ネットワーク接続をテストします。

  4. 対象のワークスペースで、ビジネスフローを作成します。

操作手順

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

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

  • サンプルデータ構造:

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

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

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

  1. テーブルを作成します。

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

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

    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 範囲の開始アドレス(ドット区切り文字列形式。例:"1.0.1.x")。
          end_ip_arg   STRING,   -- IP 範囲の終了アドレス(ドット区切り文字列形式。例:"1.0.3.x")。
          country      STRING,   -- 国名。
          area         STRING,   -- エリア名(通常は空欄または国名と同じ)。
          city         STRING,   -- 市名(一部のデータでは都道府県名の場合があります)。
          county       STRING,   -- 区/郡名。
          isp          STRING    -- インターネットサービスプロバイダー(例:中国電信、中国聯通、中国移動)。
      );
    5. ** アイコンをクリックしてコードを実行します。パラメーター ダイアログボックスで、バインド済みのサーバーレスリソースグループを選択し、実行 をクリックします。MaxCompute コンピューティングコストの見積もり が完了したら、実行 をクリックします。

  1. データをテーブルにアップロードします。

    1. 左上隅の image アイコンをクリックします。表示されたページで、全製品 > データ統合 > アップロードとダウンロード をクリックします。

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

    3. データのアップロード をクリックし、以下の表に従ってパラメーターを設定します。

      パラメーター

      説明

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

      ファイルの選択

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

      送信先テーブルの設定

      コンピュートエンジン

      MaxCompute

      MaxComputeProject 名

      対象の 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 アドレスのジオロケーションを検索するには、ドット区切りの 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 アドレスの位置情報が表示されます。

参考