見出し画像

Terraformで作ったGlueのテーブルに対してAthenaでShow Create Tableができない問題の対処

普段Terrafromでテーブルの管理をすることがあるのですが、テーブルを作成し適用したところshow create tableがAthenaよりできませんでした。

エラー内容としては、Null Pointer Excepitonが発生してしまう様な状態でした。

最終的には以下の形に落ちつたいのですが、


resource "aws_glue_catalog_table" "hoge_pekepek" {
 name          = "pekepek"
 database_name = "hoge"

 table_type = "EXTERNAL_TABLE"

 parameters = {
   EXTERNAL              = "TRUE"
 }

 partition_keys {
   name = "dt"
   type = "string"
 }

 storage_descriptor {
   location          = "s3://hogehoge.com/data/hoge.db/pekepek"
   input_format      = "org.apache.hadoop.mapred.TextInputFormat"
   output_format     = "org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat"
   number_of_buckets = -1
   ser_de_info {
     serialization_library = "org.openx.data.jsonserde.JsonSerDe"

     parameters = {
       "ignore.malformed.json" = true,
       "serialization.format"  = "1"
     }
   }

   columns {
     name = "various"
     type = "string"
   }
 }
}

最初はなにが悪いのかさっぱりでした。

修正前のコードですが

nameというプロパティーを使ってserdeのタイプを指定していました。

しかし、この方法だと、うまくいく時もあればうまくいかない時もある様で

同等のコードである

"serialization.format" = "1"

を指定することで問題は解決しました。


resource "aws_glue_catalog_table" "hoge_pekepek" {
 name          = "pekepek"
 database_name = "hoge"

 table_type = "EXTERNAL_TABLE"

 parameters = {
   EXTERNAL              = "TRUE"
 }

 partition_keys {
   name = "dt"
   type = "string"
 }

 storage_descriptor {
   location          = "s3://hogehoge.com/data/hoge.db/pekepek"
   input_format      = "org.apache.hadoop.mapred.TextInputFormat"
   output_format     = "org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat"
   number_of_buckets = -1
   ser_de_info {
     serialization_library = "org.openx.data.jsonserde.JsonSerDe"
     name = "ROW FORMAT SERDE"   <----------ここが上だとserialization.format
     parameters = {
       "ignore.malformed.json" = true,
     }
   }

   columns {
     name = "various"
     type = "string"
   }
 }
}。


いいなと思ったら応援しよう!