2017-01-14 2 views
1

Ich versuche, eine google bigquery Tabelle mit der Regex von this blog post abzufragen. Hier ist es, leicht modifiziert:Google bigquery Python-Client-Bibliothek SQL wählen Regex-Fehler

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

regex101 example of its usage

Es ist nicht jedoch Arbeit in meinem Google BigQuery Python Client SQL-Abfrage:

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 Fehler beim Parsen des regulären Ausdrucks "pd. ([^",. (\, `) \ ': []/\ = {}] *)": Ungültige Escape-Sequenz: \'

Antwort

2

Das Problem hier ist, dass BigQuery re2 Bibliothek für seine Regex-Operationen verwendet.

Wenn Sie die gleiche Regex versuchen, aber die golang Geschmack verwenden, werden Sie genau die gleiche error (Golang verwendet auch Re2).

Also vielleicht, wenn Sie nur die Flucht der '-Zeichen entfernen, haben Sie bereits für Sie funktioniert (wie ich hier getestet schien es richtig zu funktionieren).

Ein anderes Problem, das Sie möglicherweise finden, ist, dass das Ergebnis der SPLIT Operation ein ARRAY ist. Das bedeutet, dass BigQuery Ihre Abfrage nicht verarbeitet, die besagt, dass die Signatur von ARRAY<STRING> nicht als Eingabe zulässt. Sie könnten REGEXP_REPLACE statt:

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

Das Zeichen „\ n“ durch „“ in diesem Betrieb ersetzt und das Ergebnis ist ein STRING.

+0

Prost @Will, ich schätze die Lösung und Erklärung. Die 'REGEXP_EXTRACT' scheint an dem Array zu arbeiten, aber ich werde Ihre Methode ausprobieren, sollte ich diesen Fehler finden. – AlexG