def METHOD_NAME(database: str, query: str,) -> List[dict]:
    """Runs athena query.
    Args:
        database: Name of Athena database.
        query: Query to run.
    Returns: List of {<field_name>: <value>, ...} records.
    """
    client = boto3.client("athena")
    start_query_response = client.start_query_execution(
        QueryExecutionContext={"Database": database},
        ResultConfiguration={"OutputLocation": ATHENA_BUCKET},
        QueryString=query,
    )
    query_id = start_query_response["QueryExecutionId"]
    response = client.get_query_execution(QueryExecutionId=query_id)["QueryExecution"]
    completed_states = ["FAILED", "CANCELLED", "SUCCEEDED"]
    while response["Status"]["State"] not in completed_states:
        _logger.info("Waiting for query to complete ...")
        time.sleep(1)
        response = client.get_query_execution(QueryExecutionId=query_id)["QueryExecution"]
    if response["Status"]["State"] != "SUCCEEDED":
        raise CloudWatchQueryError()
    results_paginator = client.get_paginator("get_query_results")
    results_iter = results_paginator.paginate(
        QueryExecutionId=query_id, PaginationConfig={"PageSize": 1000}
    )
    results = []
    header = None
    for results_page in results_iter:
        # Parse query results
        rows = results_page["ResultSet"]["Rows"]
        rows = [row["Data"] for row in rows]
        # All items in each row has a dictionary of {"VarCharValue": <value>}.
        rows = [[item["VarCharValue"] for item in row] for row in rows]
        # For the first page, set header
        if not header:
            header = rows[0]
            data = rows[1:]
        else:
            # For pages without header, use all rows
            data = rows
        for row in data:
            record = {}
            for i, value in enumerate(header):
                record[value] = row[i]
            results.append(record)
    return results