Исключить значения с помощью регулярных выражений - BigQuery - PullRequest
0 голосов
/ 03 июля 2018

Что бы я использовал в стандартном SQL, если бы я хотел исключить совпадения регулярных выражений в поле из агрегируемого. Код работает; однако это подсчитывает значения, которые у меня есть в регулярном выражении, и я хочу вместо этого исключить . У меня есть этот код:

SELECT
    channelGrouping, 
    date,
    SUM(totals.timeOnSite) AS Session_Duration,
    SUM(totals.visits) AS Visits,
    AVG(totals.timeonSite/totals.visits) AS Avg_Time_per_Session,
    SUM(totals.bounces) AS Bounce,
    (SUM(totals.bounces)/SUM(totals.visits)) AS Bounce_rate
FROM
    `93868086.ga_sessions_*`
WHERE
    _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 365 DAY))
AND
    FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
GROUP BY 
    date,
    channelGrouping,
    geoNetwork.networkLocation 
HAVING
    REGEXP_CONTAINS(geoNetwork.networkLocation,
    r"^(ovh \(nwk\)|hostwinds llc.|bhost inc|prisma networks llc|psychz networks|buyvm services|private customer|secure dragon llc.|vmpanel|netaction telecom srl-d|hostigation|frontlayer technologies inc.|digital energy technologies limited|owned-networks|rica web services|netaction telecom srl-d|hurricane electric inc.|private customer - host.howpick.com|ssdvirt|sway broadband|detect network|gorillaservers inc.|micfo llc.| netaction telecom srl|egihosting|zenlayer inc|intercom online inc.|gs1 argentine|ovh hosting inc.|vps cheap inc.|limeip networks|blackhost ltd.|amazon.com inc.)$")
ORDER BY
    date ASC

1 Ответ

0 голосов
/ 03 июля 2018

Зависит от того, что вы действительно хотите (что не на 100% ясно из вопроса), вы должны либо просто добавить НЕ в свое утверждение HAVING

HAVING NOT REGEXP_CONTAINS ...   

или переместить исключающую логику до WHERE условия

SELECT
    channelGrouping, 
    date,
    SUM(totals.timeOnSite) AS Session_Duration,
    SUM(totals.visits) AS Visits,
    AVG(totals.timeonSite/totals.visits) AS Avg_Time_per_Session,
    SUM(totals.bounces) AS Bounce,
    (SUM(totals.bounces)/SUM(totals.visits)) AS Bounce_rate
FROM
    `93868086.ga_sessions_*`
WHERE
    _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 365 DAY))
AND
    FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
AND NOT
    REGEXP_CONTAINS(geoNetwork.networkLocation,
    r"^(ovh \(nwk\)|hostwinds llc.|bhost inc|prisma networks llc|psychz networks|buyvm services|private customer|secure dragon llc.|vmpanel|netaction telecom srl-d|hostigation|frontlayer technologies inc.|digital energy technologies limited|owned-networks|rica web services|netaction telecom srl-d|hurricane electric inc.|private customer - host.howpick.com|ssdvirt|sway broadband|detect network|gorillaservers inc.|micfo llc.| netaction telecom srl|egihosting|zenlayer inc|intercom online inc.|gs1 argentine|ovh hosting inc.|vps cheap inc.|limeip networks|blackhost ltd.|amazon.com inc.)$")
GROUP BY 
    date,
    channelGrouping,
    geoNetwork.networkLocation 
ORDER BY
    date ASC

Также обратите внимание: вы пропустили networkLocation из окончательного оператора SELECT. не смертельно, но было бы более разумно иметь это там

...