Похоже, диапазон значений подстановочных знаков BigQuery с подвыбором возвращает ноль - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь создать квартальный отчет, в котором некоторые даты генерируются из поискового запроса. Ввод 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...