Как использовать регулярные выражения в Bigquery

Я не могу применить правильное регулярное выражение для столбца customtarget в bigquery.

С обычным 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'

Может ли кто-нибудь помочь мне извлечь данные, где CustomTargeting = '% u = somestring%'

Спасибо

1 ответ

Для 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*)') - надеюсь, что это самоописательно, но если нет - он делает поиск совпадений либо в начале строки, либо после ;

Другие вопросы по тегам