Сделать цикл в BigQuery - PullRequest
       6

Сделать цикл в BigQuery

0 голосов
/ 01 февраля 2019

У меня есть таблица, которая выглядит так в BigQuery:

Type    Start_Date  End_Date   Total_Spend
TV      20180101   20180131    10000
Radio   20180107   20180207    5000

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

Type     Date      Spend
TV       20180101   322,6
TV       20180102   322,6
TV       20180103   322,6
TV       20180104   322,6
TV       20180105   322,6
TV       20180106   322,6
TV       20180107   322,6
...
TV       20180131   322,6
Radio    20180107   161,3
Radio    20180108   161,3
Radio    20180109   161,3
...
Radio    20180207   161,3

По сути, цикл do, который я хочу создать, выглядит следующим образом:

do date=start_date to end_date;
    spend = total_spend/(end_date-start_date+1);

Но я не знаю, как это сделать в BigQuery.Есть идеи или предложения?

1 Ответ

0 голосов
/ 01 февраля 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT type, FORMAT_DATE('%Y%m%d', day) day, 
  ROUND(Total_Spend / ARRAY_LENGTH(GENERATE_DATE_ARRAY(PARSE_DATE('%Y%m%d', Start_Date), PARSE_DATE('%Y%m%d', End_Date))), 2) Spend
FROM `project.dataset.table`, UNNEST(GENERATE_DATE_ARRAY(PARSE_DATE('%Y%m%d', Start_Date), PARSE_DATE('%Y%m%d', End_Date))) day

Вы можете протестировать, поиграть с выше, используя примеры данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'TV' Type, '20180101' Start_Date, '20180131' End_Date, 10000 Total_Spend UNION ALL
  SELECT 'Radio', '20180107', '20180207', 5000 
)
SELECT type, FORMAT_DATE('%Y%m%d', day) day, 
  ROUND(Total_Spend / ARRAY_LENGTH(GENERATE_DATE_ARRAY(PARSE_DATE('%Y%m%d', Start_Date), PARSE_DATE('%Y%m%d', End_Date))), 2) Spend
FROM `project.dataset.table`, UNNEST(GENERATE_DATE_ARRAY(PARSE_DATE('%Y%m%d', Start_Date), PARSE_DATE('%Y%m%d', End_Date))) day
-- ORDER BY Type, day
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...