# Ekspor data pelacakan

Saat perangkat pelacak beroperasi, data mereka dikirimkan dan disimpan di basis data platform Navixy, sehingga Anda dapat melihat perjalanan pada monitoring dan membuat laporan perjalanan. Namun, mungkin ada situasi di mana Anda perlu mengunggah seluruh informasi pelacakan yang tercatat sebagai titik geolokasi. Ini biasanya diperlukan untuk menganalisis data dalam situasi yang kontroversial. Dalam hal ini, Anda dapat meminta informasi tersebut langsung dari basis data.

{% hint style="info" %}
Metode ini memungkinkan Anda mendapatkan data dengan cara yang lebih rinci dan "teknis" daripada yang terlihat di monitoring. Namun penting untuk menyadari bahwa agar muncul di basis data, data tersebut harus benar-benar dikirimkan oleh perangkat pelacak, dan tidak akan mungkin memulihkan perjalanan yang sepenuhnya hilang di monitoring dengan cara ini.
{% endhint %}

Anda akan memerlukan **akses langsung ke basis data MySQL** untuk menarik data pelacakan, yang berarti klien Anda tidak memiliki hak untuk operasi ini, dan hanya teknisi dengan akses ke server yang memiliki otorisasi yang diperlukan.

Data pelacakan disimpan di ***tracking*** basis data. Tergantung pada kapan dan bagaimana instance platform Anda diterapkan, dua cara yang secara fundamental berbeda dalam mengatur struktur basis data mungkin ditemui.

* **Struktur bucket**. Dalam kasus ini data pelacakan dipartisi ke dalam beberapa bucket (16 secara default).
* **Struktur file-per-file**, di mana setiap tracker sesuai dengan tabel terpisah yang dinamai dengan IMEI-nya.

Jenis organisasi data yang Anda gunakan mudah diperiksa dengan membuka direktori penyimpanan file basis data - misalnya, pada Linux ini adalah `/var/lib/mysql/tracking` sebagai default. Di dalamnya, Anda akan menemukan baik file terpartisi bernama seperti `bucket_****.ibd`, atau banyak `ibd` dan `frm` file yang dinamai sesuai IMEI perangkat.

{% hint style="danger" %}
Tidak ada cara konvensional untuk mengubah basis data dari file-per-file ke buckets atau sebaliknya, karena ini akan melibatkan pembangunan ulang seluruh basis data. Setelah diterapkan, basis data tetap berada dalam struktur awalnya.
{% endhint %}

## Struktur bucket

Ini adalah tipe organisasi basis data kontemporer di mana untuk optimisasi kinerja data disimpan bukan dalam tabel individu untuk setiap tracker, melainkan dalam yang disebut bucket. Secara default ada 16 di antaranya, tracker ditempatkan ke dalamnya secara acak. Setiap tracker memiliki `storage_id`, menurut itu kita dapat menemukan bucket yang diperlukan.

Untuk meminta data, Anda memerlukan IMEI tracker (dalam contoh ini, kami menggunakan IMEI palsu 987654321012345), dan pengenal perangkat internal yang dinamai `source_id`.

Cari tahu `source_id` dan `storage_id` menggunakan kueri ini:

```
SELECT storage_id, source_id FROM google.sources WHERE source_imei='987654321012345'; 
```

Hasil `storage_id` dimulai dengan nomor bucket - dari 1 hingga 16. Misalnya, *storage\_id=**2**01000* berarti *bucket\_**2*** dan *storage\_id=**13**01000* berarti *bucket\_**13***.

Dalam kueri berikutnya kita memerlukan baik nomor bucket maupun source\_id. Dengan kueri ini kita meminta data pelacakan untuk periode yang dibutuhkan dan mengunggahnya ke file CSV.

Perlu diperhatikan:

* kami menggunakan `source_id` dan `bucket` nomor yang ditemukan dengan kueri sebelumnya.
* `get_time` adalah waktu pencatatan data oleh perangkat, ditentukan dalam UTC+0, terlepas dari zona waktu akun pengguna.
* MySQL harus memiliki izin untuk menulis ke folder yang ditentukan dalam kueri.

Kueri SQL itu sendiri adalah sebagai berikut:

```
SELECT 'Id','TrackID','Server time','Tracker time','Longitude','Latitude','Speed','Altitude','Satellites','Status','Heading','Event ID','Duration','Mileage','Inputs','Outputs','Address'   
UNION ALL   
SELECT id, track_id, actual_time, get_time, lng, lat, speed, alt, satellites, status, heading, event_id, duration, mileage, input_status, output_status, address  
FROM tracking.bucket_2 where source_id=12345 and get_time between '2024-07-20 20:11:00' and '2024-07-20 20:13:00'   
INTO OUTFILE "/var/lib/mysql-files/987654321012345.csv"
FIELDS TERMINATED BY ','   
ENCLOSED BY '"' LINES   
TERMINATED BY '\n';
```

Untuk Windows jalurnya seperti:

```
INTO OUTFILE "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/987654321012345.csv"
```

## Struktur file-per-file

Ini adalah cara yang lebih lama dalam mengatur struktur basis data, yang namun tetap relevan untuk banyak instance Navixy dengan sejarah bertahun-tahun.

Untuk meminta data dalam kasus ini, Anda hanya memerlukan IMEI tracker (dalam contoh ini, kami menggunakan IMEI palsu 987654321012345).

Perlu diperhatikan:

* `get_time` adalah waktu pencatatan data oleh perangkat, ditentukan dalam UTC+0, terlepas dari zona waktu akun pengguna.
* MySQL harus memiliki izin untuk menulis ke folder yang ditentukan dalam kueri.

Kueri SQL adalah sebagai berikut:

```
SELECT 'Id','TrackID','Server time','Tracker time','Longitude','Latitude','Speed','Altitude','Satellites','Status','Heading','Event ID','Duration','Mileage','Inputs','Outputs','Address'  
UNION ALL  
SELECT id, track_id, actual_time, get_time, point_y, point_x, speed, altitude, satellites, status, heading, event_id, duration, mileage, input_status, output_status, address 
FROM tracking.987654321012345 where get_time between '2024-07-20 20:11:00' and '2024-07-20 20:13:00'  
INTO OUTFILE "/var/lib/mysql-files/987654321012345.csv"  
FIELDS TERMINATED BY ','  
ENCLOSED BY '"' LINES  
TERMINATED BY '\n';
```

Untuk Windows jalurnya seperti:

```
INTO OUTFILE "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/987654321012345.csv"
```

## Output data

Kueri SQL di atas akan menghasilkan file CSV yang berisi semua titik pelacakan yang tercatat untuk perangkat.

File ini dapat diimpor ke Excel atau digunakan dalam pengembangan internal apa pun.
