Я разработал вид в BigQuery, который ссылается на другие виды и лист Google.
Исходя из моего опыта, запрос листов Google в bigquery добавляет около 30 секунд времени, даже если это одна строка, хотя я не могу найти какую-либо документацию, объясняющую это.
Представление состоит из 4 CTE, которые все ссылаются на другие представления и лист Google, для выполнения SQL в представлении требуется около 48 секунд.
Когда я сохраняю SQL как представление и выполняю команду Select * from view, запрос не может быть завершен, он выполняется около 10 минут, а затем выдает ошибку
«Ошибка при выполнении. Повторная попытка может решить проблему.»
Я понимаю, что запросы к представлениям представлений являются беспорядочными, но я могу без проблем запросить представление в редакторе (это занимает около минуты), почему сохранение его как представления и выполнение запросов более проблематично?
Вот запрос:
#standardSQL
with spends as (SELECT y.course,cast(concat(cast(extract (YEAR from date)as string),"-",cast(extract(MONTH from date)as string),"-01")as date)as month,sum(spend) as spend fROM `project.dataset.view1` x
left join (select * from `project.dataset.table1`) as y
on x.account_id = y.id
group by 1,2),
forecasts as (select * from `project.dataset.google_sheet1`),
cds as (select course, sum(spend)/7 as current_daily_spend from (SELECT y.course,
case when date between DATE_SUB(current_date(), interval 7 DAY) and DATE_SUB(current_date(), interval 1 DAY) then sum(spend) else null end AS spend
fROM `project.dataset.view1` x
left join (select * from `project.dataset.table1`) as y
on x.account_id = y.id
group by date,y.course)
group by course),
yesterday as (select course, sum(spend) as yesterday_spend from (SELECT y.course,
case when date = DATE_SUB(current_date(), interval 1 DAY) then sum(spend) else null end AS spend
fROM `project.dataset.view1` x
left join (select * from `project.dataset.table1`) as y
on x.account_id = y.id
group by date,y.course)
group by course)
Select forecasts.*,spends.spend,cds.current_daily_spend,yesterday.yesterday_spend from forecasts
left join spends
on forecasts.month = spends.month and forecasts.course = spends.course
left join cds
on spends.course = cds.course
left join yesterday
on spends.course = yesterday.course