# BOM Weather Data

## Overview

This dataset is built from Australian Bureau of Meteorology's (BOM) automated weather station historical datasets and current observations. Omnata combines, cleans and normalizes these datasets for consumption via Snowflake.

The historical data looks backwards from 1st of August 2025 to the beginning of BOM records. However, stations and available measures have changed over time, so some columns may return null where those measurements or stations are not available.

## Dataset Schema

### Core Observation Fields

| Field                  | Type      | Description                               | Units           |
| ---------------------- | --------- | ----------------------------------------- | --------------- |
| `station_id`           | String    | Unique BOM station identifier             | -               |
| `station_name`         | String    | Human-readable station name               | -               |
| `observation_time`     | Timestamp | Date and time of observation (local time) | ISO 8601        |
| `observation_time_utc` | Timestamp | Date and time of observation (UTC)        | ISO 8601        |
| `latitude`             | Float     | Station latitude                          | Decimal degrees |
| `longitude`            | Float     | Station longitude                         | Decimal degrees |
| `elevation`            | Integer   | Station elevation above sea level         | Meters          |

### Weather Measurements

| Field                    | Type    | Description                       | Units            |
| ------------------------ | ------- | --------------------------------- | ---------------- |
| `air_temperature`        | Float   | Air temperature                   | °C               |
| `apparent_temperature`   | Float   | Apparent temperature (feels like) | °C               |
| `dew_point`              | Float   | Dew point temperature             | °C               |
| `relative_humidity`      | Integer | Relative humidity                 | %                |
| `wind_direction`         | String  | Wind direction (compass point)    | Cardinal/Ordinal |
| `wind_direction_degrees` | Integer | Wind direction                    | Degrees (0-360)  |
| `wind_speed_kmh`         | Float   | Wind speed                        | km/h             |
| `wind_gust_kmh`          | Float   | Wind gust speed                   | km/h             |
| `pressure_msl`           | Float   | Mean sea level pressure           | hPa              |
| `pressure_qnh`           | Float   | QNH pressure                      | hPa              |
| `rainfall_since_9am`     | Float   | Rainfall since 9am local time     | mm               |
| `visibility`             | Integer | Visibility                        | km               |
| `cloud_cover`            | String  | Cloud cover description           | Text             |
| `weather_description`    | String  | Current weather conditions        | Text             |

### Data Quality Indicators

| Field               | Type      | Description                         |
| ------------------- | --------- | ----------------------------------- |
| `data_quality`      | String    | Quality assessment (Good/Fair/Poor) |
| `automatic_station` | Boolean   | Whether station is automated (AWS)  |
| `last_updated`      | Timestamp | When record was last updated        |

### Data Availability

* **Spatial Coverage**: \~700+ weather stations across Australia
* **Update Frequency**: Daily
* **Granularity**: 30mins

### Usage Examples

#### Basic Query

```sql
-- Get latest observations for Sydney area stations
SELECT station_name, observation_time, air_temperature, 
       wind_speed_kmh, rainfall_since_9am
FROM OBSERVATIONS
WHERE station_name LIKE '%SYDNEY%'
  AND observation_time >= CURRENT_TIMESTAMP - INTERVAL '24 HOURS'
ORDER BY observation_time DESC;
```

#### Temperature Analysis

```sql
-- Find stations with extreme temperatures in last 24 hours
SELECT station_name, state, 
       MAX(air_temperature) as max_temp,
       MIN(air_temperature) as min_temp,
       AVG(air_temperature) as avg_temp
FROM OBSERVATIONS 
WHERE observation_time >= CURRENT_TIMESTAMP - INTERVAL '24 HOURS'
  AND air_temperature IS NOT NULL
GROUP BY station_name, state
HAVING MAX(air_temperature) > 35 OR MIN(air_temperature) < 5
ORDER BY max_temp DESC;
```

### Data Quality Notes

1. **Missing Values**: Some observations may be NULL due to equipment issues or maintenance
2. **Manual Stations**: Update less frequently than automated stations
3. **Quality Flags**: Use `data_quality` field to filter for reliable observations
4. **Timezone**: All times are provided in both local and UTC formats

### Compliance and Attribution

This dataset is derived from the Australian Bureau of Meteorology's publicly available weather observations. Usage complies with BOM's data licensing terms. Original data remains the property of the Commonwealth of Australia, Bureau of Meteorology.
