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