管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

CLIからAthena を使ってCTASでのParquet形式への変換を行う(AWS,Athena)

AthenaでCSVファイルのParque形式への変換ができるのですが、GUIからだけでなく、CUIからやったらできるかな、と試したらできたのでメモ。

実行したコマンド

# GUI版
CREATE TABLE parquet_db.p_target_table
 WITH (external_location = 's3://<bucket_name>/<directory_name>/',
       ,format = 'PARQUET') 
AS SELECT * FROM original_db.target_table;

# CLI版
aws athena start-query-execution \
--query-string "CREATE TABLE parquet_db.p_target_table WITH (format = 'PARQUET') AS SELECT * FROM original_db.target_table;" \
--result-configuration OutputLocation=s3://<bucket_name>/<directory_name>/

CLIの場合、「--result-configuration」を指定する必要があるため、GUIでは「external_location」で指定していたParquetファイルの格納パスを「--result-configuration」にて指定しました。
そのせいなのか、双方で生成されたParquetファイルの格納パスに差が出ました。

# GUI版(指定したディレクトリ配下に作成される)
[ec2-user@ip-192-168-X-XXX ~]$ aws s3 ls s3://<bucket_name>/<directory_name>/ --recursive
2019-07-21 06:31:01       3298 <directory_name>/20190721_063057_00003_sx4xn_4f674de2-33ab-42b1-a5e9-472496a84998
2019-07-21 06:31:02    1802493 <directory_name>/20190721_063057_00003_sx4xn_c324745e-7838-4df5-b8de-6f8a0a7e7b6b

# CLI版(指定したディレクトリ配下に「/tables」ディレクトリが作成され、その配下に作成される)
[ec2-user@ip-192-168-X-XXX ~]$ aws s3 ls s3://<bucket_name>/<directory_name>/ --recursive
2019-07-21 06:13:15         83 <directory_name>/tables/abbe3dfb-1676-4642-ad7c-859d6341085c.metadata
2019-07-21 06:13:13       3298 <directory_name>/tables/abbe3dfb-1676-4642-ad7c-859d6341085c/20190721_061308_00001_v89wr_cdd1ced0-adb3-42c4-bb44-4893dd71c958
2019-07-21 06:13:13    1805174 <directory_name>/tables/abbe3dfb-1676-4642-ad7c-859d6341085c/20190721_061308_00001_v89wr_e62b513d-f8d2-4c5b-8413-57c9f7f7c88e

補足

CLI版でも「external_location」を指定した場合、GUI版と同じ結果が得られました。ただし、「OutputLocation」で指定したディレクトリに「*****.metadata」というファイル(Athena メタデータファイル)が作成されました。

メタデータファイルを (*.csv.metadata) を削除してもエラーは発生しませんが、クエリに関する重要な情報が失われます。


という記述がありますが、削除してもParquet化したテーブルの問い合わせには影響はありませんでした。

参考にしました