2017-01-14 4 views
1

Я пытаюсь запросить таблицу bigquery google, используя регулярное выражение от this blog post. Вот она, слегка модифицирована:Google bigquery клиентская библиотека python SQL select regex error

pd\.([^”,\.\(\,\`) \’:\[\]\/\\={}]*)

regex101 example of its usage

Это не означает, однако, работа в моем Google BigQuery питон клиент SQL запрос:

query_results = client.run_sync_query(
""" 
SELECT 
    REGEXP_EXTRACT(SPLIT(content, '\n'), 
       r'pd\.([^”,\.\(\,\`) \’:\[\]\/\\={}]*)') 
FROM 
    [fh-bigquery:github_extracts.contents_py] 
LIMIT 10 
""") 

query_results.run() 

data = query_results.fetch_data() 
data 

BadRequest: BadRequest: 400 Не удалось проанализировать регулярное выражение «pd. ([^",. (\, `) \ ': []/\ = {}] *)": Недействительная escape-последовательность: \'

ответ

2

Проблема заключается в том, что BigQuery использует библиотеку re2 для операций с регулярным выражением.

Если попробовать то же регулярное выражение, но с использованием golang аромата вы увидите точно такие же error (golang также использует re2).

Так что, может быть, если вы просто удалите экранирование символа ', у вас уже будет это работать для вас (поскольку я тестировал здесь, он работал правильно).

Еще одна проблема, которая может возникнуть в результате того, что результатом операции SPLIT является ARRAY. Это означает, что BigQuery не будет обрабатывать ваш запрос, говоря, что подпись REGEXP_EXTRACT не позволяет вводить ARRAY<STRING>. Вы можете использовать вместо REGEXP_REPLACE:

""" 
SELECT 
    REGEXP_EXTRACT(REGEXP_REPLACE(content, r'.*(\\n)', ''), 
       r'pd\.([^”,\.\(\,\`) ’:\[\]\/\\={}]*)') 
FROM 
    [fh-bigquery:github_extracts.contents_py] 
LIMIT 10 
""" 

Символ «\ п» заменяется на «» в этой операции, и результатом является STRING.

+0

Cheers @Will, я ценю решение и объяснение. 'REGEXP_EXTRACT', похоже, работает над массивом, но я буду экспериментировать с вашим методом, если я найду эту ошибку. – AlexG