Как передать серию параметров в TVF, чтобы получить серию таблиц в Big Query - PullRequest
0 голосов
/ 09 мая 2020

В Postgres У меня есть запрос, который использует функцию табличного значения

    SELECT 
 forecast.*
   FROM (
    SELECT
        generate_series(begin_date, end_date, '1 mon'::interval)::date zdate
) zdate
    LEFT JOIN LATERAL forecast_f(zdate.zdate)
    forecast(forecast_version , source, forecast_date, gl_date, customer, program, rev) ON true
where 1=1;

, а прогноз_f выглядит так:

A lot of boiler plate and then:
BEGIN
return query
select * from table where a lot of parameters are pulled in.

Я пытаюсь сделать то же самое в Bigquery и искали в Google несколько необычных концепций: Генерация серии с передачей параметров в udf с правильным типом данных (всегда приключение) tvf

, а документации по TVF не так много. Я подумал, что может не обрабатываю tvfs, и мне пришлось бы объединить все это в столбец и как-то разделить его, когда он выходит из функции. Когда я гуглил, другие жаловались на особые случаи, когда TVF не работают, но это наводит на мысль, что есть случаи, когда они действительно работают, например, мой. Итак, я сделал это:

create or replace temp function snap(t timestamp)
as
(select * from forecast_stuff.forecast_full_practice where zfrom <= t and (zto> t or zto is null));
select * from snap(current_time())

, что не сработало. Кроме того, этот причудливый номер:

create or replace temp function snap(t timestamp)
as
((select intersection from forecast_stuff.forecast_full_practice where zfrom <= t and (zto> t or zto is null)));
select * from snap(current_time())

тоже не работал. Что-то о том, если не существует, не поддерживается во временных функциях. Я помню, как делал что-то подобное в f1 или dremel несколько лет назад. Разве они не продвинули технологию вперед?

...