Я относительно новичок в SQL, и я нахожу свои собственные макросы в SQL очень много.
Учтите:
SELECT
session_id,
user_id,
hitnumber,
IF(
eventinfo.eventcategory = 'search' AND eventinfo.eventaction = 'RunSearch',
TRUE, FALSE
) issued_search,
FROM google_analytics.hits
JOIN (
SELECT
session_id
FROM google_analytics.hits
WHERE eventinfo.eventcategory = 'search' AND eventinfo.eventaction = 'RunSearch'
GROUP BY session_id
) sessions_with_search ON hits.session_id = sessions_with_search.session_id
Обратите внимание, что eventinfo.eventcategory = 'search' AND eventinfo.eventaction = 'RunSearch'
повторяется в запросе дважды,Это предложение представляет строки, которые являются строками поиска.Вскоре я захочу расширить понятие строки поиска, включив в нее очень длинный список предложений OR, которые выглядят следующим образом.Я не хочу повторять это в 2 местах.Более того, я думаю, что это хороший источник ошибок для повторения одного и того же SQL в двух местах - я мог бы поменять одно место, а не другое, не задумываясь об этом.
I хочу понятиемакрос, но, насколько мне известно, они не существуют.Я хочу иметь возможность указать это выше запроса
SEARCH_HIT=`eventinfo.eventcategory = 'search' AND eventinfo.eventaction = 'RunSearch'`
И тогда запрос выше будет:
SELECT
session_id,
user_id,
hitnumber,
IF(@SEARCH_HIT, TRUE, FALSE) issued_search,
FROM google_analytics.hits
JOIN (
SELECT
session_id
FROM google_analytics.hits
WHERE @SEARCH_HIT
GROUP BY session_id
) sessions_with_search ON hits.session_id = sessions_with_search.session_id
Запрос уже чище, но представьте себенасколько понятнее и удобнее в обслуживании макрос делает запрос, если длина @SEARCH_HIT составляет 20 предложений.
Вопросы
- Существуют ли макросы SQL в любых средах разработки?
- ЕстьМакросы SQL существуют в любых языках SQL?
- Макросы SQL существуют, в частности, в Presto SQL?
- Если макросы не существуют, то почему бы и нет?И чем мы заменим их для удобства сопровождения запросов?