2014-03-27 10 views
1

나는 다음과 같은 현상을 찾을 실패 컴파일오류 : ""정규 표현식을 구문 분석하지 못했습니다 패턴이 너무 커서는 -

내가 필드의 100 단위가 REGEXP_EXTRACT 기능을 사용하여 추출과 BQ 쿼리가 있습니다.

새 표현식을 추가했는데 다음 오류가 발생했습니다. 정규 표현식 ""을 (를) 파싱하지 못했습니다. 패턴이 너무 커서 - 컴파일에 실패했습니다.

이 표현식 만 쿼리 할 때 모든 것이 잘 실행되고 큰 쿼리에서 오류가 발생합니다.

Failed to parse regular expression "(?:\w){162}(\w)": pattern too large - compile failed 

하지만 실행하는 경우 :

SELECT repository.description, 
    REGEXP_EXTRACT(repository.description,r'(?:\w){0}(\w)') as Pos1, 
    REGEXP_EXTRACT(repository.description,r'(?:\w){1}(\w)') as Pos2, 
    REGEXP_EXTRACT(repository.description,r'(?:\w){2}(\w)') as Pos3, 
. 
. here it goes on and on in the same pattern 
. 
    REGEXP_EXTRACT(repository.description,r'(?:\w){198}(\w)') as Pos199, 
    REGEXP_EXTRACT(repository.description,r'(?:\w){199}(\w)') as Pos200, 
    REGEXP_EXTRACT(repository.description,r'(?:\w){200}(\w)') as Pos201, 
    FROM [publicdata:samples.github_nested] LIMIT 1000 

그것은 반환

은 GitHub의 샘플 데이터에 문제가베이스와 간단한 정규식의 복제입니다

SELECT repository.description, 
REGEXP_EXTRACT(repository.description,r'(?:\w){162}(\w)') as Pos163, 
FROM [publicdata:samples.github_nested] LIMIT 1000 

모든 것이 정상적으로 실행됩니다 ...

단일 쿼리에서 사용할 수있는 REGEXP_EXTRACTs 수 또는 그 복합성에 제한이 있습니까?

+0

샘플 작업 ID? – Pentium10

답변

0

문제를 살펴 보겠습니다. 이 문제를 해결하려면 캐릭터 위치별로 필드를 별도의 필드로 나눠서 필드를 "{pos1 :"a ", pos2 :"b ", pos3 : "기음"}. 그 맞습니까? 그렇다면 LEFT() 및 RIGHT() 함수를 사용해보십시오. as in

LEFT(1, reponsitory.description) as pos1, 
RIGHT(1, LEFT(2, reponsitory.description)) as pos2, 
RIGHT(1, LEFT(3, reponsitory.description)) as pos3. 

이것은 정규 표현식 200 개를 컴파일하는 것보다 적은 리소스를 사용해야합니다 (아직 빠르지는 않을지라도).

+0

감사합니다. 내 쿼리는 문제를 재현하는 샘플 일뿐입니다. 내 진짜 쿼리는 많은 정규 표현식을 포함합니다. –