timeki's picture
talk_to_ipcc (#29)
711bc31 verified
from typing import TypedDict
from climateqa.engine.talk_to_data.config import DRIAS_DATASET_URL
class IndicatorPerYearAtLocationQueryParams(TypedDict, total=False):
"""Parameters for querying an indicator's values over time at a location.
This class defines the parameters needed to query climate indicator data
for a specific location over multiple years.
Attributes:
indicator_column (str): The column name for the climate indicator
latitude (str): The latitude coordinate of the location
longitude (str): The longitude coordinate of the location
model (str): The climate model to use (optional)
"""
indicator_column: str
latitude: str
longitude: str
model: str
def indicator_per_year_at_location_query(
table: str, params: IndicatorPerYearAtLocationQueryParams
) -> str:
"""SQL Query to get the evolution of an indicator per year at a certain location
Args:
table (str): sql table of the indicator
params (IndicatorPerYearAtLocationQueryParams) : dictionary with the required params for the query
Returns:
str: the sql query
"""
indicator_column = params.get("indicator_column")
latitude = params.get("latitude")
longitude = params.get("longitude")
if indicator_column is None or latitude is None or longitude is None: # If one parameter is missing, returns an empty query
return ""
table = f"'{DRIAS_DATASET_URL}/{table.lower()}.parquet'"
sql_query = f"SELECT year, {indicator_column}, model\nFROM {table}\nWHERE latitude = {latitude} \nAnd longitude = {longitude} \nOrder by Year"
return sql_query
class IndicatorForGivenYearQueryParams(TypedDict, total=False):
"""Parameters for querying an indicator's values across locations for a year.
This class defines the parameters needed to query climate indicator data
across different locations for a specific year.
Attributes:
indicator_column (str): The column name for the climate indicator
year (str): The year to query
model (str): The climate model to use (optional)
"""
indicator_column: str
year: str
model: str
def indicator_for_given_year_query(
table:str, params: IndicatorForGivenYearQueryParams
) -> str:
"""SQL Query to get the values of an indicator with their latitudes, longitudes and models for a given year
Args:
table (str): sql table of the indicator
params (IndicatorForGivenYearQueryParams): dictionarry with the required params for the query
Returns:
str: the sql query
"""
indicator_column = params.get("indicator_column")
year = params.get('year')
if year is None:
year = 2050
if year is None or indicator_column is None: # If one parameter is missing, returns an empty query
return ""
table = f"'{DRIAS_DATASET_URL}/{table.lower()}.parquet'"
sql_query = f"Select {indicator_column}, latitude, longitude, model\nFrom {table}\nWhere year = {year}"
return sql_query