Нужен эффективный способ запроса для вычисления суммы рабочих дней в снежинке (без использования функции) - PullRequest
0 голосов
/ 07 мая 2020

У меня есть Date Dimension, в котором есть столбец даты (с датами с 2010 по 2020 год) вместе с битовым столбцом Isworkday (который равен 0 или 1). Все праздники рассчитываются и предварительно заполняются в измерении.

Теперь у меня есть таблица с столбцами start_date и end_date, и мне нужно рассчитать sum_of_workdays в этих двух диапазонах дат. с использованием измерения даты.

(Я знаю, что могу создать функцию, которая принимает дату начала и дату окончания и возвращает сумму рабочих дней с использованием измерения даты, но снежинка действительно неэффективна с функциями, поэтому я хочу делать подзапросы или объединяется или что-то в этом роде)

Это функция, которую я сейчас использую:

create or replace function Sum_Of_WorkDays(start_date TIMESTAMP, end_date TIMESTAMP)
  returns int 
  as--to get sume of workdays in a given date range
  $$
    SELECT sum(ISWORKDAY) 
    FROM DATE_DIMENSION 
    WHERE "DATE" BETWEEN start_date AND end_date
  $$
  ;

И ниже показано, как я вызываю функцию из таблицы для вычисления суммы, но занимает много времени, если есть joins и cte, задействованные в запросе ::

select Sum_Of_WorkDays(start_date,end_date) from table

Любой эффективный запрос для него, кроме использования функции?

Заключение: завершено использование Left join для каждого вычисления суммы для его оптимизации. Снежинка, по-видимому, иногда не очень хороша в оптимизации запросов.

...