AthenaからBigQueryにデータを転送してみた

Yoshina9aPosted by

この記事はGRIPHONE Advent Calendar 2020 4日目の記事です。

はじめまして、データマイニングをしている吉永です。

先日、グリフォンのETL基盤にAthenaからBigQueryへの転送を追加しました。
今回は転送のために使用したembulk-input-Athenaプラグインのご紹介していきます。

導入

グリフォンでは可視化したいデータを全てBigQueryに転送しています。
今まではMySQL・スプレッドシートのデータで事足りていたのですが、
Athenaのデータを可視化する必要があったため、また大量のデータの一部のみ必要だったため、
SQLが記述できるこちらのプラグインを導入しました。

embulk-input-athenaを入れる

今回はこちらのツールを導入しました。
https://github.com/shinji19/embulk-input-athena
Athenaから取り出したいデータを手っ取り早くQueryを記述できるところが魅力です。

プラグインの導入方法はGemfileにgem ‘embulk-input-athena’と記述するだけです。

★Gemfile

source 'https://rubygems.org/'

# No versions are specified for 'embulk' to use the gem embedded in embulk.jar.
# Note that prerelease versions (e.g. "0.9.0.beta") do not match the statement.
# Specify the exact prerelease version (like '= 0.9.0.beta') for prereleases.
gem 'embulk'

#
# 1. Use following syntax to specify versions of plugins
#    to install this bundle directory:
#
#gem 'embulk-output-mysql'                     # the latest version
#gem 'embulk-input-baz', '= 0.2.0'             # specific version
#gem 'embulk-input-xyz', '~> 0.3.0'            # latest major version
#gem 'embulk-output-postgresql', '>= 0.1.0'    # newer than specific version
#
#gem 'embulk-output-awesome', git: 'https://github.com/you/embulk-output-awesome.git', branch: 'master'
#

#
# 2. When you modify this file, run following command to
#    install plugins:
#
#   $ cd this_directory
#   $ embulk bundle
#

#
# 3. Then you can use plugins with -b, --bundle BUNDLE_PATH command:
#
#   $ embulk guess -b path/to/this/directory  ...
#   $ embulk run -b path/to/this/directory  ...
#   $ embulk preview -b path/to/this/directory  ...
#

gem 'embulk-input-athena'
gem 'embulk-output-bigquery'

次にembulkのyamlファイルのin部分に設定を記述します。
今回は環境変数を渡していますが、直接記述も可能です。

★yaml.liquid

in:
  type: athena
  database: {{ env.athena_database }}
  athena_url: "jdbc:awsathena://athena.ap-northeast-1.amazonaws.com:443/"
  s3_staging_dir: {{ env.s3_staging_dir }}
  access_key: {{ env.athena_AccessKeyID }}
  secret_key: {{ env.athena_SecretAccessKey }}
  query: {{ env.query }}
  columns: {{ env.columns }}

out部分にはBigQueryの設定を記述していただき、
実行していただくとBigQuery側にデータが格納され、
晴れてデータの可視化の環境が整いました!(実行結果は割愛していますが、成功しています!)

失敗談

環境整備する上で凡ミスをしていました。
具体的にはs3_staging_dirに出力用のs3ディレクトリを用意していなかったことです。
プラグインのs3_staging_dirの説明を拝借すると、

s3_staging_dir: The S3 location to which your query output is written, for example s3://query-results-bucket/folder/. (string, required)

とあり、クエリの出力先を設定してね。と説明されています。

説明読めよ💢、というツッコミは一旦棚に上げさせていただき、
何を思ったのか私はAthenaのDatabaseのLocationを設定していました。

ちなみにしっかり設定せずに実行したところ、下記のエラーが出力されました。

java.sql.SQLException: Access denied when writing output to url: s3://****************************.csv . Please ensure you are allowed to access the S3 bucket. If you are encrypting query results with KMS key, please ensure you are allowed to access your KMS key

今回はそのバケットに書き込みの権限が無かったことが幸いして、このようなエラーとなりました。
皆さんは気をつけていただければと思います。

まとめ

今回はAthenaのデータを可視化するために、
既存のEmbulkの環境に’embulk-input-athena’を導入し、BigQueryに転送しました。

手軽にAthenaのデータを移動したいときに導入してみてはいかがでしょうか。