В SQL я могу объединить данные, используя предложение like или содержит, чтобы исключить некоторые значения? - PullRequest
1 голос
/ 09 апреля 2019

Я работаю над проектом по созданию некоторых запросов из данных Google Analytics в BigQuery для репликации некоторых отчетов для одного конкретного KPI. У меня есть таблица со списком сайтов, которые необходимо исключить из данных Google Analytics, чтобычтобы получить правильную метрику.

В моем списке может быть что-то вроде:
sitename.com

Однако мне нужно сопоставить это со столбцом eventLabel в BigQuery, где URL может вернутьсяas:
http://sitename.com/subpage/extra-subpage

Я не могу сделать Not In, так как это требует прямого соответствия, я попытался использовать оператор like, однако я получаю следующую ошибку

Scalar subquery produced more than one element

Я не совсем уверен, как еще действовать, и мне интересно, нужно ли мне сделать запрос, который говорит, что строка соответствует (как я могу заставить его работать, если я использую внутреннее соединение, а затем использую эту новую таблицусделать исключения, так как я могу сохранить eventLabel и затем сделать свой Not In на основании этого?

SELECT Distinct
h.eventinfo.eventAction  eventAction,
h.eventinfo.eventlabel eventlabel

FROM `projectName.ga_sessions_*`, unnest(Hits) h 


 WHere 
 _TABLE_SUFFIX BETWEEN "20190101" AND  FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))

and type = 'EVENT'
 and h.eventInfo.eventCategory = 'EventName'

and Replace(Replace(Replace(h.eventInfo.eventLabel,'http://',''),'https://',''),'www.','') 
                                                Not like (select concat(ThirdPartyURL,'%') from `projectName.datasetName.ExclusionList`)

Надеюсь, вышеприведенное имеет смысл.

TIA.

1 Ответ

1 голос
/ 09 апреля 2019

После воспроизведения вашей проблемы решение должно использовать NOT IN вместо NOT LIKE следующим образом:

WITH `projectName.datasetName.ExclusionList` AS
  (SELECT 'label1' AS ThirdPartyURL UNION ALL
   SELECT 'label2')

SELECT DISTINCT h.eventinfo.eventAction eventAction,
                h.eventinfo.eventlabel eventlabel
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*`,
     unnest(Hits) h
WHERE _TABLE_SUFFIX BETWEEN "20170801" AND "20170802"
  AND TYPE = 'EVENT'
  AND h.eventInfo.eventCategory = 'EventName'
  AND Replace(Replace(Replace(h.eventInfo.eventLabel, 'http://', ''), 'https://', ''), 'www.', '') 
  NOT IN
        (SELECT ThirdPartyURL FROM `projectName.datasetName.ExclusionList`)

Это ссылка на документацию SQL, связанную с BigQuery

...