Сбой регулярного выражения в REGEXP_EXTRACT в функции read_gbq - PullRequest
0 голосов
/ 26 сентября 2019

Мне не удается успешно выполнить функцию регулярного выражения (т. Е. REGEXP_EXTRACT) в функции read_gbq.

read_gbq поступает из модуля pandas_gbq.

Оператор импорта в моей программе на Python: from pandas_gbq import read_gbq.

Версия pandas-gbq в моей среде: 0.8.0

Регулярное выражение, как мне кажется, не работает из-за невозможности распознать символ Escape черной косой черты в двойных кавычках.

Это регулярное выражение прекрасно работает в Big Query и в онлайн-тестере RegEx с использованием Python (см. Ниже в разделе кода).

Спасибо за ваше время и внимание

component = 'CO_ORDER_SUMMARY'
def Read_CO_Order_Summary():                            

        query = ('select co.timestamp, co.jsonPayload._userid_ as co_SVOC, co.jsonPayload.response,  \
                 REGEXP_EXTRACT(co.jsonPayload.response, customerOrderId\":\"([^\"]*)\".*) as CustomerOrderID \
        from `exported_logs_v2.mcc_checkout_service_servicelog_20190623` co  '
             'where co.jsonPayload.component = ' '"' + component + '"' 

      'order by co.timestamp, co.jsonPayload._userid_ '
      'limit 1'
                  )

        co_agg = read_gbq(query, projectid, dialect='standard')

        return(co_agg)
co_agg = Read_CO_Order_Summary()

**ERROR MESSAGE**
GenericGBQException: Reason: 400 Syntax error: Expected “)” but got string literal “:” at [1:253]
****************************************
IN REGEX101.com TESTER (using the Python "flavor" setting)
REGEX
customerOrderId\":\"([^\"]*)\".*
STRING
{"lastModifiedDate":"2019-06-23 16:50:18.212","localStoreId":1515,"cartId":"HC100006597310","customerOrderId":"W838207358","
RESULT
Match 1     
Full match  customerOrderId":"W838207358"," 
Group 1.    W838207358
******************* Big Query ******************
SELECT timestamp, jsonpayload._userid_, jsonpayload.response, 
 -- REGEXP_EXTRACT(jsonPayload.response, r'\"customerOrderId\":\"(.*?)\","')  as CustomerOrderID,    ## All 3 of these work 
 -- REGEXP_EXTRACT(jsonPayload.response, r"customerOrderId\":\"(.*?)\",")     as CustomerOrderID  
    REGEXP_EXTRACT(jsonPayload.response, r"customerOrderId\":\"([^\"]*)\".*") as CustomerOrderID  
FROM `exported_logs_v2.mcc_checkout_service_servicelog_201906*`
   where jsonpayload.component like '%CO_ORDER_SUMMARY%'   ##'%CO_ORDER_SUMMARY%'  or   '%CO_SECURE_LOGON%'
     and ( _TABLE_SUFFIX between "23" and "23" )
     and   jsonPayload._userid_ = "0516CFC3D4B001FB0S" 
 order by timestamp asc

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Если co.jsonPayload.response является допустимой строкой JSON, вы можете использовать JSON_EXTRACT_SCALAR(co.jsonPayload.response, '$.customerOrderId').

0 голосов
/ 26 сентября 2019

Вы должны экранировать \ символ в строках Python - просто замените \ на \\.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...