3. Data Model

Sq1090 data model consists of four entities

message

Raw Mode S and ADS-B messages captured by a receiver at specific time.

callsign

Aircraft callsign and category information decoded from a raw message.

position

Aircraft position, position error, and altitude information decoded from a raw message.

assembly

View of latest aircraft callsign and position information.

The entities are available in the following contexts

Entity

Stream

Database

Export

message

Y

Y

Y

callsign

Y

Y

Y

position

Y

Y

Y

assembly

Y

N

N

The definition of each context is

stream

Streams of records using RabbitMQ Streams broker. Each record is a list as defined in the next subsections. Stream data is available in a stream named sq1090.{entity}, for example sq1090.message.

Description of data model uses data types as defined in AMQP 1.0 standard.

database

Data is stored in PostgreSQL database tables using Timescale and PostGIS extensions. Table schema is described in the next subsections. Data is available in a table named {entity}, for example message.

Description of data model uses data types as defined by PostgreSQL RDBMS system.

export

Data is exported from PostgreSQL database tables into Parquet files. Parquet file schema is defined in the next subsections. Files are stored in {entity}/{YYYY-MM-DD}.parquet file, for example message/2025-03-21.parquet for aircraft raw messages for 2025-03-21 date.

Description of data model uses (logical) data types as defined by Parquet standard.

3.1. Raw Messages

Raw Mode S and ADS-B messages captured by a receiver at specific time.

The records are available in sq1090.message RabbitMQ stream.

Each raw message record is a tuple of two fields

time: double

Time of capturing a Mode S or an ADS-B raw message by a receiver.

Number of seconds since epoch.

data: binary

Mode S or ADS-B raw message in a binary format. It has 7 or 14 bytes.

3.2. Aircraft Callsign and Category

Aircraft callsign and category information decoded from a raw message.

The records are available in sq1090.callsign RabbitMQ stream.

Each callsign record is a list of 5 values

time: double

Time of receiving a raw message with aircraft callsign and category information.

Number of seconds since epoch.

icao: uint

ICAO address of an aircraft.

Use a function to convert to a hexadecimal string.

category: ushort

Category of aircraft as defined by ICAO.

type: ushort

Type code of raw message helping to identify category of an aircraft.

callsign: string

Aircraft callsign.

3.3. Aircraft Position

Aircraft position, position error, and altitude information decoded from a raw message.

The records are available in sq1090.position RabbitMQ stream.

Each position record is a list of 6 values

time: double

Time of receiving a raw message with aircraft location and altitude.

Number of seconds since epoch.

icao: uint

ICAO address of an aircraft.

Use a function to convert to a hexadecimal string.

hpl: double

Horizontal protection limit of the aircraft location (radius around reported aircraft position).

rcu: double

Containment radius on horizontal position error.

rcv: double

Containment radius on vertical position error.

location: list[double, double, double]

Position and altitude of an aircraft.

List of longitude, latitude, and altitude values.

3.4. Aircraft Data View

View of latest aircraft callsign and position information.

The records are available in sq1090.assembled RabbitMQ stream.

Each record is a list of values

time: double

Time of receiving a raw message with aircraft location and altitude.

Number of seconds since epoch.

icao: uint

ICAO address of an aircraft.

Use a function to convert to a hexadecimal string.

callsign: list[ushort, ushort, string]

List of category, type code, and callsign. See callsign entity definition.

location: list[double, double, double]

Tuple of longitude, latitude, and altitude. See position entity definition.

nuc: list[double, double, double]

Tuple of horizontal protection limit, containment radius on horizontal and vertical position error. See position entity definition.