Как автоматизировать выполнение sql скрипта(vertica)?
Есть задача сделать выгрузку данных из бд, сейчас в скрипте вручную указывается город и кол-во требуемых записей - обрезается limit'ом.
У меня соответственно имеется excel таблица A со списком городов и лимитами для каждого из них.
Как это дело можно автоматизировать? Т.е. грубо говоря, чтобы скрипт выполнился столько раз, сколько городов в таблице A и чтобы при каждом выполнении подставлялся очередной город и его лимиты в сам скрипт.
Первая мысль это закинуть список городов в csv, создать из него временную таблицу, добавить inner join к скрипту по городам из этой таблицы, таким образом получаем данные по всем нужным городам, но как быть с лимитами, как потом оставить лишь нужное кол-во записей... (делать это потом вручную в excel - не вариант)
Вроде dynamic sql подходит под задачу, но в vertica не поддерживается.
Залить csv это хорошая идея.
Эффект limit можно достичь аналитическими функциями, e.g.
select *
from
(
select ROW_NUMBER() OVER (PARTITION BY t.city) as limit_num,
t.city
t. ...
from
(
select city, ...
from my_table m join cities c on c.city = m.city
) as t
) tt
where tt.limit_num <= 1000;
TheRonCronix если я правильно понял пример, то тут одинаковый лимит для всех городов, в моем случае менять limit на такой вариант не имеет смысла т.к. для каждого города некий свой лимит, в этом и сложность)
Т.е. мне бы в csv помимо городов закинуть лимиты, а потом каким-то образом использовать их в скрипте.
select t.*
from
(
select ROW_NUMBER() OVER (PARTITION BY m.city) limit_num, m.*
from my_table m
) as t
join cities c
on c.city = t.city and t.limit_num <= c.num_rows_required;