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

2분 분량
0

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

해결 방법

이 오류를 해결하려면 ​regex 패턴에서 캡처하는 그룹 수가 Athena에서 테이블을 생성할 때 정의한 필드 수와 일치하는지 확인하십시오. 예를 들어, 다음은 입력 데이터 행입니다.

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

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

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

참고: RegexSerDe는 Java 표준을 따릅니다. 백슬래시는 Java String 클래스의 이스케이프 문자이므로 이중 백슬래시를 사용하여 단일 백슬래시를 정의해야 합니다. 예를 들어 \w를 정의하려면 regex에서 \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/'

관련 정보

SerDe 사용

AWS 공식
AWS 공식업데이트됨 2년 전
댓글 없음

관련 콘텐츠