全部产品
Search
文档中心

DataWorks:Temukan geolokasi IP menggunakan UDF MaxCompute

更新时间:Feb 04, 2026

MaxCompute tidak dapat langsung memanggil operasi API eksternal. Tutorial ini menyajikan studi kasus lengkap yang menunjukkan cara menggunakan database IP offline dan user-defined function (UDF) untuk menganalisis geolokasi alamat IP secara efisien di MaxCompute.

Latar Belakang

MaxCompute merupakan lingkungan komputasi tertutup dan tidak dapat langsung memanggil operasi API eksternal melalui HTTP, seperti API database IP Taobao, untuk melakukan kueri geolokasi IP secara real-time. Terdapat tiga solusi berikut untuk menganalisis geolokasi alamat IP di MaxCompute.

Solusi

Implementasi

Kelebihan

Kekurangan

Kesimpulan

Ekspor data untuk kueri

Ekspor alamat IP yang akan dianalisis dari MaxCompute ke perangkat lokal, lalu gunakan skrip untuk memanggil operasi API secara siklik guna melakukan kueri.

Sederhana

Efisiensi rendah. Tunduk pada batas tingkat API (misalnya 10 QPS), sehingga tidak cocok untuk data berskala besar.

Tidak disarankan

Kueri database lokal

Unduh database IP dan alamat IP yang akan dianalisis ke perangkat lokal, lalu lakukan pencocokan menggunakan program lokal.

Tidak terkena batas tingkat API

Data terpisah dari gudang data dan tidak dapat dikaitkan dengan data bisnis lainnya (seperti tabel pesanan) di MaxCompute untuk analisis.

Tidak disarankan

Impor database IP untuk kueri

Unggah seluruh database alamat IP ke tabel MaxCompute, lalu gunakan UDF dalam SQL untuk melakukan kueri.

  • Efisien: Memanfaatkan sepenuhnya kemampuan komputasi paralel MaxCompute.

  • Terintegrasi: Dapat langsung dikaitkan dengan tabel MaxCompute mana pun.

  • Skalabel: Cocok untuk skala data apa pun.

Memerlukan pembaruan manual berkala pada database IP.

Disarankan

Kesimpulan: Solusi ketiga adalah satu-satunya yang memenuhi kebutuhan analisis berkinerja tinggi dan terintegrasi secara mendalam dalam skenario data besar. Tutorial ini menjelaskan secara rinci cara mengimplementasikan solusi tersebut.

Ikhtisar solusi

Solusi ini terdiri dari tiga modul utama:

  1. Persiapan data: Unggah file database alamat IP publik ke tabel MaxCompute sebagai referensi.

  2. Pengembangan UDF: Buat UDF untuk mengonversi alamat IP string menjadi bilangan bulat guna mendukung pencocokan rentang yang efisien.

  3. Analisis SQL: Tulis pernyataan SQL yang memanggil UDF untuk mencari alamat IP di tabel MaxCompute dan mendapatkan geolokasinya.

Persiapan

  1. Buat workspace tanpa mengaktifkan Data Studio (versi baru). Tutorial ini menggunakan workspace DataWorks dalam basic mode.

  2. Ikat serverless resource group ke workspace tersebut.

  3. Ikat sumber daya komputasi MaxCompute ke workspace dan uji konektivitas jaringannya.

  4. Di workspace target, buat business flow.

Prosedur

Persiapkan database alamat IP

  • Database contoh: ipdata.csv.

  • Struktur data contoh:

    • Format data adalah UTF-8.

    • Empat bidang data pertama berisi alamat awal dan akhir rentang IP. Dua bidang pertama dalam format bilangan bulat desimal, sedangkan dua berikutnya dalam format dotted-decimal.

Unggah database alamat IP ke MaxCompute

  1. Buat tabel.

    1. Buka halaman DataStudio.

      Masuk ke Konsol DataWorks. Di bilah navigasi atas, pilih Wilayah yang diinginkan. Di panel navigasi sisi kiri, pilih Data Development and O&M > Data Development. Pada halaman yang muncul, pilih ruang kerja yang diinginkan dari daftar drop-down lalu klik Go to Data Development.

    2. Di halaman DataStudio, klik kanan business flow target dan pilih Create Node > MaxCompute > ODPS SQL.

    3. Pada kotak dialog, pilih sumber daya komputasi yang telah Anda siapkan untuk Engine Instance, masukkan nama, lalu klik Confirm.

    4. Di halaman editor node, masukkan kode berikut:

      -- Jika tabel bernama ipresource sudah ada, hapus terlebih dahulu.
      DROP TABLE IF EXISTS ipresource;
      -- Buat tabel untuk menyimpan alamat IP.
      CREATE TABLE IF NOT EXISTS ipresource 
      (
          start_ip     BIGINT,   -- Alamat awal rentang IP (dalam format bilangan bulat desimal).
          end_ip       BIGINT,   -- Alamat akhir rentang IP (dalam format bilangan bulat desimal).
          start_ip_arg STRING,   -- Alamat awal rentang IP (dalam format string dotted-decimal, seperti "1.0.1.x").
          end_ip_arg   STRING,   -- Alamat akhir rentang IP (dalam format string dotted-decimal, seperti "1.0.3.x").
          country      STRING,   -- Nama negara.
          area         STRING,   -- Nama wilayah (biasanya kosong atau sama dengan negara).
          city         STRING,   -- Nama kota (untuk beberapa data bisa berupa provinsi).
          county       STRING,   -- Nama kabupaten/kota.
          isp          STRING    -- Penyedia layanan Internet (seperti China Telecom, China Unicom, dan China Mobile).
      );
    5. Klik ikon ** untuk menjalankan kode. Di kotak dialog Parameters, pilih serverless resource group yang telah Anda ikat, lalu klik Run. Tunggu hingga Estimate MaxCompute Computing Cost selesai, lalu klik Run.

  1. Unggah data ke tabel.

    1. Klik ikon image di pojok kiri atas. Di halaman yang ditampilkan, klik All Products > Data Integration > Upload and Download.

    2. Klik ikon image di panel navigasi kiri.

    3. Klik Upload Data. Konfigurasikan parameter sesuai tabel berikut.

      Parameter

      Deskripsi

      Specify Data to Be Uploaded

      Select File

      Unggah file ipdata.csv.

      Configure Destination Table

      Compute Engine

      MaxCompute

      MaxComputeProject Name

      Pilih proyek MaxCompute target.

      Destination Table

      Pilih tabel ipresource.

      Penting

      Jika tabel yang baru dibuat tidak muncul dalam daftar, buka Data Map > My Data > Refresh Table Metadata dan refresh metadata secara manual untuk odps.<project_name>.ipresource.

      Resource Group

      Pilih serverless resource group yang telah Anda siapkan.

      Preview Data of Uploaded File

      Klik Mapping by Order untuk memetakan data dalam file .csv ke bidang-bidang tabel ipresource.

    4. Klik Upload Data.

  2. Verifikasi bahwa data telah diunggah.

    Kembali ke editor node ODPS SQL di halaman DataStudio. Jalankan kueri SQL berikut. Jika Anda dapat melihat jumlah baris data dan data sampel, unggahan berhasil.

    -- Kueri jumlah baris data dalam tabel.
    SELECT COUNT(*) FROM ipresource;
    -- Pratinjau 10 baris data pertama.
    SELECT * FROM ipresource limit 10;

Kembangkan UDF

Untuk mencari geolokasi alamat IP dalam SQL, Anda memerlukan UDF yang mengonversi string IP dotted-decimal (seperti '1.0.2xx.4x') menjadi bilangan bulat desimal yang dapat dibandingkan.

  1. Buat resource Python MaxCompute.

    1. Di halaman DataStudio, klik kanan business flow target dan pilih Create Resource > MaxCompute > Python.

    2. Pada kotak dialog, masukkan nama, misalnya mc.py. Pilih Upload to MaxCompute dan klik Create.

    3. Di halaman editor node, masukkan kode berikut:

      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. Klik ikon image.png.

  2. Buat UDF MaxCompute.

    1. Di halaman DataStudio, klik kanan business flow target dan pilih Create Function > MaxCompute > Function.

    2. Pada kotak dialog, masukkan nama, misalnya ip2int, lalu klik Create. Nama ini akan menjadi nama UDF dan tidak dapat diubah setelah pembuatan.

    3. Di halaman editor, konfigurasikan parameter. Parameter utama dijelaskan di bawah ini:

      Untuk deskripsi parameter lebih lanjut, lihat Register a MaxCompute function.

      Parameter

      Deskripsi

      Function Type

      Pertahankan pengaturan default Other Function.

      Class Name

      Kelas utama yang mengimplementasikan UDF. Contoh nilai: mc.IPtoInt.

      Catatan

      Ketika jenis resource adalah Python, format nama kelas adalah nama resource Python.Nama Kelas (ekstensi .py pada nama resource tidak diperlukan).

      Resources

      Pilih file resource mc.py dari langkah sebelumnya.

    4. Klik ikon image untuk menyimpan fungsi.

    5. Klik ikon image.png. Di kotak dialog, masukkan deskripsi perubahan dan klik Confirm.

Temukan geolokasi IP menggunakan SQL

  1. Kembali ke editor node ODPS SQL. Jalankan kueri SQL berikut:

    -- Ganti ini dengan alamat IP aktual yang ingin Anda kueri.
    SELECT * FROM ipresource
    WHERE ip2int('1.0.2xx.4x') >= start_ip
    AND ip2int('1.0.2xx.4x') <= end_ip;
  2. Klik ikon ** untuk menjalankan kode. Di kotak dialog Parameters, pilih serverless resource group yang telah Anda ikat dan klik Run. Tunggu hingga Estimate MaxCompute Computing Cost selesai, lalu klik Run.

  3. Lihat hasil eksekusi. Anda dapat menemukan lokasi alamat IP tersebut.

Referensi