embulk-input-athenaでは弊社の要件に合わなかったので、参考にさせて頂きつつ、embulk-input-jdbcでやってみました。
前準備
JDBCドライバをダウンロードする
Athena用JDBCドライバをダウンロードし、Embulkから参照可能な場所に保存しておきます。
wget -P /path/to/ https://s3.amazonaws.com/athena-downloads/drivers/JDBC/SimbaAthenaJDBC-2.0.21.1000/AthenaJDBC42.jar
設定ファイルを書く
Embulkの設定ファイルに、Athenaからの入力設定を記述します。
# vim /path/to/_in_athena.yml.liquid
in:
type: jdbc
# ダウンロードしたJDBCドライバのパス
driver_path: /path/to/AthenaJDBC42.jar
# JDBCドライバのクラス名
driver_class: com.simba.athena.jdbc.Driver
# JDBC URL (接続情報)
# AwsRegion AWSリージョン
# User AWSアクセスキー
# Password AWSシークレットアクセスキー
# WorkGroup Athenaのワークグープ名 AWSコンソール->Athena->ワークグループで確認
url: jdbc:awsathena://AwsRegion={{AWS_DEFAULT_REGION}};User={{AWS_ACCESS_KEY_ID}};Password={{AWS_SECRET_ACCESS_KEY}};WorkGroup={{ATHENA_WORK_GROUP}}
query: |
SELECT
*
FROM (
SELECT
*, row_number() over (PARTITION BY id ORDER BY updated_at DESC) AS rn
FROM {{DB_NAME}}.{{TABLE_NAME}}
)
WHERE rn = 1
参考
- JDBC ドライバーのインストールおよび設定ガイド(pdf)
- JDBCドライバの公式ガイドです。JDBC URLのオプションは上記の限りだけではないので、調べてみれば多様な要件に対応できるかもしれません。
その他
- embulk-input-athenaを採用しなかった理由
- カラムの指定がrequiredであるため、全カラムまるごと転送したいという要件に合いませんでした。