MHiroのエンジニアブログ

埼玉某所に住むインフラエンジニアのブログ

非構造化データをAthenaのテーブルに追加する

前回のお話の続き。

blog.hiroakimiki.jp

非構造化データをAthenaテーブルに追加したい

以下のような非構造化データがS3に格納されてます。

2021-09-03 22:05:35,125 INFO [test] message: I am a student from 1.1.1.1/24 (size: 20.0 KB)

2021-09-03 22:06:35,125 INFO [test] message: I am a student from 1.1.1.1/24 (size: 20.0 KB)

[INFO] [test] Script Version: 4.0

Preparing ...

Fri Sep  3 22:07:36 UTC 2021

先にクレンジングしたいところではありますが、今回はこれを無理やりAthenaにぶち込みます。

テーブル作成

当該S3バケットは、「<S3バケット名>/year/month/date/hour/」プレフィクスに従って格納されてます。 以下のクエリでテーブルを作成しました。(もっと良い方法があるかもしれない。。。)

CREATE EXTERNAL TABLE IF NOT EXISTS database.table(
  `contents` string 
) PARTITIONED BY (
  datehour string 
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
) LOCATION 's3://<S3バケットパス>/'
TBLPROPERTIES (
 "projection.enabled" = "true",
 "projection.datehour.type" = "date",
 "projection.datehour.range" = "2020/01/01/00,NOW",
 "projection.datehour.format" = "yyyy/MM/dd/HH",
 "projection.datehour.interval" = "1",
 "projection.datehour.interval.unit" = "HOURS",
 "storage.location.template" = "s3://<S3バケットパス>/${datehour}"
  );