Amazon Athena에서 "Number of matching groups doesn't match the number of columns"라는 RegExSerde 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 24일

RegExserde를 사용하여 Amazon Athena 테이블을 생성했습니다. 테이블을 쿼리할 때 다음과 같은 오류가 발생합니다: "Number of matching groups doesn't match the number of columns."

해결 방법

이 오류를 해결하려면 정규식 패턴의 캡처 그룹 수가 Athena에서 테이블을 만들 때 정의한 필드 수와 일치하는지 확인합니다. 예를 들어 여기에 1개 행의 입력 데이터가 있습니다.

64.xxx.xx.xx - - [07/Jul/2020:16:06:51 -0800] "GET /twiki/bin/rdiff/TWiki/NewUserTemplate?rev1=1.3&rev2=1.2 HTTP/1.1" 200 4523

이 행에는 7개의 필드가 있습니다. 이것은 올바른 정규식 패턴입니다.

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

참고: RegexSerDe는 Java 표준을 따릅니다. 백슬래시는 Java String 클래스의 이스케이프 문자이므로 이중 백슬래시를 사용하여 단일 백슬래시를 정의해야 합니다. 예를 들어, “\w”를 정의하려면 정규식에 “\\w”를 사용해야 합니다.

이 정규식 패턴에는 7개의 캡처 그룹이 있으며 입력 데이터에는 7개의 필드가 있습니다. 테이블을 쿼리 할 때 RegExserde에서 "Number of matching groups doesn't match the number of columns" 예외가 발생하지 않습니다.

DDL 문을 실행하려면 다음 예제와 같이 SERDEProperties에 대한 정규식 캡처 그룹을 지정합니다.

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://doc-example-bucket/path/'

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?