Kueri umum
Saat Anda tersambung ke basis data, Anda akan dapat mengambil data melalui kueri SQL. Bagian ini menyediakan contoh kueri SQL untuk membantu Anda memulai bekerja dengan Private Telematics Lakehouse. Contoh-contoh ini menunjukkan cara mengakses dan menganalisis data dari lapisan Bronze, yang berisi data bisnis dan telematik mentah dengan sedikit transformasi.
Perlu dicatat: Karena basis data berisi jumlah informasi yang sangat besar, pastikan melakukan kueri uji berdasarkan sejumlah nilai yang terbatas yang diambil.
Kueri dasar
Ambil informasi objek dasar
Kueri ini mengembalikan informasi tentang objek (kendaraan/asset) dalam sistem Anda:
SELECT
o.object_id,
o.object_label,
o.model,
d.device_imei,
g.group_label
FROM
raw_business_data.objects o
LEFT JOIN raw_business_data.devices d ON o.device_id = d.device_id
LEFT JOIN raw_business_data.groups g ON o.group_id = g.group_id
WHERE
o.is_deleted = false
ORDER BY
o.object_label;Dapatkan lokasi perangkat terbaru
Ambil data lokasi terbaru untuk semua perangkat Anda:
SELECT
t.device_id,
o.object_label,
-- Konversi koordinat integer yang diskalakan kembali ke format desimal
t.latitude::float / 10000000 AS latitude,
t.longitude::float / 10000000 AS longitude,
t.speed,
t.device_time
FROM
raw_telematics_data.tracking_data_core t
JOIN raw_business_data.objects o ON t.device_id = o.device_id
WHERE
t.device_time > (CURRENT_DATE - INTERVAL '1 day')
AND t.latitude != 0
AND t.longitude != 0
ORDER BY
t.device_id, t.device_time DESC;Menggabungkan data bisnis dan telematik
Laporan aktivitas kendaraan
Kueri ini menghasilkan ringkasan aktivitas harian dengan menggabungkan data bisnis dan telematik:
SELECT
o.object_label AS vehicle,
v.vehicle_type,
DATE(t.device_time) AS date,
COUNT(DISTINCT DATE_PART('hour', t.device_time)) AS active_hours,
MAX(t.speed) AS max_speed,
AVG(t.speed) AS avg_speed
FROM
raw_telematics_data.tracking_data_core t
JOIN raw_business_data.objects o ON t.device_id = o.device_id
LEFT JOIN raw_business_data.vehicles v ON o.object_id = v.object_id
WHERE
t.device_time BETWEEN '2025-03-01' AND '2025-03-28'
GROUP BY
o.object_label, v.vehicle_type, DATE(t.device_time)
ORDER BY
o.object_label, DATE(t.device_time);Penugasan driver dan riwayat lokasi
Lacak karyawan mana yang ditugaskan ke kendaraan mana dan riwayat lokasi mereka:
SELECT
o.object_label AS vehicle,
new_row.changed_datetime AS assignment_time,
e_new.first_name || ' ' || e_new.last_name AS new_driver_name,
e_old.first_name || ' ' || e_old.last_name AS old_driver_name,
new_row.address,
new_row.latitude,
new_row.longitude
FROM
raw_business_data.driver_history new_row
JOIN
raw_business_data.driver_history old_row
ON new_row.changed_datetime = old_row.changed_datetime
AND new_row.object_id = old_row.object_id
LEFT JOIN
raw_business_data.employees e_new ON new_row.new_employee_id = e_new.employee_id
LEFT JOIN
raw_business_data.employees e_old ON old_row.old_employee_id = e_old.employee_id
LEFT JOIN
raw_business_data.objects o ON new_row.object_id = o.object_id
ORDER BY
assignment_time;Menganalisis data sensor
Pelacakan tingkat bahan bakar
Kueri ini menunjukkan cara menganalisis data sensor bahan bakar:
SELECT
o.object_label AS vehicle,
t.device_time,
i.value::numeric AS fuel_level
FROM
raw_telematics_data.inputs i
JOIN raw_business_data.objects o ON i.device_id = o.device_id
JOIN raw_telematics_data.tracking_data_core t ON
i.device_id = t.device_id AND
i.device_time = t.device_time
WHERE
i.sensor_name = 'fuel'
AND t.device_time > (CURRENT_DATE - INTERVAL '7 days')
ORDER BY
o.object_label, t.device_time;Analisis geospasial
Kendaraan di geozone
Identifikasi kendaraan mana yang memasuki geozone tertentu:
SELECT
o.object_label AS vehicle,
z.zone_label AS geozone,
t.device_time AS entry_time
FROM
raw_telematics_data.tracking_data_core t
JOIN raw_business_data.objects o ON t.device_id = o.device_id
JOIN raw_business_data.zones z ON
-- Hitung apakah titik berada di dalam zona melingkar
-- Konversi koordinat dari integer yang diskalakan ke desimal
(
CASE
WHEN z.zone_type = 'circle' THEN
ST_DWithin(
ST_MakePoint(t.longitude::float/10000000, t.latitude::float/10000000)::geography,
ST_MakePoint(z.circle_center_longitude, z.circle_center_latitude)::geography,
z.radius
)
ELSE false
END
)
WHERE
t.device_time > (CURRENT_DATE - INTERVAL '1 day')
ORDER BY
z.zone_label, o.object_label, t.device_time;Tips optimisasi kinerja
Saat bekerja dengan Cloud Data Warehouse, pertimbangkan teknik optimisasi berikut:
Gunakan penyaringan berbasis waktu: Selalu sertakan filter waktu pada
device_timeataurecord_added_atkolom untuk membatasi data yang dipindai. Praktik yang baik:
SELECT * FROM raw_telematics_data.tracking_data_core
WHERE device_time > (CURRENT_DATE - INTERVAL '7 days');Hindari ini (memindai seluruh tabel)
SELECT * FROM raw_telematics_data.tracking_data_core;Manfaatkan indeks: Basis data memiliki indeks pada
(device_id, device_time)pasangan. Strukturkan kueri Anda untuk menggunakan indeks ini bila memungkinkan.Gunakan join secara selektif: Gabungkan tabel hanya bila diperlukan dan cobalah memfilter data sebelum menggabungkan tabel besar.
Konversi integer yang diskalakan: Ingat bahwa data koordinat disimpan sebagai integer yang diskalakan. Konversikan hanya di SELECT akhir, bukan di klausa WHERE.
Batasi set hasil: Selalu gunakan LIMIT untuk kueri eksplorasi agar tidak mengembalikan jutaan baris.
SELECT * FROM raw_telematics_data.tracking_data_core
WHERE device_time > (CURRENT_DATE - INTERVAL '1 day')
LIMIT 1000;Manfaatkan hubungan hierarkis: Strukturkan kueri kompleks mengikuti hierarki entitas (dealer → client → user/device → object) untuk join dan penyaringan yang lebih efisien.
Kelola koneksi dengan benar: Tutup koneksi basis data saat tidak digunakan, terutama di alat BI atau skrip terjadwal, untuk menghindari penguncian sumber daya atau masalah timeout.
Langkah selanjutnya
Contoh-contoh ini memberikan titik awal untuk bekerja dengan data Anda. Saat Anda menjadi lebih familiar dengan skema, Anda dapat mengembangkan kueri yang lebih kompleks untuk memenuhi kebutuhan bisnis spesifik Anda.
Last updated
Was this helpful?