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

DataWorks:MaxCompute UDF を使用した IP の地理位置情報の特定

最終更新日:Feb 04, 2026

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

背景情報

MaxCompute はクローズドな計算環境であり、HTTP 経由で Taobao 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 計算リソースをバインドしてワークスペースに接続し、そのネットワーク接続をテストします。

操作手順

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

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

  • サンプルデータ構造:

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

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

MaxCompute への IP アドレスデータベースのアップロード

  1. MaxCompute テーブルの作成

    1. DataWorks コンソールの [ワークスペース] ページに移動します。上部のナビゲーションバーで、目的のリージョンを選択します。目的のワークスペースを見つけ、[操作] 列で [ショートカット] > [Data Studio] を選択します。

    2. [DataStudio] ページで、左側のナビゲーションウィンドウにある image アイコンをクリックして [ワークスペースディレクトリ] に移動します。

    3. image アイコンをクリックし、[ノードを作成] > [MaxCompute] > [MaxCompute SQL] を選択します。

    4. 名前を入力し、[OK] をクリックします。

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

      -- 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)。
      );
    6. [データソースを選択] ドロップダウンリストで、バインドした MaxCompute 計算リソースを選択します。

    7. [実行期間] をクリックして結果を確認します。

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

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

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

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

      パラメーター

      説明

      [アップロードするデータを指定]

      [ファイルを選択]

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

      [宛先テーブルを設定]

      コンピュートエンジン

      MaxCompute

      MaxCompute プロジェクト名

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

      宛先テーブル

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

      重要

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

      リソースグループ

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

      [アップロードファイルのデータをプレビュー]

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

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

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

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

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

UDF の開発

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

  1. [Data Studio] ページで、[Resource Management] アイコン image をクリックします。

  2. MaxCompute Python リソースの作成

    1. [リソース管理] ページで、image アイコンをクリックし、[リソースの作成] > [MaxCompute Python] を選択します。

    2. ダイアログボックスで、mc.py などの名前を入力し、[OK] をクリックします。

    3. ローカルファイルの mc.py[ファイルコンテンツ] にアップロードし、[データソース] をバインドした計算リソースに設定します。

    4. ツールバーで、[保存][公開] をクリックします。

  3. MaxCompute UDF の作成

    1. [Resource Management] ページで、image アイコンをクリックし、[Create Function] > [MaxCompute Function] を選択します。

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

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

      詳細については、「MaxCompute のリソースと関数」をご参照ください。

      パラメーター

      説明

      機能タイプ

      デフォルト設定の [OTHER] のままにします。

      [データソース]

      ワークスペースにバインドされている計算リソースを選択します。

      [クラス名]

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

      [リソース]

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

    4. ツールバーで、[保存][公開] をクリックします。

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

  1. MaxCompute 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 アドレスの場所を確認できます。

参考