Как использовать регулярные выражения в Bigquery - PullRequest
0 голосов
/ 04 декабря 2018

Я не могу применить правильное регулярное выражение к столбцу пользовательской цели в большом запросе.

При обычном MSSQL:

SELECT * from mytable where CustomTargeting like = '%u=%'  -- is all okay

С Bigquery (legacy-sql):

SELECT REGEXP_EXTRACT(CustomTargeting, r'[^u=\d]') as validate_users
from [project:dataset.impressions_4213_20181112] Limit 10

Ошибка:

Необходимо указать только одну группу захвата

Обновление:

Пока не удалось получить подстроку u = 'anystring'

enter image description here

Как извлечь данные, когда CustomTargeting = '% u =SomeString% '?

1 Ответ

0 голосов
/ 04 декабря 2018

Для BigQuery Legacy SQL

В SELECT списке операторов вы можете использовать
SELECT REGEXP_EXTRACT(CustomTargeting, r'(?:^|;)u=(\d*)')

В WHERE предложении - вы можете использовать
WHERE REGEXP_MATCH(CustomTargeting, r'(?:^|;)u=(\d*)')

Итак, ваш запрос может выглядеть следующим образом:

#legacySQL
SELECT CustomTargeting, REGEXP_EXTRACT(CustomTargeting, r'(?:^|;)u=(\d*)') 
FROM [project:dataset.impressions_4213_20181112]
WHERE REGEXP_MATCH(CustomTargeting, r'(?:^|;)u=(\d*)')   

Для BigQuery Standard SQL

То же для SELECT
Но отличается для WHERE - WHERE REGEXP_CONTAINS(CustomTargeting, r'(?:^|;)u=(\d*)')

#standardSQL
SELECT CustomTargeting, REGEXP_EXTRACT(CustomTargeting, r'(?:^|;)u=(\d*)') 
FROM `project.dataset.impressions_4213_20181112`
WHERE REGEXP_CONTAINS(CustomTargeting, r'(?:^|;)u=(\d*)')  

Обновление - по адресу, указанному в примере данных:

Регулярное выражение обновлено с r'^u=(\d*)') до r'(?:^|;)u=(\d*)') - надеюсь, оно самоописательно, но если нет- поиск совпадений производится в начале строки или после ;

...