AWS Athenaでの備忘録
以下、備忘録です。
同じような境遇になった方の参考になればいいな程度で残しておきます。
やったこと。(前置き)
まず、何をしたのかってことですが。
とある業務にて、AWSからGCPへの移管が決まり、
AWS内のs3に格納されているCSVファイルをGCP側へ持っていきたかったのですが、当時の職場で管理されていたファイルの中身の状態が正直なところダメダメでして。
というのもNULLのはずなのに、文字列で「NULL」って値が入っていたり、「,(カンマ)」区切りデータと、「”(ダブルコーテーション)」区切りデータが混在してたり。
そのため、直接的にGCP側でロードすることができなかったため、CSVファイルの中身を整える必要がありました。
ファイルを書き換えるためのコードを別で作成して実行しようにもファイルの数もかなり膨大だったため面倒臭く、Athena上でSQLを使いながら値を整えられれば作業が非常に楽だなと思いました。(ゴリ押し的な考え方ですが。)
よっぽど変なカラムずれなど起こしてなければ、Glueのクローラーで強引に読み込んで、TBL化できますので、TBL化できればこっちのもんです。
その当時やった作業の備忘録となります。
文字置き換え
「NULL(文字列)」 ⇨ NULL値
select
case
when カラム名 like 'NULL' then null
else カラム名
end as カラム名
from XXXX.YYYY.ZZZZ
これでカラム名に「NULL(文字列)」が入っているものを正式にNULL値に書き換えできます。
「”(ダブルコーテーション)」 ⇨ 「」(削除)
select
REPLACE(カラム名, '"', '') as カラム名
from XXXX.YYYY.ZZZZ
「,(カンマ)」区切りデータと、「”(ダブルコーテーション)」区切りデータが混在している場合、「”(ダブルコーテーション)」区切りが邪魔なので、消しました。
「指数表示」を数字表記に戻す
select
cast(カラム名 as decimal) as カラム名
from XXXX.YYYY.ZZZZ
これやらないとAthenaのクエリ結果上は「1.23E+08」のように数字が「E」の表記を使って表現されクエリ結果をダウンロードした場合もちゃんと数字にならないので、直してあげます。
castを使えば、表記上は数字のみに修正されます。