0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AthenaにてOpenCSVSerDeでダブルクォーテーションの利用で作成したテーブルのクエリエラー

Posted at

エラー

HIVE_BAD_DATA: Error parsing field value '' for field X: For input string: ""

Athenaでクエリを流す時に上記のエラーが出ました。

テーブル定義

テーブル作成時のエンジンは OpenCSVSerde でダブルクォーテーションを指定して、CSVデータを処理したいです。

...
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   'separatorChar' = ',',
   'quoteChar' = '"',
   'escapeChar' = '\\'
   )
STORED AS TEXTFILE
LOCATION 's3://DOC-EXAMPLE-BUCKET/mycsv/';

解決方法

AWSのKnowlageCenterの記事に記載されています。
Why do I get the error "HIVE_BAD_DATA: Error parsing field value '' for field X: For input string: """ when I query CSV data in Amazon Athena?

一言で言うと、テーブル定義のDDLで全部のカラムを STRING として定義すれば解消します

原理

その理由はOpenCSVSerdeはデータを解析する時、nullでも ""でも、なんでもいいです、とりあえず全部STRINGとして取り扱ってください。こうするとエラーがならないです。

おまけ

なぜ OpenCSVSerde を利用しますかと言われたら、今回処理したいCSVデータはCURレポートです、出力したCSVデータは一部だけカンマ「,」が入っていてダブルクォーテーションで囲まれています。OpenCSVSerde を利用しないとこんなデータの列ずれが発生します。
要するには、一部のデータだけダブルクォーテーションで囲まれていても、OpenCSVSerde を利用して quoteChar = '"'を指定してもOKです、ダブルクォーテーションで囲まれていないデータへの影響がありません。

文句

AWSのCURレポートはCSVフォーマットの出力データはほんっとうに馬鹿馬鹿しいですわ。カラムは可変だし、Athenaで大文字小文字が区別できないのに、レポート中で大文字小文字で区別するカラムがあるし、カンマが入っているデータも存在するし。。。Athena整合性を有効化によってある程度が回避できますが、なんでそもそももっといい構成にしてないのか?

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?