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"
}
}
}。