Spectrumで参照できるデータカタログを提供する。今回はS3のCSVを読み込んで加工し、列指向フォーマットParquetに変換しパーティションを切って出力、その後クローラを回してデータカタログにテーブルを作成してAthenaで参照できることを確認する。料金はジョブがDPU(4vCPU/16GBメモリ)時間あたり$0.44(最低2DPU/10分)かかる。クローラも同様にDPUで課金される。AthenaのCTASでもParquetを出力することができる。出力先にファイルがないようにする必要があったり重いクエリは失敗することがあるが手軽で良い。)})();開発用エンドポイントジョブの立ち上がりにやや時間がかかるため開発用エンドポイントを立ち上げておくとDPUが確保されて効率よく開発できる。立ち上げている間のDPUの料金がかかる。ジョブを実行し続けているようなもので結構高くつくので終わったら閉じるようにしたい。コンソールから立ち上げたNotebookは最初からつながっていて鍵の登録も必要なくて楽。Logsまわりに加えてGlueのDevEndpointとAssetの取得権限が付与されている。]}たまに立ち上げに失敗したり次のようなエラーで実行できないことがあったが、立ち上げ直したらうまくいった。kernel.printデバッグが捗る。...print(output_df.toDF().collect()[0].asDict())ジョブのスクリプトGlueはSpark標準のDataFrameを扱うこともできるが、独自にスキーマを柔軟に扱えるDynamicFrameというのをサポートしている。DataFrameとは相互に変換できるので、SQL文の実行などDataFrameにしかないAPIを使いたい場合は変換する。Sparkの設定を変えられない分、DynamicFrameがうまくやっているところもある。"\n"))入力は為替データのCSV。kawase2.csvDate,ZAR,BHD,HKD,INR,PHP,SGD,THB,KWD,SAR,AED,MXN,TWD2002/4/1,11.76,353.65,17.07,2.73,2.61,72.21,3.07,434.14,35.52,36.26,14.81,3.82...やることは次の通り。dateの3フィールドに分割、各値をUSDとの比にするcreate_dynamic_frame.from_options()でパーティションをyearで切ってフォーマットはParquetで書き込むクローラの実行を開始するtransformation_ctxは後述するジョブのブックマークで使われる一意な識別子。region_name='us-east-1')glue_client.start_crawler(Name='kawase')Glueのロールで読める場所にアップロードする。s3://aws-glue-scripts-*****/root/main.pyジョブとクローラの作成ジョブを作成する。デフォルトで10DPU使うようになっているので調整する。1DPUで2つのExecutorが動く。ブックマークを有効にすると以前処理したデータは処理しないようにできるが、残念ながらParquetは対応していないため2回実行すると重複して出力されてしまう。クローラはデータをクローリングしてデータカタログの指定のデータベースにスキーマやパーティションといったメタデータテーブルを作成する。以前、LambdaでAthenaのスキーマを管理したりパーティションを切ったりするバッチを作ったが、Glueのデータカタログ上で同じことをやってくれる。楽だけど現状DPUの設定項目がないのでデータが多くて時間がかかる場合はどうしようもなさそう。sambaiz-netジョブの実行トリガーを設定して定期的に実行することもできるが、今回は手動で実行する。kawaseパーティションごとにParquetが出力されている。クローラの実行が終わるとデータカタログにテーブルが追加される。Athenaで参照AthenaをGlueリリース以前から使っていた場合はデータカタログをGlueのものにアップグレードする必要がある。Athenaのところにリンクが出るので押しとけばIAMロールの更新など大体やってくれる。これによってDatabaseにGlueのものが出るようになりクエリも実行できるようになる。