Есть ли в SQL макросы?(особенно SQL со вкусом Presto) - PullRequest
0 голосов
/ 30 ноября 2018

Я относительно новичок в 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 предложений.

Вопросы

  1. Существуют ли макросы SQL в любых средах разработки?
  2. ЕстьМакросы SQL существуют в любых языках SQL?
  3. Макросы SQL существуют, в частности, в Presto SQL?
  4. Если макросы не существуют, то почему бы и нет?И чем мы заменим их для удобства сопровождения запросов?

1 Ответ

0 голосов
/ 30 ноября 2018

Вы описываете динамический sql.Механизм SQL не интерпретирует переменные как исполняемый код.Есть много статей о том, как построить строку запроса за строкой.

...