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 を使用してクエリを実行します。 |
| IP データベースの定期的な手動更新が必要です。 | 推奨 |
結論:3 番目のソリューションのみが、ビッグデータのユースケースにおけるパフォーマンス専有型で高度に統合された分析の要求を満たすことができます。このチュートリアルでは、このソリューションの実装方法を詳しく説明します。
ソリューション概要
このソリューションは、主に 3 つのモジュールで構成されています。
データの準備:パブリック IP アドレスデータベースファイルを MaxCompute テーブルにアップロードし、リファレンスとして使用します。
UDF の開発:文字列の IP アドレスを整数に変換する UDF を作成します。これは、効率的な範囲照合に不可欠です。
SQL 分析:UDF を呼び出す SQL 文を記述して、MaxCompute テーブルで IP アドレスを検索し、その地理位置情報を取得します。
事前準備
[Data Studio (新バージョン) を使用] を使用して ワークスペース を作成します。このチュートリアルでは、基本モード の DataWorks ワークスペースを使用します。
サーバーレスリソースグループをワークスペースにバインドします。
MaxCompute 計算リソースをバインドしてワークスペースに接続し、そのネットワーク接続をテストします。
操作手順
IP アドレスデータベースの準備
サンプルデータベース: ipdata.csv。
サンプルデータ構造:
データ形式は
UTF-8です。最初の 4 つのデータフィールドは、IP 範囲の開始アドレスと終了アドレスです。最初の 2 つは 10 進整数形式で、次の 2 つはドット区切り 10 進数形式です。
MaxCompute への IP アドレスデータベースのアップロード
MaxCompute テーブルの作成
DataWorks コンソールの [ワークスペース] ページに移動します。上部のナビゲーションバーで、目的のリージョンを選択します。目的のワークスペースを見つけ、[操作] 列で を選択します。
[DataStudio] ページで、左側のナビゲーションウィンドウにある
アイコンをクリックして [ワークスペースディレクトリ] に移動します。
アイコンをクリックし、 を選択します。名前を入力し、[OK] をクリックします。
ノードエディターページで、次のコードを入力します。
-- 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)。 );[データソースを選択] ドロップダウンリストで、バインドした MaxCompute 計算リソースを選択します。
[実行期間] をクリックして結果を確認します。
テーブルへのデータアップロード
左上隅の
アイコンをクリックします。表示されたページで、 をクリックします。左のナビゲーションウィンドウで
アイコンをクリックします。[データをアップロード] をクリックします。次の表の説明に従ってパラメーターを設定します。
パラメーター
説明
[アップロードするデータを指定]
[ファイルを選択]
ipdata.csvファイルをアップロードします。[宛先テーブルを設定]
コンピュートエンジン
MaxCompute
MaxCompute プロジェクト名
ターゲットの MaxCompute プロジェクトを選択します。
宛先テーブル
ipresource テーブルを選択します。
重要新しく作成したテーブルがリストにない場合は、 に移動し、
odps.<project_name>.ipresourceのメタデータを手動でリフレッシュします。リソースグループ
準備したサーバーレスリソースグループを選択します。
[アップロードファイルのデータをプレビュー]
.csv ファイル内のデータを ipresource テーブルのフィールドにマップするには、[順序によるマッピング] をクリックします。
[データをアップロード] をクリックします。
データアップロードの確認
[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 が必要です。
[Data Studio] ページで、[Resource Management] アイコン
をクリックします。MaxCompute Python リソースの作成
[リソース管理] ページで、
アイコンをクリックし、 を選択します。ダイアログボックスで、
mc.pyなどの名前を入力し、[OK] をクリックします。ローカルファイルの mc.py を [ファイルコンテンツ] にアップロードし、[データソース] をバインドした計算リソースに設定します。
ツールバーで、[保存] と [公開] をクリックします。
MaxCompute UDF の作成
[Resource Management] ページで、
アイコンをクリックし、 を選択します。ダイアログボックスで、
ip2intなどの名前を入力し、[OK] をクリックします。これは UDF 名となり、作成後に変更することはできません。エディターページで、パラメーターを設定します。主要なパラメーターは以下のとおりです。
詳細については、「MaxCompute のリソースと関数」をご参照ください。
パラメーター
説明
機能タイプ
デフォルト設定の [OTHER] のままにします。
[データソース]
ワークスペースにバインドされている計算リソースを選択します。
[クラス名]
UDF を実装するメインクラスです。例:
mc.IPtoInt。[リソース]
前のステップのリソースファイル
mc.pyを選択します。ツールバーで、[保存] と [公開] をクリックします。
SQL を使用した IP の地理位置情報の検索
MaxCompute SQL ノードエディターに戻ります。次の SQL クエリを実行します。
-- クエリしたい実際の IP アドレスに置き換えてください。 SELECT * FROM ipresource WHERE ip2int('1.0.2xx.4x') >= start_ip AND ip2int('1.0.2xx.4x') <= end_ip;[データソースを選択] ドロップダウンリストで、バインドした MaxCompute 計算リソースを選択します。
[実行期間] をクリックすると、IP アドレスの場所を確認できます。