Вы можете отправить запрос функции на систему отслеживания проблем , чтобы сделать эту работу.Это ограничение планирования / оптимизации запросов;для некоторого фона BigQuery преобразует вызов функции так, что логическое представление запроса выглядит следующим образом:
SELECT
t1.gameId
FROM `bigquery-public-data.baseball.games_post_wide` t1
left join `bigquery-public-data.baseball.games_post_wide` t2
on t1.gameId=t2.gameId
and (SELECT strpos(game1,game2) > 0 FROM (SELECT t1.gameId AS game1, t2.gameId AS game2))
Причина, по которой BigQuery преобразует вызов SQL UDF следующим образом, заключается в том, что ему нужно избегать вычисления входных данных больше, чемодин раз.Хотя это не проблема в данном конкретном случае, это имеет значение, если вы ссылаетесь на один из входных данных более одного раза в теле UDF, например, рассмотрите этот UDF:
CREATE TEMP FUNCTION Foo(x FLOAT64) AS (x - x);
SELECT Foo(RAND());
Если BigQuery должен был встроить выражениенепосредственно, вы получите в итоге:
SELECT RAND() - RAND();
Результат не будет нулевым, что является неожиданным, учитывая определение UDF.
В большинстве случаев преобразование логической оптимизации BigQuery преобразуетсяболее сложный подвыбор, как показано выше, в более простую форму, при условии, что это не меняет семантику запроса.Однако в этом случае этого не произошло, отсюда и ошибка.