全部产品
Search
文档中心

DataWorks:Temukan geolokasi IP menggunakan UDF MaxCompute

更新时间:Sep 25, 2025

MaxCompute tidak dapat secara langsung memanggil operasi API eksternal. Tutorial ini memberikan studi kasus lengkap tentang cara menggunakan database IP offline dan fungsi yang ditentukan pengguna (UDF) untuk menganalisis geolokasi alamat IP secara efisien di MaxCompute.

Latar Belakang

MaxCompute adalah lingkungan komputasi tertutup yang tidak dapat secara langsung memanggil operasi API eksternal melalui HTTP, seperti API basis data IP Taobao, untuk menanyakan geolokasi IP secara real-time. Berikut tiga solusi yang dapat digunakan 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 API secara siklik untuk kueri.

Sederhana

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

Tidak direkomendasikan

Kueri basis data lokal

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

Tidak ada batas tingkat API

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

Tidak direkomendasikan

Impor IP database untuk kueri

Unggah seluruh basis data 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 apa pun.

  • Dapat diskalakan: Cocok untuk skala data apa pun.

Memerlukan pembaruan manual berkala untuk basis data IP.

Direkomendasikan

Kesimpulan: Solusi ketiga adalah satu-satunya yang dapat memenuhi kebutuhan untuk analisis berkinerja tinggi dan terintegrasi tinggi dalam kasus penggunaan big data. Tutorial ini merinci cara mengimplementasikan solusi tersebut.

Ikhtisar solusi

Solusi ini terdiri dari tiga modul utama:

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

  2. Pengembangan UDF: Buat UDF untuk mengonversi string alamat IP menjadi bilangan bulat, yang penting untuk 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 ruang kerja yang belum memilih opsi Data Studio pratinjau publik. Tutorial ini menggunakan ruang kerja DataWorks dalam Basic mode.

  2. Ikatkan kelompok sumber daya tanpa server ke ruang kerja.

  3. Ikatkan sumber daya komputasi MaxCompute ke ruang kerja dan uji konektivitas jaringannya.

  4. Di ruang kerja target, buat alur bisnis.

Prosedur

Siapkan basis data alamat IP

  • Contoh Basis Data: ipdata.csv.

  • Contoh Struktur Data:

    • Format datanya adalah UTF-8.

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

Unggah basis data alamat IP ke MaxCompute

  1. Buat Tabel.

    1. Pergi ke halaman DataStudio.

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

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

    3. Di kotak dialog, pilih sumber daya komputasi yang Anda siapkan untuk Engine Instance, masukkan nama, dan 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 dari rentang IP (dalam format bilangan bulat desimal).
          end_ip       BIGINT,   -- Alamat akhir dari rentang IP (dalam format bilangan bulat desimal).
          start_ip_arg STRING,   -- Alamat awal dari rentang IP (dalam format string dotted-decimal, seperti "1.0.1.x").
          end_ip_arg   STRING,   -- Alamat akhir dari rentang IP (dalam format string dotted-decimal, seperti "1.0.3.x").
          country      STRING,   -- Nama negara.
          area         STRING,   -- Nama area (biasanya kosong atau sama dengan negara).
          city         STRING,   -- Nama kota (mungkin provinsi untuk beberapa data).
          county       STRING,   -- Nama distrik/kabupaten.
          isp          STRING    -- Penyedia layanan internet (seperti China Telecom, China Unicom, dan China Mobile).
      );
    5. Klik ikon ** untuk menjalankan kode. Di kotak dialog Parameters, pilih kelompok sumber daya tanpa server yang Anda ikatkan dan klik Run. Tunggu 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 sebelah kiri.

    3. Klik Upload Data. Konfigurasikan parameter sesuai dengan deskripsi dalam 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 ada dalam daftar, pergi ke Data Map > My Data > Refresh Table Metadata dan segarkan metadata secara manual untuk odps.<project_name>.ipresource.

      Resource Group

      Pilih kelompok sumber daya tanpa server yang Anda siapkan.

      Preview Data of Uploaded File

      Klik Mapping by Order untuk memetakan data dalam file .csv ke 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 Sumber Daya Python MaxCompute.

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

    2. Di kotak dialog, masukkan nama, seperti 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 alur bisnis target dan pilih Create Function > MaxCompute > Function.

    2. Di kotak dialog, masukkan nama, seperti ip2int, dan klik Create. 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 Daftarkan fungsi MaxCompute.

      Parameter

      Deskripsi

      Function Type

      Biarkan pengaturan default Other Function.

      Class Name

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

      Catatan

      Ketika tipe sumber daya adalah Python, format nama kelas adalah Nama sumber daya Python.Nama kelas (tidak diperlukan .py dalam nama sumber daya).

      Resources

      Pilih file sumber daya 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 kelompok sumber daya tanpa server yang Anda ikatkan dan klik Run. Tunggu Estimate MaxCompute Computing Cost selesai, lalu klik Run.

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

Referensi