Как посчитать TOTAL<> в data loader-е

Автор muratov.ast, 14 декабря 2017, 01:38:21

« назад - далее »

muratov.ast

Доброго времени суток!
У меня есть следующая таблица:
year   month   value
2015   1   100
2015   2   600
2015   3   50
2016   2   300
2016   4   500
2016   8   800
2017   5   20
2017   7   40
2017   10   170
2017   12   600

и я хотел бы посчитать долю каждого месяца по отношению к году.
В чарте я могу это сделать следующим образом:
sum(total<month> value)/sum(total<year> value)

Подскажите, как можно сделать подобные вычисления в скрипте на уровне data loader-а?
Благодарю!

admin

Привет

t1:
LOAD * INLINE [
    year,   month,   value
    2015,   1,   100
    2015,   2,   600
    2015,   3,   50
    2016,   2,   300
    2016,   4,   500
    2016,   8,   800
    2017,  5,   20
    2017,  7,   40
    2017,   10,   170
    2017,   12,   600
];

left join (t1)
LOAD year, sum(value) as TotalYear
resident t1
Group by year;

left join (t1)
LOAD year, month, round(value/TotalYear*100,0.01) as X
resident t1;


Весь смысл в первой связи, посредством которой к каждой записи присоединяется итоговое значение по полю/полям связи.

muratov.ast

Спасибо большое!
Работает.
Но если в таблице имеется большое количество записей, скрипт не выполняется. Это уже скорее проблема железа.

LoryMax

Идет не хватка памяти? Тогда разбивайте данные на части (например, по годам, или по количеству строк).

или по какой причине не выполняется скрипт?

admin

Join - затратная функция, плюс с группировкой.
Следите за памятью при выполнении скрипта.
Можно попробовать использовать временные таблицы, когда каждый этап преобразования работает с загрузкой через load а не resident.
Надо ставить эксперименты и сравнивать.

Яндекс.Метрика