Files
pricing/electricity_price_predictor/sql/001_electricity_price_schema.sql
ddoebel 73641b7e5b Add electricity price ingestion and feature pipeline.
Introduce ENTSO-E data retrieval with layered caching, robust bidding-zone and missing-data handling, and persist model-ready features with detailed architecture/developer documentation.

Made-with: Cursor
2026-04-15 11:40:14 +02:00

56 lines
2.1 KiB
SQL

CREATE TABLE IF NOT EXISTS entsoe_api_cache (
cache_key TEXT PRIMARY KEY,
namespace TEXT NOT NULL,
function_name TEXT NOT NULL,
args_json JSONB NOT NULL,
payload BYTEA NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
expires_at TIMESTAMPTZ
);
CREATE INDEX IF NOT EXISTS idx_entsoe_api_cache_namespace_fn
ON entsoe_api_cache(namespace, function_name);
CREATE INDEX IF NOT EXISTS idx_entsoe_api_cache_expires_at
ON entsoe_api_cache(expires_at);
CREATE TABLE IF NOT EXISTS electricity_market_observations (
country_code TEXT NOT NULL,
delivery_start TIMESTAMPTZ NOT NULL,
day_ahead_price DOUBLE PRECISION,
load_forecast DOUBLE PRECISION,
wind_forecast DOUBLE PRECISION,
solar_forecast DOUBLE PRECISION,
ingested_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
PRIMARY KEY (country_code, delivery_start)
);
CREATE INDEX IF NOT EXISTS idx_electricity_market_observations_delivery
ON electricity_market_observations(delivery_start);
CREATE TABLE IF NOT EXISTS electricity_price_features (
country_code TEXT NOT NULL,
delivery_start TIMESTAMPTZ NOT NULL,
day_ahead_price DOUBLE PRECISION NOT NULL,
load_forecast DOUBLE PRECISION NOT NULL,
wind_forecast DOUBLE PRECISION NOT NULL,
solar_forecast DOUBLE PRECISION NOT NULL,
residual_load DOUBLE PRECISION NOT NULL,
lagged_price DOUBLE PRECISION[] NOT NULL,
lagged_residual_load DOUBLE PRECISION[] NOT NULL,
hour_of_day_sin DOUBLE PRECISION NOT NULL,
hour_of_day_cos DOUBLE PRECISION NOT NULL,
weekday_sin DOUBLE PRECISION NOT NULL,
weekday_cos DOUBLE PRECISION NOT NULL,
month_sin DOUBLE PRECISION NOT NULL,
month_cos DOUBLE PRECISION NOT NULL,
feature_version TEXT NOT NULL DEFAULT 'v1',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
PRIMARY KEY (country_code, delivery_start, feature_version),
CONSTRAINT chk_lagged_price_len CHECK (CARDINALITY(lagged_price) = 24),
CONSTRAINT chk_lagged_residual_load_len CHECK (CARDINALITY(lagged_residual_load) = 24)
);
CREATE INDEX IF NOT EXISTS idx_electricity_price_features_delivery
ON electricity_price_features(delivery_start);