Ваша ошибка в том, что вы используете таблицу ga_sessions в третьем условии. Следовательно, он сканирует всю таблицу, и условие существования возвращает True. Таким образом, это выполняется для всех строк.
Кроме того, вам не нужно присоединяться к unnest (совпадениям). Он создает несколько строк для каждого сеанса. Если вы обрабатываете это без объединения вложенных обращений, у вас будет одна строка для каждого сеанса. Так что их будет легче посчитать.
Я также обновил его, упростил запрос, поэтому я думаю, что это даст вам то, что вы хотите в своем наборе данных.
SELECT
COUNT(*) AS Sessions
FROM
`123456789.ga_sessions_20200201` as Data
WHERE totals.visits = 1
and exists (
SELECT
1
FROM
UNNEST(hits) as hit
WHERE
EXISTS (select 1 from unnest(hit.customDimensions) where index = 9 and value is not null) -- custom dimension A
OR EXISTS (select 1 from unnest(hit.customDimensions) where index = 10 and value in ('1', '5')) -- custom dimension B
OR (hit.type = 'PAGE' and hit.page.PagePath in ('pageA', 'pageB')) -- Page
)