Amazon Athena の RegexSerde のエラー「Number of matching groups doesn't match the number of columns(マッチングさせるグループの数が、列の数と一致しません)」の解決方法を教えてください。

最終更新日: 2020 年 9 月 24 日

RegexSerde を使用して、Amazon Athena テーブルを作成しました。テーブルをクエリすると、「Number of matching groups doesn't match the number of columns.」というエラーが表示されます。

解決方法

このエラーを解決するには、正規表現パターン内のキャプチャグループの数を、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

行には 7 つのフィールドがあります。正しい正規表現パターンを次に示します:

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

注: RegexSerDe は、Java 標準に準拠しています。バックスラッシュは Java String クラスのエスケープ文字であるため、1 つのバックスラッシュを、二重のバックスラッシュで記述する必要があります。たとえば、正規表現での \ 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/'

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?