========================= PI5HOME WEATHER SCHEMA REPORT Luotu: 2026.09.20 07:00:00 Europe/Helsinki Hakemisto: /home/jarkko/pi5home Ilmakehän, sään ja ulkomaailman havainnot ja mittaustiedot sekä Auringon ja kuun ilmiöt. Lähteinä FMI, METAR ja Turun yliopiston (UTU) säämittaukset. ######################### TIETOKANTA: W | weather.sqlite3 ######################### Tauluja: 28 RAKENNE: weather.sqlite3 +--- weather_aviationweather_raw | +--- weather_aviationweather_measurements | +--- weather_metar_clouds | +--- weather_metar_stations | +--- weather_metar_weather | +--- weather_description | +--- weather_metar_unknown | +--- weather_fmi_raw | +--- weather_fmi_data | +--- weather_fmi_measurements | +--- weather_fmi_station_types | +--- weather_fmi_stations | +--- weather_fmi_stations_raw | +--- weather_fmi_stations_raw | +--- weather_utu_raw | +--- weather_utu_hourly | +--- weather_utu_measurements +--- fmi_magn_data +--- fmi_magn_devices +--- fmi_radiation_baseline +--- fmi_radiation_weekly +--- fmi_solar_data +--- fmi_weather_data +--- moon_events +--- sun_daily +--- sun_location +--- traffic_data +--- traffic_sensor +--- traffic_station ========================= TAULU: weather.sqlite3 -> moon_events ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | id INTEGER 0 1 1 | event_time TEXT 1 0 2 | event TEXT 1 0 3 | visible INTEGER 1 0 4 | magnitude REAL 0 0 INDEKSIT: sqlite_autoindex_moon_events_1 unique=1 -> event_time -> event ========================= TAULU: weather.sqlite3 -> sun_daily ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | date TEXT 0 1 1 | sunrise TEXT 0 0 2 | sunset TEXT 0 0 3 | dawn TEXT 0 0 4 | dusk TEXT 0 0 5 | solar_noon TEXT 0 0 6 | day_length INTEGER 0 0 7 | dawn_nautical TEXT 0 0 8 | dusk_nautical TEXT 0 0 9 | dawn_astronomical TEXT 0 0 10 | dusk_astronomical TEXT 0 0 INDEKSIT: sqlite_autoindex_sun_daily_1 unique=1 -> date ========================= TAULU: weather.sqlite3 -> sun_location ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | id INTEGER 0 1 1 | latitude REAL 1 0 2 | longitude REAL 1 0 3 | elevation_m REAL 1 0 4 | timezone TEXT 1 0 5 | address TEXT 0 0 ========================= TAULU: weather.sqlite3 -> fmi_magn_data ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | id INTEGER 0 1 1 | device_id INTEGER 1 0 2 | event_time TEXT 1 0 3 | x REAL 0 0 4 | y REAL 0 0 5 | z REAL 0 0 INDEKSIT: idx_fmi_magn_data_device_time unique=0 -> device_id -> event_time idx_fmi_magn_data_time unique=0 -> event_time sqlite_autoindex_fmi_magn_data_1 unique=1 -> device_id -> event_time FOREIGN KEYT: device_id -> fmi_magn_devices.id ========================= TAULU: weather.sqlite3 -> fmi_magn_devices ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | id INTEGER 0 1 1 | magnetometer_id TEXT 0 0 2 | name TEXT 0 0 3 | municipality TEXT 0 0 4 | latitude REAL 1 0 5 | longitude REAL 1 0 6 | follow INTEGER 1 0 1 INDEKSIT: sqlite_autoindex_fmi_magn_devices_1 unique=1 -> latitude -> longitude ========================= TAULU: weather.sqlite3 -> fmi_radiation_baseline ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | id INTEGER 0 1 1 | fmisid INTEGER 1 0 2 | period_start TEXT 1 0 3 | period_end TEXT 1 0 4 | dose_avg REAL 0 0 5 | uncertainty_avg REAL 0 0 6 | dose_min REAL 0 0 7 | dose_max REAL 0 0 8 | sample_count INTEGER 1 0 9 | calculated_at TEXT 1 0 INDEKSIT: sqlite_autoindex_fmi_radiation_baseline_1 unique=1 -> fmisid -> period_start -> period_end ========================= TAULU: weather.sqlite3 -> fmi_radiation_weekly ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | id INTEGER 0 1 1 | fmisid INTEGER 1 0 2 | iso_year INTEGER 1 0 3 | iso_week INTEGER 1 0 4 | dose_avg REAL 0 0 5 | uncertainty_avg REAL 0 0 6 | dose_min REAL 0 0 7 | dose_max REAL 0 0 8 | sample_count INTEGER 1 0 INDEKSIT: sqlite_autoindex_fmi_radiation_weekly_1 unique=1 -> fmisid -> iso_year -> iso_week ========================= TAULU: weather.sqlite3 -> fmi_solar_data ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | measure_id INTEGER 0 1 1 | event_time TEXT 1 0 2 | diffuse_radiation REAL 0 0 3 | direct_radiation REAL 0 0 4 | global_radiation REAL 0 0 5 | longwave_in REAL 0 0 6 | longwave_out REAL 0 0 7 | radiation_balance REAL 0 0 8 | reflected_radiation REAL 0 0 9 | sunshine_duration REAL 0 0 10 | uv_index REAL 0 0 11 | fmisid INTEGER 1 0 INDEKSIT: sqlite_autoindex_fmi_solar_data_1 unique=1 -> event_time -> fmisid ========================= TAULU: weather.sqlite3 -> fmi_weather_data ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | measure_id INTEGER 0 1 1 | event_time TEXT 1 0 2 | temperature REAL 0 0 3 | wind_speed REAL 0 0 4 | wind_gust REAL 0 0 5 | wind_direction REAL 0 0 6 | humidity REAL 0 0 7 | dew_point REAL 0 0 8 | precipitation REAL 0 0 9 | precipitation_intensity REAL 0 0 10 | snow_depth REAL 0 0 11 | pressure REAL 0 0 12 | visibility REAL 0 0 13 | cloudiness REAL 0 0 14 | weather INTEGER 0 0 15 | fmisid INTEGER 1 0 INDEKSIT: sqlite_autoindex_fmi_weather_data_1 unique=1 -> event_time -> fmisid ========================= TAULU: weather.sqlite3 -> traffic_data ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | station_id INTEGER 1 1 1 | sensor_id INTEGER 1 2 2 | measured_at TEXT 1 3 3 | value REAL 0 0 4 | fetched_at TEXT 1 0 INDEKSIT: idx_traffic_data_sensor_time unique=0 -> sensor_id -> measured_at idx_traffic_data_station_time unique=0 -> station_id -> measured_at sqlite_autoindex_traffic_data_1 unique=1 -> station_id -> sensor_id -> measured_at ========================= TAULU: weather.sqlite3 -> traffic_sensor ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | sensor_id INTEGER 0 1 1 | name TEXT 0 0 2 | short_name TEXT 0 0 3 | unit TEXT 0 0 4 | description TEXT 0 0 5 | updated_at TEXT 1 0 ========================= TAULU: weather.sqlite3 -> traffic_station ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | station_id INTEGER 0 1 1 | name TEXT 1 0 2 | latitude REAL 1 0 3 | longitude REAL 1 0 4 | elevation REAL 0 0 5 | road TEXT 0 0 6 | distance_home_km REAL 1 0 7 | follow INTEGER 1 0 0 8 | date_start TEXT 1 0 9 | date_end TEXT 0 0 10 | collection_status TEXT 0 0 11 | state TEXT 0 0 12 | source_updated_at TEXT 0 0 13 | fetched_at TEXT 1 0 INDEKSIT: idx_traffic_station_distance unique=0 -> distance_home_km idx_traffic_station_road unique=0 -> road idx_traffic_station_follow unique=0 -> follow ========================= TAULU: weather.sqlite3 -> weather_aviationweather_measurements ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | measure_id INTEGER 0 1 1 | station TEXT 1 0 2 | event_time TEXT 1 0 3 | auto INTEGER 1 0 0 4 | cavok INTEGER 1 0 0 5 | wind_direction REAL 0 0 6 | wind_speed REAL 0 0 7 | wind_gust REAL 0 0 8 | wind_direction_min REAL 0 0 9 | wind_direction_max REAL 0 0 10 | visibility REAL 0 0 11 | weather TEXT 0 0 12 | temperature REAL 0 0 13 | dew_point REAL 0 0 14 | pressure REAL 0 0 15 | cloud_status TEXT 0 0 16 | trend TEXT 0 0 17 | trend_data TEXT 0 0 18 | source_raw_id INTEGER 1 0 INDEKSIT: idx_weather_aviationweather_measurements_raw unique=0 -> source_raw_id idx_weather_aviationweather_measurements_event unique=0 -> event_time idx_weather_aviationweather_measurements_station unique=0 -> station FOREIGN KEYT: source_raw_id -> weather_aviationweather_raw.raw_id ========================= TAULU: weather.sqlite3 -> weather_aviationweather_raw ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | raw_id INTEGER 0 1 1 | received_at TEXT 1 0 2 | station TEXT 1 0 3 | raw_data TEXT 1 0 4 | parsed INTEGER 1 0 0 5 | parse_error TEXT 0 0 INDEKSIT: idx_weather_aviationweather_raw_unique unique=1 -> station -> raw_data idx_aviationweather_raw_received unique=0 -> received_at idx_aviationweather_raw_station unique=0 -> station ========================= TAULU: weather.sqlite3 -> weather_description ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | id INTEGER 0 1 1 | description_fi TEXT 1 0 2 | description_en TEXT 1 0 3 | wawa_code INTEGER 0 0 4 | metar_code TEXT 0 0 5 | nws_code TEXT 0 0 ========================= TAULU: weather.sqlite3 -> weather_fmi_data ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | measure_id INTEGER 0 1 1 | event_time TEXT 1 0 2 | temperature REAL 0 0 3 | wind_speed REAL 0 0 4 | wind_gust REAL 0 0 5 | wind_direction REAL 0 0 6 | humidity REAL 0 0 7 | dew_point REAL 0 0 8 | precipitation REAL 0 0 9 | precipitation_intensity REAL 0 0 10 | snow_depth REAL 0 0 11 | pressure REAL 0 0 12 | visibility REAL 0 0 13 | cloudiness REAL 0 0 14 | weather INTEGER 0 0 15 | fmisid INTEGER 1 0 INDEKSIT: sqlite_autoindex_weather_fmi_data_1 unique=1 -> event_time -> fmisid ========================= TAULU: weather.sqlite3 -> weather_fmi_measurements ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | measure_id INTEGER 0 1 1 | event_time TEXT 1 0 2 | temperature REAL 0 0 3 | wind_speed REAL 0 0 4 | wind_gust REAL 0 0 5 | wind_direction REAL 0 0 6 | humidity REAL 0 0 7 | dew_point REAL 0 0 8 | precipitation REAL 0 0 9 | precipitation_intensity REAL 0 0 10 | snow_depth REAL 0 0 11 | pressure REAL 0 0 12 | visibility REAL 0 0 13 | cloudiness REAL 0 0 14 | weather REAL 0 0 15 | source_raw_id INTEGER 0 0 16 | fmisid INTEGER 0 0 INDEKSIT: sqlite_autoindex_weather_fmi_measurements_1 unique=1 -> event_time -> fmisid ========================= TAULU: weather.sqlite3 -> weather_fmi_raw ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | raw_id INTEGER 0 1 1 | received_at TEXT 1 0 2 | raw_data TEXT 1 0 3 | parsed INTEGER 1 0 0 4 | parse_error TEXT 0 0 5 | fmisid INTEGER 0 0 ========================= TAULU: weather.sqlite3 -> weather_fmi_station_types ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | fmisid INTEGER 1 1 1 | network_id INTEGER 1 2 2 | station_type TEXT 1 0 INDEKSIT: sqlite_autoindex_weather_fmi_station_types_1 unique=1 -> fmisid -> network_id FOREIGN KEYT: fmisid -> weather_fmi_stations.fmisid ========================= TAULU: weather.sqlite3 -> weather_fmi_stations ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | id INTEGER 0 1 1 | fmisid INTEGER 1 0 2 | name TEXT 1 0 3 | country TEXT 0 0 'FI' 4 | latitude REAL 0 0 5 | longitude REAL 0 0 6 | address TEXT 0 0 7 | follow INTEGER 1 0 0 8 | priority INTEGER 0 0 9 | start_date TEXT 0 0 10 | end_date TEXT 0 0 11 | region TEXT 0 0 12 | elevation REAL 0 0 13 | station_type TEXT 0 0 INDEKSIT: idx_weather_fmi_stations_priority unique=0 -> priority -> fmisid idx_weather_fmi_stations_follow unique=0 -> follow sqlite_autoindex_weather_fmi_stations_1 unique=1 -> fmisid ========================= TAULU: weather.sqlite3 -> weather_fmi_stations_raw ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | raw_id INTEGER 0 1 1 | received_at TEXT 1 0 2 | network_id INTEGER 1 0 3 | raw_data TEXT 1 0 4 | parsed INTEGER 1 0 0 5 | parse_error TEXT 0 0 ========================= TAULU: weather.sqlite3 -> weather_metar_clouds ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | cloud_id INTEGER 0 1 1 | measure_id INTEGER 1 0 2 | layer INTEGER 1 0 3 | amount TEXT 1 0 4 | base_m INTEGER 0 0 5 | cloud_type TEXT 0 0 INDEKSIT: idx_weather_metar_clouds_measure unique=0 -> measure_id FOREIGN KEYT: measure_id -> weather_aviationweather_measurements.measure_id ========================= TAULU: weather.sqlite3 -> weather_metar_stations ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | id INTEGER 0 1 1 | station TEXT 1 0 2 | name TEXT 0 0 3 | country TEXT 0 0 4 | follow INTEGER 1 0 0 5 | start_date TEXT 0 0 6 | end_date TEXT 0 0 INDEKSIT: sqlite_autoindex_weather_metar_stations_1 unique=1 -> station ========================= TAULU: weather.sqlite3 -> weather_metar_unknown ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | unknown_id INTEGER 0 1 1 | raw_id INTEGER 1 0 2 | token TEXT 1 0 INDEKSIT: idx_weather_metar_unknown_raw unique=0 -> raw_id ========================= TAULU: weather.sqlite3 -> weather_metar_weather ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | id INTEGER 0 1 1 | measure_id INTEGER 1 0 2 | seq INTEGER 1 0 3 | metar_code TEXT 1 0 FOREIGN KEYT: measure_id -> weather_aviationweather_measurements.measure_id ========================= TAULU: weather.sqlite3 -> weather_utu_hourly ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | observed_at TEXT 0 1 1 | temperature_c REAL 0 0 2 | humidity_pct REAL 0 0 3 | pressure_hpa REAL 0 0 4 | wind_speed_ms REAL 0 0 5 | rain_1h_mm REAL 0 0 6 | temperature_quality_level INTEGER 0 0 7 | temperature_quality_value REAL 0 0 8 | humidity_quality_level INTEGER 0 0 9 | humidity_quality_value REAL 0 0 10 | pressure_quality_level INTEGER 0 0 11 | pressure_quality_value REAL 0 0 12 | wind_quality_level INTEGER 0 0 13 | wind_quality_value REAL 0 0 14 | rain_quality_level INTEGER 0 0 15 | rain_quality_value REAL 0 0 16 | longitude REAL 0 0 17 | latitude REAL 0 0 18 | timestamp_basis TEXT 1 0 'UTU API obs 19 | source TEXT 1 0 'weather.utu 20 | imported_at TEXT 1 0 21 | updated_at TEXT 1 0 INDEKSIT: idx_weather_utu_hourly_observed unique=0 -> observed_at sqlite_autoindex_weather_utu_hourly_1 unique=1 -> observed_at ========================= TAULU: weather.sqlite3 -> weather_utu_measurements ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | measure_id INTEGER 0 1 1 | observed_at TEXT 1 0 2 | received_at TEXT 1 0 3 | temperature REAL 0 0 4 | temperature_min_24h REAL 0 0 5 | temperature_max_24h REAL 0 0 6 | temperature_avg_24h REAL 0 0 7 | dew_point REAL 0 0 8 | wind_speed REAL 0 0 9 | wind_direction REAL 0 0 10 | rain_rate REAL 0 0 11 | rain_24h REAL 0 0 12 | humidity REAL 0 0 13 | pressure REAL 0 0 14 | pressure_trend_3h REAL 0 0 15 | raw_id INTEGER 0 0 INDEKSIT: idx_weather_utu_measurements_raw_id unique=0 -> raw_id idx_utu_measurements_observed unique=0 -> observed_at sqlite_autoindex_weather_utu_measurements_1 unique=1 -> observed_at ========================= TAULU: weather.sqlite3 -> weather_utu_raw ========================= SARAKE-MÄÄRITTELY: cid | name type nn pk def 0 | raw_id INTEGER 0 1 1 | received_at TEXT 1 0 2 | raw_data TEXT 1 0 3 | parse_status TEXT 0 0 4 | parse_error TEXT 0 0 5 | parser_status INTEGER 1 0 0 INDEKSIT: idx_utu_raw_received unique=0 -> received_at ######################### FORMAATTI- JA AIKATIEDON TARKISTUKSET ######################### W | weather.sqlite3 TAULU: moon_events ------------------------- -- Kenttä: event_time | tyyppi: TEXT -- Esimerkkidata: '2026-08-20 05:46:20' SELECT "event_time" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("event_time", 'localtime')) AS suomen_aika FROM "moon_events" WHERE "event_time" IS NOT NULL ORDER BY datetime("event_time", 'localtime') DESC LIMIT 1; TAULU: sun_daily ------------------------- -- Kenttä: date | tyyppi: TEXT -- Esimerkkidata: '2026-08-17' SELECT "date" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("date", 'localtime')) AS suomen_aika FROM "sun_daily" WHERE "date" IS NOT NULL ORDER BY datetime("date", 'localtime') DESC LIMIT 1; TAULU: sun_location ------------------------- -- Kenttä: timezone | tyyppi: TEXT -- Esimerkkidata: 'Europe/Helsinki' SELECT "timezone" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("timezone", 'localtime')) AS suomen_aika FROM "sun_location" WHERE "timezone" IS NOT NULL ORDER BY datetime("timezone", 'localtime') DESC LIMIT 1; TAULU: fmi_magn_data ------------------------- -- Kenttä: event_time | tyyppi: TEXT -- Esimerkkidata: '2026-09-03 14:16:00' SELECT "event_time" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("event_time", 'localtime')) AS suomen_aika FROM "fmi_magn_data" WHERE "event_time" IS NOT NULL ORDER BY datetime("event_time", 'localtime') DESC LIMIT 1; TAULU: fmi_solar_data ------------------------- -- Kenttä: event_time | tyyppi: TEXT -- Esimerkkidata: '2026-09-03 09:30:00' SELECT "event_time" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("event_time", 'localtime')) AS suomen_aika FROM "fmi_solar_data" WHERE "event_time" IS NOT NULL ORDER BY datetime("event_time", 'localtime') DESC LIMIT 1; TAULU: fmi_weather_data ------------------------- -- Kenttä: event_time | tyyppi: TEXT -- Esimerkkidata: '2026-08-17 08:10:00' SELECT "event_time" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("event_time", 'localtime')) AS suomen_aika FROM "fmi_weather_data" WHERE "event_time" IS NOT NULL ORDER BY datetime("event_time", 'localtime') DESC LIMIT 1; TAULU: traffic_sensor ------------------------- -- Kenttä: updated_at | tyyppi: TEXT -- Esimerkkidata: '2026-09-20T03:50:23Z' SELECT "updated_at" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("updated_at", 'localtime')) AS suomen_aika FROM "traffic_sensor" WHERE "updated_at" IS NOT NULL ORDER BY datetime("updated_at", 'localtime') DESC LIMIT 1; TAULU: traffic_station ------------------------- -- Kenttä: date_start | tyyppi: TEXT -- Esimerkkidata: '2026-09-07' SELECT "date_start" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("date_start", 'localtime')) AS suomen_aika FROM "traffic_station" WHERE "date_start" IS NOT NULL ORDER BY datetime("date_start", 'localtime') DESC LIMIT 1; -- Kenttä: date_end | tyyppi: TEXT -- Esimerkkidata: None SELECT "date_end" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("date_end", 'localtime')) AS suomen_aika FROM "traffic_station" WHERE "date_end" IS NOT NULL ORDER BY datetime("date_end", 'localtime') DESC LIMIT 1; -- Kenttä: source_updated_at | tyyppi: TEXT -- Esimerkkidata: '2022-09-27T07:20:32Z' SELECT "source_updated_at" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime( "source_updated_at", 'localtime')) AS suomen_aika FROM "traffic_station" WHERE "source_updated_at" IS NOT NULL ORDER BY datetime("source_updated_at", 'localtime') DESC LIMIT 1; TAULU: weather_aviationweather_measurements ------------------------- -- Kenttä: event_time | tyyppi: TEXT -- Esimerkkidata: '2026-08-17 18:00:00' SELECT "event_time" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("event_time", 'localtime')) AS suomen_aika FROM "weather_aviationweather_measurements" WHERE "event_time" IS NOT NULL ORDER BY datetime("event_time", 'localtime') DESC LIMIT 1; TAULU: weather_aviationweather_raw ------------------------- -- Kenttä: received_at | tyyppi: TEXT -- Esimerkkidata: '2026-08-17 18:29:18' SELECT "received_at" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("received_at" , 'localtime')) AS suomen_aika FROM "weather_aviationweather_raw" WHERE "received_at" IS NOT NULL ORDER BY datetime("received_at", 'localtime') DESC LIMIT 1; TAULU: weather_fmi_data ------------------------- -- Kenttä: event_time | tyyppi: TEXT -- Esimerkkidata: '2026-09-03 09:18:00' SELECT "event_time" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("event_time", 'localtime')) AS suomen_aika FROM "weather_fmi_data" WHERE "event_time" IS NOT NULL ORDER BY datetime("event_time", 'localtime') DESC LIMIT 1; TAULU: weather_fmi_measurements ------------------------- -- Kenttä: event_time | tyyppi: TEXT -- Esimerkkidata: '2026.08.17 08:10' SELECT "event_time" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("event_time", 'localtime')) AS suomen_aika FROM "weather_fmi_measurements" WHERE "event_time" IS NOT NULL ORDER BY datetime("event_time", 'localtime') DESC LIMIT 1; TAULU: weather_fmi_raw ------------------------- -- Kenttä: received_at | tyyppi: TEXT -- Esimerkkidata: None SELECT "received_at" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("received_at" , 'localtime')) AS suomen_aika FROM "weather_fmi_raw" WHERE "received_at" IS NOT NULL ORDER BY datetime("received_at", 'localtime') DESC LIMIT 1; TAULU: weather_fmi_stations ------------------------- -- Kenttä: start_date | tyyppi: TEXT -- Esimerkkidata: '2014-06-19T00:00:00Z' SELECT "start_date" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("start_date", 'localtime')) AS suomen_aika FROM "weather_fmi_stations" WHERE "start_date" IS NOT NULL ORDER BY datetime("start_date", 'localtime') DESC LIMIT 1; -- Kenttä: end_date | tyyppi: TEXT -- Esimerkkidata: None SELECT "end_date" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("end_date", 'localtime')) AS suomen_aika FROM "weather_fmi_stations" WHERE "end_date" IS NOT NULL ORDER BY datetime("end_date", 'localtime') DESC LIMIT 1; TAULU: weather_fmi_stations_raw ------------------------- -- Kenttä: received_at | tyyppi: TEXT -- Esimerkkidata: '2026-08-18T18:20:59.082720+00:00' SELECT "received_at" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("received_at" , 'localtime')) AS suomen_aika FROM "weather_fmi_stations_raw" WHERE "received_at" IS NOT NULL ORDER BY datetime("received_at", 'localtime') DESC LIMIT 1; TAULU: weather_metar_stations ------------------------- -- Kenttä: start_date | tyyppi: TEXT -- Esimerkkidata: None SELECT "start_date" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("start_date", 'localtime')) AS suomen_aika FROM "weather_metar_stations" WHERE "start_date" IS NOT NULL ORDER BY datetime("start_date", 'localtime') DESC LIMIT 1; -- Kenttä: end_date | tyyppi: TEXT -- Esimerkkidata: None SELECT "end_date" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("end_date", 'localtime')) AS suomen_aika FROM "weather_metar_stations" WHERE "end_date" IS NOT NULL ORDER BY datetime("end_date", 'localtime') DESC LIMIT 1; TAULU: weather_utu_hourly ------------------------- -- Kenttä: timestamp_basis | tyyppi: TEXT -- Esimerkkidata: 'UTU API observed, unmodified' SELECT "timestamp_basis" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime( "timestamp_basis", 'localtime')) AS suomen_aika FROM "weather_utu_hourly" WHERE "timestamp_basis" IS NOT NULL ORDER BY datetime("timestamp_basis", 'localtime') DESC LIMIT 1; -- Kenttä: updated_at | tyyppi: TEXT -- Esimerkkidata: '2026-09-06T23:46:18Z' SELECT "updated_at" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("updated_at", 'localtime')) AS suomen_aika FROM "weather_utu_hourly" WHERE "updated_at" IS NOT NULL ORDER BY datetime("updated_at", 'localtime') DESC LIMIT 1; TAULU: weather_utu_measurements ------------------------- -- Kenttä: received_at | tyyppi: TEXT -- Esimerkkidata: '2026-08-17 01:46:15' SELECT "received_at" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("received_at" , 'localtime')) AS suomen_aika FROM "weather_utu_measurements" WHERE "received_at" IS NOT NULL ORDER BY datetime("received_at", 'localtime') DESC LIMIT 1; TAULU: weather_utu_raw ------------------------- -- Kenttä: received_at | tyyppi: TEXT -- Esimerkkidata: '2026-08-17 01:09:08' SELECT "received_at" AS alkuperainen_timestamp, strftime('%Y.%m.%d %H:%M', datetime("received_at" , 'localtime')) AS suomen_aika FROM "weather_utu_raw" WHERE "received_at" IS NOT NULL ORDER BY datetime("received_at", 'localtime') DESC LIMIT 1;