Я создаю аналитическую страницу, подкрепленную Python (Flask) и Redshift в качестве источника данных.Данные представлены в стартовой схеме, поэтому все, что я хочу сделать, - это базовая агрегация и фильтрация в заданный период времени (звучит не так, как в ракетостроении).Хотя я не могу найти какой-либо элегантный способ сделать это.
Допустим, у меня есть SQL-запрос, который хорошо предоставляет ежедневную статистику за текущий месяц.
with current_month as (
select date
from date_d
where month_name = 'November' AND year_actual = '2018'
order by date
),
filtered as (
select date ,fact.id, fact.created_id,
from fact
join date_d ON date_d.id = fact.created_id
where date_d.month_name = 'November' AND date_d.year_actual = '2018' AND fact.foo = 'bar'
),
total as (
SELECT COUNT(id),DATE(date)
from filtered GROUP BY 2),
SELECT current_month.date, COALESCE(total.count,0) as total
from current_month
LEFT JOIN total ON current_month.date = total.date
group by 1,
order by current_month.date
Могу ли я как-нибудьвыполнить этот запрос и загрузить результаты в некоторую предопределенную структуру данных?Я посмотрел на SQLAlchemy, потому что мне не хотелось выполнять необработанные SQL-запросы, но ORM здесь выглядит бесполезным.Похоже, единственный способ - выполнить сырой SQL и загрузить его в какую-то схему (используя зефир).Я посмотрел на эту статью , которая близка, но не настолько сложна.
Может быть, я что-то упустил?Люди должны делать такие вещи довольно часто.Или, может быть, мой подход неверен во всем?
PS Простая фильтрация отлично работает на моей схеме с Flask-Restless