# Exportação de dados de rastreamento

À medida que os dispositivos de rastreamento operam, seus dados são enviados e armazenados no banco de dados da plataforma Navixy, para que você possa visualizar as viagens no monitoramento e gerar relatórios de viagem. No entanto, podem haver situações em que seja necessário exportar todas as informações de rastreamento registradas como pontos de geolocalização. Isso geralmente é necessário para analisar os dados em situações controversas. Nesse caso, você pode solicitar tais informações diretamente ao banco de dados.

{% hint style="info" %}
Este método permite obter dados de uma forma mais detalhada e “técnica” do que a exibida no monitoramento. Mas é importante perceber que, para aparecer no banco de dados, os dados devem ter sido efetivamente transmitidos por um dispositivo de rastreamento, e não será possível restaurar viagens que estiverem completamente ausentes no monitoramento dessa maneira.
{% endhint %}

Você precisará **acesso direto ao banco de dados MySQL** para extrair os dados de rastreamento, o que significa que seus clientes não têm direitos para essa operação, e apenas técnicos com acesso ao servidor possuem a autorização necessária.

Os dados de rastreamento são armazenados no ***tracking*** banco de dados. Dependendo de quando e como sua instância da plataforma foi implantada, são possíveis duas formas fundamentalmente diferentes de organizar a estrutura do banco de dados.

* **Estrutura por buckets**. Nesse caso, os dados de rastreamento são particionados em vários buckets (16 por padrão).
* **Estrutura arquivo-por-arquivo**, onde cada rastreador corresponde a uma tabela separada nomeada pelo seu IMEI.

O tipo de organização de dados que você está usando é fácil de verificar simplesmente abrindo o diretório de armazenamento dos arquivos do banco de dados — por exemplo, no Linux isso é `/var/lib/mysql/tracking` por padrão. Internamente, você encontrará ou arquivos particionados nomeados como `bucket_****.ibd`, ou vários `ibd` e `frm` arquivos nomeados pelo IMEI dos dispositivos.

{% hint style="danger" %}
Não existe uma maneira convencional de mudar o banco de dados de arquivo-por-arquivo para buckets ou vice‑versa, pois isso envolveria reconstruir todo o banco de dados. Uma vez implantado, o banco de dados permanece em sua estrutura inicial.
{% endhint %}

## Estrutura por buckets

Este é um tipo contemporâneo de organização de banco de dados onde, para otimização de desempenho, os dados não são armazenados em tabelas individuais para cada rastreador, mas nos chamados buckets. Por padrão existem 16 deles, e os rastreadores são colocados neles aleatoriamente. Cada rastreador tem seu próprio `storage_id`, de acordo com o qual podemos encontrar o bucket requerido.

Para solicitar os dados, você precisa do IMEI do rastreador (neste exemplo, usamos o IMEI falso 987654321012345) e do identificador interno do dispositivo chamado `source_id`.

Descubra `source_id` e `storage_id` usando esta consulta:

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

O resultado `storage_id` começa com o número do bucket — de 1 a 16. Por exemplo, *storage\_id=**2**01000* significa *bucket\_**2*** e *storage\_id=**13**01000* significa *bucket\_**13***.

Na próxima consulta precisamos tanto do número do bucket quanto do source\_id. Com esta consulta solicitamos os dados de rastreamento para o período requerido e os exportamos para um arquivo CSV.

Por favor, note:

* estamos usando o `source_id` e `bucket` número encontrado com a consulta anterior.
* `get_time` é o momento do registro dos dados pelo dispositivo, é especificado em UTC+0, independentemente do fuso horário da conta do usuário.
* O MySQL deve ter permissões para gravar na pasta especificada na consulta.

A própria consulta SQL é a seguinte:

```
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';
```

Para Windows o caminho é assim:

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

## Estrutura arquivo-por-arquivo

Esta é uma forma mais antiga de organizar a estrutura do banco de dados, que, no entanto, permanece relevante para muitas instâncias Navixy com vários anos de histórico.

Para solicitar os dados nesse caso, você precisa apenas do IMEI do rastreador (neste exemplo, usamos o IMEI falso 987654321012345).

Por favor, note:

* `get_time` é o momento do registro dos dados pelo dispositivo, é especificado em UTC+0, independentemente do fuso horário da conta do usuário.
* O MySQL deve ter permissões para gravar na pasta especificada na consulta.

A consulta SQL é a seguinte:

```
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';
```

Para Windows o caminho é assim:

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

## Exportação de dados

A consulta SQL acima irá gerar um arquivo CSV contendo todos os pontos de rastreamento registrados para o dispositivo.

Este arquivo pode ser importado para o Excel ou usado em qualquer desenvolvimento interno.
