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. |
| 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:
Persiapan data: Unggah file database alamat IP publik ke tabel MaxCompute sebagai referensi.
Pengembangan UDF: Buat UDF untuk mengonversi alamat IP string menjadi bilangan bulat guna mendukung pencocokan rentang yang efisien.
Analisis SQL: Tulis pernyataan SQL yang memanggil UDF untuk mencari alamat IP di tabel MaxCompute dan mendapatkan geolokasinya.
Persiapan
Buat workspace tanpa mengaktifkan Data Studio (versi baru). Tutorial ini menggunakan workspace DataWorks dalam basic mode.
Ikat serverless resource group ke workspace tersebut.
Ikat sumber daya komputasi MaxCompute ke workspace dan uji konektivitas jaringannya.
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
Buat tabel.
Buka halaman DataStudio.
Masuk ke Konsol DataWorks. Di bilah navigasi atas, pilih Wilayah yang diinginkan. Di panel navigasi sisi kiri, pilih . Pada halaman yang muncul, pilih ruang kerja yang diinginkan dari daftar drop-down lalu klik Go to Data Development.
Di halaman DataStudio, klik kanan business flow target dan pilih .
Pada kotak dialog, pilih sumber daya komputasi yang telah Anda siapkan untuk Engine Instance, masukkan nama, lalu klik Confirm.
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). );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.
Unggah data ke tabel.
Klik ikon
di pojok kiri atas. Di halaman yang ditampilkan, klik . Klik ikon
di panel navigasi kiri.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.
PentingJika tabel yang baru dibuat tidak muncul dalam daftar, buka 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.
Klik Upload Data.
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.
Buat resource Python MaxCompute.
Di halaman DataStudio, klik kanan business flow target dan pilih .
Pada kotak dialog, masukkan nama, misalnya
mc.py. Pilih Upload to MaxCompute dan klik Create.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 0Klik ikon
.
Buat UDF MaxCompute.
Di halaman DataStudio, klik kanan business flow target dan pilih .
Pada kotak dialog, masukkan nama, misalnya
ip2int, lalu klik Create. Nama ini akan menjadi nama UDF dan tidak dapat diubah setelah pembuatan.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.CatatanKetika 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.pydari langkah sebelumnya.Klik ikon
untuk menyimpan fungsi.Klik ikon
. Di kotak dialog, masukkan deskripsi perubahan dan klik Confirm.
Temukan geolokasi IP menggunakan SQL
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;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.Lihat hasil eksekusi. Anda dapat menemukan lokasi alamat IP tersebut.