Подход к собственным массивам
Вы можете создавать свои собственные хиты и массивы продуктов, используя подзапросы к оригиналу и передавая их результаты обратно в функции массива.В этих подзапросах вы можете отфильтровать свои хиты и продукты:
#standardsql
SELECT
date,
hits
--SUM(totals.visits) AS Sessions,
--SUM(totals.transactions) AS Transactions
FROM
(
SELECT
date, totals,
-- create own hits array
ARRAY(
SELECT AS STRUCT
hitnumber,
page,
-- create own product array
ARRAY(
SELECT AS STRUCT productSku, productQuantity
FROM h.product AS p
WHERE (SELECT COUNT(1)=0 FROM p.customDimensions WHERE index=6 AND value like '63%')
) AS product
FROM t.hits as h
WHERE
NOT REGEXP_CONTAINS(page.pagePath,r'gebak|cake')
AND
(SELECT COUNT(1)=0 FROM h.customDimensions WHERE index=23 AND value like '%editor%')
) AS hits
FROM
`bigquery-public-data.google_analytics_sample.ga_sessions_20161104` t
)
--GROUP BY 1
LIMIT 100
Я оставил этот пример в разгруппированном состоянии, но вы можете легко настроить его, закомментировав hits
и сгруппировав соответственно ...
Подход сегментации
Я думаю, что вам просто нужен правильный подзапрос в вашем WHERE
утверждении:
#standardsql
SELECT
date,
SUM(totals.visits) AS Sessions,
SUM(totals.transactions) AS Transactions
FROM
`bigquery-public-data.google_analytics_sample.ga_sessions_*` t
WHERE
(SELECT COUNT(1)=0 FROM t.hits h
WHERE
(SELECT count(1)>0 FROM h.customDimensions WHERE index=23 AND value like '%editor%')
OR
(SELECT count(1)>0 from h.product p, p.customdimensions cd WHERE index=6 AND value like '63%')
OR
REGEXP_CONTAINS(page.pagePath,r'gebak|cake')
)
GROUP BY date
Поскольку все ваши группы находятся на уровне сеанса, вы нене нужно никакого выравнивания (соответственно, перекрестных соединений с массивами) на главном столе, что является дорогостоящим.В самом внешнем WHERE
вы вводите массив hits
с подзапросом - это как для каждого в строках.Здесь вы уже можете сосчитать случаи REGEXP_CONTAINS(page.pagePath,r'gebak|cake')
.
. В остальных случаях вы снова пишете подзапрос для ввода соответствующего массива - в первом случае customDimensions
в пределах hits
.Это как вложенный for-each внутри другого (подзапрос в подзапросе).
Во втором случае я просто сглаживаю - но только внутри подзапроса: product
с его customDimensions
,Так что это одноразовое вложение для каждого, потому что я был ленивым и перекрестным.Я мог бы написать другой подзапрос вместо перекрестного соединения, так что в основном для каждого вложенного с тройным вложением (подзапрос в подзапросе в подзапросе).
Поскольку я считаю случаи, которые хочу исключитьМое внешнее состояние - COUNT(1)=0
.
. Я мог проверить его только с помощью данных выборки ... так что это не проверено.Но я думаю, вы поняли.