Ikhtisar skenario penggunaan
Topik ini menjelaskan cara menggunakan MaxLake untuk menerapkan arsitektur data lakehouse terpadu yang mencakup ingest data, gudang data, serta orkestrasi berbagai skenario analitik. Dengan menggunakan data Internet of Vehicles (IoV) sebagai contoh, alur kerja menunjukkan cara menganalisis jarak tempuh dan kecepatan kendaraan berdasarkan data lokasi GPS yang dilaporkan oleh terminal dalam kendaraan. Melalui integrasi beberapa mesin komputasi, Anda dapat memperoleh nilai multifaset dari satu sumber data untuk mendukung berbagai skenario penggunaan, yaitu pelaporan OLAP real-time, berbagi data lintas tim yang aman dengan penyembunyian dinamis, serta pelatihan model AI. Arsitektur dan proses keseluruhan diilustrasikan di bawah ini:

Penemuan data otomatis (Lapisan ODS)
Data mentah disimpan di Object Storage Service (OSS). Dalam contoh ini, terminal kendaraan mengunggah file mentah (parquet dan orc) yang berisi informasi lokasi GPS, dipartisi per jam.
Buat
CONNECTIONdi MaxCompute untuk mengelola kredensial akses ke penyimpanan eksternal.Kemudian, gunakan tugas
DataScanuntuk secara otomatis menemukan file tersebut dan mendaftarkannya sebagai tabel eksternal terstruktur (lapisan ODS).
Pemrosesan data inkremental (Lapisan DWD dan ADS)
Filter data tidak valid dari lapisan ODS dan seragamkan format bidang, seperti memformat nilai waktu serta memvalidasi koordinat bujur dan lintang.
Orkestrasi multi-mesin untuk berbagai skenario penggunaan
Online Analytical Processing (OLAP) + AI: Hubungkan mesin StarRocks ke data yang telah diproses untuk kueri real-time sub-detik dan dasbor (misalnya, memvisualisasikan total jarak tempuh armada).
Kolaborasi lintas tim yang aman: Gunakan keamanan detail halus MaxCompute untuk berbagi data dengan tim pihak ketiga menggunakan mesin Spark.
Pelatihan AI: Data berkualitas tinggi yang telah dibersihkan menjadi fondasi untuk pelatihan model menggunakan framework seperti PyTorch.
Penyembunyian data dinamis diterapkan pada bidang sensitif (seperti ID Kendaraan) untuk memastikan kepatuhan privasi selama kolaborasi.
Prosedur
Unggah data uji.
Masuk ke Konsol Object Storage Service (OSS).
Di panel navigasi sebelah kiri, klik Buckets.
Di halaman Buckets, klik Create Bucket.
Dalam contoh ini, nama bucket adalah
vehicle-raw.Di halaman Buckets, klik Bucket Name yang dituju untuk masuk ke halaman Objects.
Klik Upload Object untuk mengunggah file data uji yang telah diekstrak Maxlake_example_parquet.zip.
Berikan izin.
Jika Anda menggunakan pengguna RAM (bukan akun root) untuk mengelola koneksi, Anda harus memiliki role
Connection_Admindi tingkat tenant. Untuk informasi lebih lanjut, lihat Otorisasi role tingkat tenant.Akun Alibaba Cloud atau pengguna dengan role tingkat tenant
Super_AdministratordanAdmindapat memberikan roleConnection_Admin.Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Di halaman Tenants, klik tab Roles.
Di tab Roles, pilih
Connection_AdmindanDatascan_Admin, lalu klik New Authorization di kolom Actions.Di kotak dialog Newly Added Authorization, tambahkan pengguna yang akan diberi otorisasi dan klik OK.
Di MaxCompute, buat
CONNECTION.Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Di halaman Data Lake Connection (CONNECTION), klik Establish a connection.
Di kotak dialog Create Data Lake Connection, atur parameter berikut dan klik OK.
Parameter
Deskripsi
Data Connection Name
Nama koneksi danau data. Nama harus unik dalam tenant.
RAMRoleARN
Pilih RAMRoleARN dari peran RAM yang memiliki izin untuk mengakses OSS.
Anda dapat membuat peran kustom dan menentukan RAMRoleARN-nya. Untuk informasi lebih lanjut, lihat Otorisasi mode STS.
Data Connection Description
Deskripsi koneksi danau data.
Buat pekerjaan DataScan.
Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Di halaman Data Discovery, klik Create a data discovery task.
Di kotak dialog Create Task, atur parameter berikut dan klik Create.
Basic configuration
Parameter
Deskripsi
Task Name
Nama tugas. Nama harus unik dalam tenant.
Task cycle
5 menit
Lake Data Configuration
Parameter
Deskripsi
Connection
Pilih
CONNECTIONsebagai kredensial akses penyimpanan eksternal.Location
Masukkan path OSS tempat file data Anda disimpan.
Format:
oss://<Nama Bucket>/<Path OSS>/Bucket OSS dan tugas MaxCompute DataScan harus berada di wilayah yang sama dan dimiliki oleh akun Alibaba Cloud yang sama.
Contoh:
oss://vehicle-raw/Maxlake_example_parquet
Catalog Configuration
Parameter
Deskripsi
Project
Pilih proyek MaxCompute tempat tabel eksternal akan dibuat.
Schema
Pilih skema.
Pastikan Skema tersebut tidak sudah berisi tabel buatan pengguna yang namanya identik dengan folder/file yang diharapkan ditemukan oleh DataScan. Jika terjadi konflik nama, tabel eksternal tidak akan dibuat.
Tugas penemuan data dijalankan setiap 5 menit. Tunggu hingga tugas tersebut berjalan. Setelah berhasil, verifikasi bahwa tabel IoV telah dibuat dan partisi ditambahkan secara otomatis.
CatatanJika pemindaian gagal, periksa bucket OSS Anda untuk file sistem seperti
.DS_Store. File tersebut dapat menyebabkan error parsing. Anda harus menghapusnya secara manual.Versi mendatang akan mendukung pengecualian otomatis file semacam itu.
Skrip SQL pemrosesan data. Jalankan skrip SQL berikut di editor SQL MaxCompute Anda.
Verifikasi lapisan ODS (data mentah).
-- Desain skenario bisnis -- Skenario: Platform IoV memperoleh data lokasi kendaraan real-time (GPS) dan menghitung jarak tempuh per jam serta kecepatan rata-rata untuk setiap kendaraan. -- Sumber data: Terminal dalam kendaraan melaporkan data lokasi, kecepatan, dan lainnya setiap beberapa detik. -- ODS: Menyimpan data laporan mentah secara langsung. -- DWD: Membersihkan, mengurai, dan mentransformasi data menjadi catatan laporan individual. -- ADS: Menghitung total jarak tempuh per jam dan kecepatan rata-rata untuk setiap kendaraan. -- ODS: Tabel data laporan mentah -- Menyimpan data lokasi IoV mentah, dipartisi per jam. SHOW PARTITIONS ods_vehicle_gps_raw; SET odps.sql.allow.fullscan=true; SELECT * FROM ods_vehicle_gps_raw WHERE dt='2025-09-17' AND hh='23'; -- Hasil contoh +------------+------------+-------------+------------+------------+------------+-------------+------------+------------+ | vin | device_id | report_time | lng | lat | speed | raw_payload | dt | hh | +------------+------------+-------------+------------+------------+------------+-------------+------------+------------+ | VIN001 | DEV001 | 2025-09-16 00:00:00 | 120.00023573730152 | 30.39975989605289 | 73.3843581906447 | mock_payload | 2025-09-17 | 23 | | VIN002 | DEV002 | 2025-09-16 00:00:00 | 120.00517998985256 | 30.33811818824062 | 67.43035716350673 | mock_payload | 2025-09-17 | 23 | | VIN003 | DEV003 | 2025-09-16 00:00:00 | 120.24295999679852 | 30.143229002199707 | 40.8918776553552 | mock_payload | 2025-09-17 | 23 | | VIN001 | DEV001 | 2025-09-16 00:30:00 | 120.24754980497414 | 30.373484773735274 | 49.50436236779409 | mock_payload | 2025-09-17 | 23 | | VIN002 | DEV002 | 2025-09-16 00:30:00 | 120.00510501582413 | 30.42486370328109 | 55.8400627485663 | mock_payload | 2025-09-17 | 23 | | VIN003 | DEV003 | 2025-09-16 00:30:00 | 120.36073125682805 | 30.065016013833237 | 61.82996654036919 | mock_payload | 2025-09-17 | 23 | | VIN002 | DEV002 | 2025-09-16 19:30:00 | 120.29488938268968 | 30.12474152125639 | 66.48209032904454 | mock_payload | 2025-09-17 | 23 | | VIN002 | DEV002 | 2025-09-16 19:00:00 | 120.35157954057287 | 30.459823299646295 | 76.36574370617315 | mock_payload | 2025-09-17 | 23 | | VIN001 | DEV001 | 2025-09-16 19:30:00 | 120.3113710027241 | 30.33402715522518 | 62.601762741153024 | mock_payload | 2025-09-17 | 23 | +------------+------------+-------------+------------+------------+------------+-------------+------------+------------+Buat lapisan DWD (pembersihan data).
-- Lapisan DWD (dwd_vehicle_gps) -- Berdasarkan lapisan ODS, lapisan ini memfilter data tidak valid dan menyatukan format bidang, seperti pemformatan waktu dan validasi bujur lintang. CREATE TABLE IF NOT EXISTS dwd_vehicle_gps ( vin STRING COMMENT 'Identifier unik kendaraan', event_time DATETIME COMMENT 'Waktu laporan', lng DOUBLE COMMENT 'Bujur', lat DOUBLE COMMENT 'Lintang', speed DOUBLE COMMENT 'Kecepatan (km/jam)', loc_valid BOOLEAN COMMENT 'Menunjukkan apakah lokasi valid' ) PARTITIONED BY (dt STRING, hh STRING); -- SQL Transformasi INSERT OVERWRITE TABLE dwd_vehicle_gps PARTITION (dt='2025-09-17', hh='23') SELECT vin, TO_DATE(report_time,'yyyy-MM-dd HH:mi:ss') AS event_time, lng, lat, speed, CASE WHEN lng BETWEEN 70 AND 140 AND lat BETWEEN 10 AND 60 THEN TRUE ELSE FALSE END AS loc_valid FROM ods_vehicle_gps_raw WHERE dt='2025-09-17' AND hh='23' AND speed >= 0 AND vin IS NOT NULL; SELECT * FROM dwd_vehicle_gps WHERE dt='2025-09-17' AND hh='23'; -- Hasil contoh +------------+------------+------------+------------+------------+-----------+------------+------------+ | vin | event_time | lng | lat | speed | loc_valid | dt | hh | +------------+------------+------------+------------+------------+-----------+------------+------------+ | VIN001 | 2025-09-16 00:00:00 | 120.00023573730152 | 30.39975989605289 | 73.3843581906447 | true | 2025-09-17 | 23 | | VIN002 | 2025-09-16 00:00:00 | 120.00517998985256 | 30.33811818824062 | 67.43035716350673 | true | 2025-09-17 | 23 | | VIN003 | 2025-09-16 00:00:00 | 120.24295999679852 | 30.143229002199707 | 40.8918776553552 | true | 2025-09-17 | 23 | | VIN001 | 2025-09-16 00:30:00 | 120.24754980497414 | 30.373484773735274 | 49.50436236779409 | true | 2025-09-17 | 23 | | VIN003 | 2025-09-16 00:30:00 | 120.36073125682805 | 30.065016013833237 | 61.82996654036919 | true | 2025-09-17 | 23 | | VIN001 | 2025-09-16 05:00:00 | 120.13891993725622 | 30.39267490566367 | 53.99676876794396 | true | 2025-09-17 | 23 | | VIN003 | 2025-09-16 05:30:00 | 120.04798104849084 | 30.012209889484666 | 65.01092831837522 | true | 2025-09-17 | 23 | | VIN002 | 2025-09-16 20:00:00 | 120.42721760246307 | 30.051330581564144 | 79.73892066615583 | true | 2025-09-17 | 23 | | VIN003 | 2025-09-16 20:00:00 | 120.47715870033818 | 30.302941456112517 | 58.61057150112957 | true | 2025-09-17 | 23 | | VIN001 | 2025-09-16 20:30:00 | 120.3067564206695 | 30.179763514166588 | 47.77533756931095 | true | 2025-09-17 | 23 | +------------+------------+-------------+------------+------------+------------+-------------+------------+------------+Buat lapisan ADS (agregasi).
-- Lapisan ADS (ads_vehicle_hourly_stat) -- Menghitung total jarak tempuh per jam (menggunakan perhitungan selisih lokasi sederhana) dan kecepatan rata-rata untuk setiap kendaraan. CREATE TABLE IF NOT EXISTS ads_vehicle_hourly_stat ( vin STRING COMMENT 'Identifier unik kendaraan', stat_hour STRING COMMENT 'Jam statistik (yyyy-MM-dd HH)', total_distance DOUBLE COMMENT 'Total jarak tempuh (km)', avg_speed DOUBLE COMMENT 'Kecepatan rata-rata (km/jam)' ) PARTITIONED BY (dt STRING, hh STRING); -- SQL transformasi statistik -- Catatan: Formula yang disederhanakan digunakan di sini untuk menghitung jarak demi keperluan demonstrasi. Anda dapat menggunakan rumus haversine dalam skenario dunia nyata. -- Pendekatan sederhana jarak berdasarkan selisih bujur dan lintang (untuk demonstrasi). SET odps.sql.type.system.odps2=true; WITH ordered AS ( SELECT vin, event_time, lng, lat, speed, ROW_NUMBER() OVER (PARTITION BY vin ORDER BY event_time) AS rn FROM dwd_vehicle_gps WHERE dt='2025-09-17' AND hh='23' AND loc_valid = TRUE ), with_prev AS ( SELECT a.vin, a.event_time, a.speed, -- Pendekatan sederhana menggunakan Jarak Euclidean. Di sini, selisih 1 derajat bujur atau lintang kira-kira 111 km. Ini tidak presisi tetapi cukup untuk demo ini. ABS(a.lng - b.lng)*111 AS dx, ABS(a.lat - b.lat)*111 AS dy FROM ordered a LEFT JOIN ordered b ON a.vin = b.vin AND a.rn = b.rn + 1 ) INSERT OVERWRITE TABLE ads_vehicle_hourly_stat PARTITION (dt='2025-09-17', hh='23') SELECT vin, '2025-09-17 23' AS stat_hour, SUM( SQRT( COALESCE(dx,0)*COALESCE(dx,0) + COALESCE(dy,0)*COALESCE(dy,0) ) ) AS total_distance, AVG(speed) AS avg_speed FROM with_prev GROUP BY vin; -- Kueri jarak tempuh dan kecepatan rata-rata untuk kendaraan VIN001. SET odps.sql.allow.fullscan=true; SELECT * FROM ads_vehicle_hourly_stat WHERE vin='VIN001' ORDER BY stat_hour DESC; -- Hasil. +------------+---------------+--------------------+-------------------+------------+------------+ | vin | stat_hour | total_distance | avg_speed | dt | hh | +------------+---------------+--------------------+-------------------+------------+------------+ | VIN001 | 2025-09-17 23 | 1510.7384548492398 | 59.33624859907179 | 2025-09-17 | 23 | +------------+---------------+--------------------+-------------------+------------+------------+ SET odps.sql.allow.fullscan=true; SELECT vin AS vehicle_id, stat_hour AS stat_time, CONCAT(CAST(ROUND(total_distance, 2) AS STRING), ' km') AS mileage, CONCAT(CAST(ROUND(avg_speed, 2) AS STRING), ' km/jam') AS avg_speed FROM ads_vehicle_hourly_stat WHERE vin='VIN001' ORDER BY stat_hour DESC; -- Hasil. +------------+---------------+------------+------------+ | vehicle_id | stat_time | mileage | avg_speed | +------------+---------------+------------+------------+ | VIN001 | 2025-09-17 23 | 1510.74 km | 59.34 km/jam | +------------+---------------+------------+------------+Buat role lintas tim dan berikan izin kueri.
-- Kolaborasi lintas tim dan berbagi data aman. Aktifkan penyembunyian data dinamis untuk tim pihak ketiga yang menggunakan mesin Spark untuk analitik data. CREATE role thirdparty; GRANT CreateInstance, List ON project <project_name> TO ROLE thirdparty; GRANT SELECT ON TABLE ods_vehicle_gps_raw TO ROLE thirdparty; ADD USER RAM$<your Alibaba Cloud account>; GRANT thirdparty TO RAM$<your Alibaba Cloud account>;De-identifikasi tabel total jarak tempuh kendaraan. Sembunyikan ID kendaraan unik dengan hanya menyisakan karakter pertama dan terakhir, serta mengganti karakter lain dengan tanda bintang (*).
-- Aktifkan fitur penyamaran data untuk proyek. setproject odps.data.masking.policy.enable=true; -- De-identifikasi tabel total jarak tempuh kendaraan. Sembunyikan ID kendaraan unik dengan hanya menyisakan karakter pertama dan terakhir, serta mengganti karakter lain dengan tanda bintang (*). CREATE data masking policy IF NOT EXISTS masking_vin TO role (thirdparty) USING MASKED_STRING_UNMASKED_BA(1, 1); apply data masking policy masking_vin bind TO TABLE ads_vehicle_hourly_stat COLUMN vin;