概要
【Athena】S3ファイルを参照するクエリを作成するなどしてAWS Athenaで作ったテーブルの定義は、直接編集する手段が無さそう。DDL文を出力・編集して再度実行するよう、対応します。
既存テーブルのDDL文を出力する
Athenaのクエリエディタにて、サイドバーからテーブルの「︙」マークをクリックし、テーブルDDLを作成
を実行します。
クエリエディタに以下SQLを書いて実行しても同じ結果が得られます。
SHOW CREATE TABLE `t_something`; -- テーブル名は適宜、手元の内容に応じて変更のこと
上記により、クエリエディタの結果欄にCREATE TABLE文(DDL)が吐き出されているので、コピーします。後の手順でテーブルの削除を行うので、コピーしたDDL文はクエリエディタもしくは別途テキストエディタにペーストしておくと安心です。
今回の事例では、以下のようなDDL文が吐き出されたと仮定して進めます。
CREATE EXTERNAL TABLE `t_something`(
`id` varchar(40),
`no` varchar(40)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://some-bucket/cleansing-data'
TBLPROPERTIES (
'classification'='csv',
'transient_lastDdlTime'='1733349313')
既存テーブルを削除し、新しいDDL文を実行する
サイドバーから該当テーブルの「︙」マークをクリックするか、以下SQLをクエリエディタで実行して既存テーブルを削除します。
DROP TABLE `t_something`;
その後、クエリエディタにて必要なDDL文編集を行い、実行します。これにより、新しい定義にてテーブルが作成されます。たとえば以下SQLでは、先の手順で吐き出した既存テーブルのDDL文に対して、CSVヘッダ行をスキップするプロパティを追加しています。
CREATE EXTERNAL TABLE `t_something`(
`id` varchar(40),
`no` varchar(40)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://some-bucket/cleansing-data'
TBLPROPERTIES (
'classification'='csv',
'skip.header.line.count'='1', -- S3から読み込む際、ヘッダ行をスキップするプロパティを追加
'transient_lastDdlTime'='1733349313')
ここまでの作業で、新しく作成されたテーブルにて、変更内容が反映されているはず。
トラブルシューティング
コピーしたDDL文を編集・再実行時にエラー FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. AlreadyExistsException(message:Table table_name already exist)
DROP TABLEの実行忘れ。既存テーブルの削除を行ってから、改訂したDDL文を実行してください。