Я пытаюсь создать квартальный отчет, в котором некоторые даты генерируются из поискового запроса. Ввод start_date = 20181001
и end date = 20191231
. Хотя я мог бы просто запросить весь диапазон, мне не нужно Q1/2/3
, поэтому я динамически генерирую даты in-between
.
Проблема возникает, когда я использую их в подзапросе с table_suffix
.
Динамически сгенерированные не работают; похоже, что он возвращает ноль и запрашивает всю таблицу, а не разделенную дату. Но когда я просто жестко кодирую значения в подзапросе, они работают нормально.
Если вы запрашиваете обе таблицы поиска даты, они выглядят одинаково Результаты как динамически созданной, так и жестко закодированной таблицы . Поэтому я понятия не имею, откуда эта ошибка.
CREATE TEMP FUNCTION start_end() AS ( [parse_date('%Y%m%d','{start_date}'), parse_date('%Y%m%d','{end_date}')] );
CREATE TEMP FUNCTION wildcard_format(date_object date) as (replace(cast(date_object as string),"-",""));
-- create a calendar table 1 column "day" and one row for each day in the desired timeframe
WITH
calendar AS (
SELECT
extract(quarter from day) quarter
,extract(year from day) year
,day
FROM
UNNEST(GENERATE_DATE_ARRAY( start_end()[OFFSET(0)], start_end()[OFFSET(1)], INTERVAL 1 DAY) ) AS day
),
dynamically_created as (
select
wildcard_format(min(day)) start_py
,wildcard_format(max(case when year = extract (year from parse_date('%Y%m%d','{start_date}')) then day else null end)) end_py
,wildcard_format(min(case when year = extract (year from parse_date('%Y%m%d','{end_date}')) then day else null end)) start_cy
,wildcard_format(max(day)) end_cy
from
calendar
where quarter = extract (quarter from parse_date('%Y%m%d','{end_date}'))
),
hard_coded as (
SELECT
'20181001' as start_py
,'20181231' as end_py
,'20191001' as start_cy
,'20191231' as end_cy
),
sesh_data as (
select
*
from
`projectid.datasetid.summary_*`
where
(SELECT _table_suffix between start_py AND end_py FROM dynamically_created) #not working
(SELECT _table_suffix between start_py AND end_py FROM hard_coded) #working
),
select * from sesh_data