RegexSerDe를 사용해서 Amazon Athena 테이블을 생성했습니다. 이 테이블에 쿼리하자 "Number of matching groups doesn't match the number of columns."라는 오류가 나타났습니다.

이 오류를 해결하려면 ​regex 패턴에서 캡처하는 그룹 수가 Athena에서 테이블을 생성할 때 정의한 필드 수와 일치하는지 확인하십시오.

예를 들어, 다음은 입력 데이터 행입니다.

64.242.88.10 - - [07/Mar/2004:16:06:51 -0800] "GET /twiki/bin/rdiff/TWiki/NewUserTemplate?rev1=1.3&rev2=1.2 HTTP/1.1" 200 4523

이 행에는 필드가 일곱 개 있습니다. 이것은 올바른 regex 패턴입니다. 

^([0-9.]+) ([\\w.-]) ([\\w.-]) \\[([A-Za-z0-9:/]+ [+-][0-9]{4})\\] \"(.+?)\" ([0-9]{3}) ([0-9]+)$

참고:RegexSerDe는 Java 표준을 준수합니다. Java String 클래스에서는 백슬래시가 이스케이프 문자이기 때문에 백슬래시 하나를 정의하려면 백슬래시 두 개를 사용해야 합니다. 예를 들어 \w를 정의하려면 regex에서 \\w를 사용해야 합니다.

이 regex 패턴에는 캡처 그룹이 일곱 개 있고, 입력 데이터의 필드는 일곱 개입니다. 이 테이블에 쿼리를 하면 RegexSerDe가 "Number of matching groups doesn't match the number of columns" 예외를 보내지 않습니다.

DDL 명령문을 실행하려면 다음 예제와 같이 SERDEPROPERTIES에 대한 regex 캡처 그룹을 지정합니다.

CREATE external table logs(col1 string, col2 string, col3 string, col4 string, col5 string, col6 string, col7 string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^([0-9.]+) ([\\w.-]) ([\\w.-]) \\[([A-Za-z0-9:/]+ [+-][0-9]{4})\\] \"(.+?)\" ([0-9]{3}) ([0-9]+)$") LOCATION 's3://mybucket/path/'

페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시됨: 2018-08-27